27.02.2013 Views

Netcool/Precision IP Discovery Configuration Guide 3.6

Netcool/Precision IP Discovery Configuration Guide 3.6

Netcool/Precision IP Discovery Configuration Guide 3.6

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

frontmatter.fm August 16, 2006<br />

<strong>Netcool</strong>/<strong>Precision</strong> for <strong>IP</strong><br />

NetworksTM <strong>3.6</strong><br />

<strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


© 2006 Micromuse Inc., Micromuse Ltd.<br />

All rights reserved. No part of this work may be reproduced in any form or by any<br />

person without prior written permission of the copyright owner. This document is<br />

proprietary and confidential to Micromuse, and is subject to a confidentiality<br />

agreement, as well as applicable common and statutory law.<br />

Micromuse Disclaimer of Warranty and Statement of Limited Liability<br />

Micromuse provides this document “as is”, without warranty of any kind, either<br />

express or implied, including, but not limited to, the implied warranties of<br />

merchantability, fitness for a particular purpose or non-infringement. This<br />

document may contain technical inaccuracies or typographical errors. Micromuse<br />

may make improvements and changes to the programs described in this document<br />

or this document at any time without notice. Micromuse assumes no responsibility<br />

for the use of the programs or this document except as expressly set forth in the<br />

applicable Micromuse agreement(s) and subject to terms and conditions set forth<br />

therein. Micromuse does not warrant that the functions contained in the programs<br />

will meet your requirements, or that the operation of the programs will be<br />

uninterrupted or error-free. Micromuse shall not be liable for any indirect,<br />

consequential or incidental damages arising out of the use or the ability to use the<br />

programs or this document.<br />

Micromuse specifically disclaims any express or implied warranty of fitness for high<br />

risk activities.<br />

Micromuse programs and this document are not certified for fault tolerance, and<br />

are not designed, manufactured or intended for use or resale as on-line control<br />

equipment in hazardous environments requiring fail-safe performance, such as in<br />

the operation of nuclear facilities, aircraft navigation or communication systems,<br />

air traffic control, direct life support machines, or weapons systems (“High Risk<br />

Activities”) in which the failure of programs could lead directly to death, personal<br />

injury, or severe physical or environmental damage.<br />

Compliance with Applicable Laws; Export Control Laws<br />

Use of Micromuse programs and documents is governed by all applicable federal,<br />

state and local laws. All information therein is subject to U.S. export control laws<br />

and may also be subject to the laws of the country where you reside.<br />

All Micromuse programs and documents are commercial in nature. Use,<br />

duplication or disclosure by the United States Government is subject to the<br />

restrictions set forth in DFARS 252.227-7015 and FAR 52.227-19.<br />

Trademarks and Acknowledgements<br />

Micromuse and <strong>Netcool</strong> are registered trademarks of Micromuse.<br />

Other Micromuse trademarks include but are not limited to: <strong>Netcool</strong>/OMNIbus,<br />

<strong>Netcool</strong>/OMNIbus for Voice Networks, <strong>Netcool</strong>/Reporter, <strong>Netcool</strong>/Internet<br />

Service Monitors, <strong>Netcool</strong>/ISM, <strong>Netcool</strong>/ISM Global Perspective, <strong>Netcool</strong>/NT<br />

Service Monitors, <strong>Netcool</strong>/Wireless Service Monitors, <strong>Netcool</strong>/WSM,<br />

<strong>Netcool</strong>/Usage Service Monitors, <strong>Netcool</strong>/USM, <strong>Netcool</strong>/Telco Service<br />

Monitors, <strong>Netcool</strong>/TSM, <strong>Netcool</strong>/Fusion, <strong>Netcool</strong>/Data Center Monitors,<br />

<strong>Netcool</strong> DCM, <strong>Netcool</strong>/Impact, <strong>Netcool</strong>/Visionary, <strong>Netcool</strong>/<strong>Precision</strong>, <strong>Netcool</strong><br />

Probes & Monitors, <strong>Netcool</strong> Desktops, <strong>Netcool</strong> Gateways, <strong>Netcool</strong> Impact/Data<br />

Source Adaptors, <strong>Netcool</strong> EventList, <strong>Netcool</strong> Map, <strong>Netcool</strong> Virtual Operator,<br />

<strong>Netcool</strong>/<strong>Precision</strong> for <strong>IP</strong> Networks, <strong>Netcool</strong>/<strong>Precision</strong> for Transmission<br />

Networks, <strong>Netcool</strong>/Firewall, <strong>Netcool</strong>/Wave, <strong>Netcool</strong>/Webtop, <strong>Netcool</strong> TopoViz,<br />

<strong>Netcool</strong>/SM Operations, <strong>Netcool</strong>/SM <strong>Configuration</strong>, <strong>Netcool</strong>/OpCenter,<br />

<strong>Netcool</strong>/System Service Monitors, <strong>Netcool</strong>/SSM, <strong>Netcool</strong>/Application Service<br />

Monitors, <strong>Netcool</strong>/ASM, <strong>Netcool</strong>/ISM WAM, <strong>Netcool</strong>/SM Reporter, <strong>Netcool</strong><br />

for Asset Management, <strong>Netcool</strong>/Realtime Active Dashboards,<br />

<strong>Netcool</strong>/Dashboards, <strong>Netcool</strong>/RAD, <strong>Netcool</strong> for Voice over <strong>IP</strong>, <strong>Netcool</strong> for<br />

Security Management, <strong>Netcool</strong> Security Manager, <strong>Netcool</strong>/Portal 2.0 Premium<br />

Edition, <strong>Netcool</strong> ObjectServer, <strong>Netcool</strong>/RAD, <strong>Netcool</strong> GUI Foundation,<br />

<strong>Netcool</strong> Installer, <strong>Netcool</strong> Licensing, <strong>Netcool</strong>/Software Developers Kit, NGF,<br />

Micromuse Alliance Program, Micromuse Channel Partner, Authorized <strong>Netcool</strong><br />

Reseller, <strong>Netcool</strong> Ready, <strong>Netcool</strong> Solutions, <strong>Netcool</strong> Certified, <strong>Netcool</strong> Certified<br />

Consultant, <strong>Netcool</strong> Certified Trainer, <strong>Netcool</strong> CCAI Methodology, Micromuse<br />

University, Microcorrelation, Acronym, Micromuse Design, Integration Module<br />

for <strong>Netcool</strong>, The <strong>Netcool</strong> Company, VISIONETCOOL, Network Slice.<br />

Micromuse acknowledges the use of I/O Concepts Inc. X-Direct 3270 terminal<br />

emulators and hardware components and documentation in <strong>Netcool</strong>/Fusion.<br />

X-Direct ©1989-1999 I/O Concepts Inc. X-Direct and Win-Direct are<br />

trademarks of I/O Concepts Inc.<br />

<strong>Netcool</strong>/Fusion contains IBM Runtime Environment for AIX®, Java<br />

Technology Edition Runtime Modules © Copyright IBM Corporation 1999. All<br />

rights reserved.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> includes software developed by the University of California,<br />

Berkeley and its contributors.<br />

Micromuse acknowledges the use of MySQL in <strong>Netcool</strong>/<strong>Precision</strong> for <strong>IP</strong><br />

Networks. Copyright © 1995, 1996 TcX AB & Monty Program KB & Detron<br />

HB Stockholm SWEDEN, Helsingfors FINLAND and Uppsala SWEDEN. All<br />

rights reserved.<br />

Micromuse acknowledges the use of the UCD SNMP Library in <strong>Netcool</strong>/ISM and<br />

the <strong>Netcool</strong>/OMNIbus SNMP Writer Gateway. Copyright © 1989, 1991, 1992<br />

by Carnegie Mellon University. Derivative Work - Copyright © 1996, 1998,<br />

1999, 2000 The Regents of the University of California. All rights reserved.<br />

Permission to use, copy, modify and distribute this software and its documentation<br />

for any purpose and without fee is hereby granted, provided that the above<br />

copyright notice appears in all copies and that both that copyright notice and this<br />

permission notice appear in supporting documentation, and that the name of<br />

CMU and The Regents of the University of California not be used in advertising<br />

or publicity pertaining to distribution of the software without specific written<br />

permission.<br />

CMU AND THE REGENTS OF THE UNIVERSITY OF CALIFORNIA<br />

DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,<br />

INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY<br />

AND FITNESS. IN NO EVENT SHALL CMU OR THE REGENTS OF THE<br />

UNIVERSITY OF CALIFORNIA BE LIABLE FOR ANY SPECIAL,<br />

INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES<br />

WHATSOEVER RESULTING FROM THE LOSS OF USE, DATA OR<br />

PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE<br />

OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN<br />

CONNECTION WITH THE USE OR PERFORMANCE OF THIS<br />

SOFTWARE.<br />

Portions of the <strong>Netcool</strong>/OMNIbus code are copyright (C) 1989-95 GROUPE<br />

BULL.<br />

Permission is hereby granted, free of charge, to any person obtaining a copy of this<br />

software and associated documentation files (the “Software”), to deal in the<br />

Software without restriction, including without limitation the rights to use, copy,<br />

modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,<br />

and to permit persons to whom the Software is furnished to do so, subject to the<br />

following conditions:<br />

The above copyright notice and this permission notice shall be included in all<br />

copies or substantial portions of the Software.<br />

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF<br />

ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED<br />

TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A<br />

PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT<br />

SHALL GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR<br />

OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT<br />

OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION<br />

WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE<br />

SOFTWARE.<br />

Portions of the <strong>Netcool</strong>/ISM code are copyright ©2001, Cambridge Broadband<br />

Ltd. All rights reserved.<br />

Portions of the <strong>Netcool</strong>/ISM code are copyright © 2001, Networks Associates<br />

Technology, Inc. All rights reserved.<br />

Micromuse acknowledges the use of Viador Inc. software and documentation for<br />

<strong>Netcool</strong>/Reporter. Viador © 1997-1999 is a trademark of Viador Inc.


Micromuse acknowledges the use of software developed by the Apache Group for<br />

use in the Apache HTTP server project. Copyright © 1995-1999 The Apache<br />

Group. Apache Server is a trademark of the Apache Software Foundation<br />

(http://www.apache.org/). All rights reserved.<br />

Micromuse acknowledges the use of software developed by Edge Technologies,<br />

Inc. 2003 Edge Technologies, Inc. and Edge enPortal are trademarks or registered<br />

trademarks of Edge Technologies Inc. All rights reserved.<br />

Micromuse acknowledges the use of Merant drivers. Copyright © MERANT<br />

Solutions Inc., 1991-1998.<br />

The following product names are trademarks of Tivoli Systems or IBM<br />

Corporation: AIX, IBM, OS/2, RISC System/6000, Tivoli Management<br />

Environment, and TME10.<br />

IBM, NetView/6000, Domino, Lotus, Lotus Notes, and WebSphere are either<br />

trademarks or registered trademarks of IBM Corporation. VTAM is a trademark<br />

of IBM Corporation.<br />

Omegamon is a trademark of Candle Corporation.<br />

Netspy is a trademark of Computer Associates International Inc.<br />

The Sun logo, Sun Microsystems, SunOS, Solaris, SunNet Manager, Java are<br />

trademarks of Sun Microsystems Inc.<br />

SPARC is a registered trademark of SPARC International Inc. Programs bearing<br />

the SPARC trademark are based on an architecture developed by Sun<br />

Microsystems Inc. SPARCstation is a trademark of SPARC International Inc.,<br />

licensed exclusively to Sun Microsystems Inc.<br />

UNIX is a registered trademark of the X/Open Company Ltd.<br />

Sybase is a registered trademark of Sybase Inc. Adaptive Server is a trademark of<br />

Sybase Inc.<br />

Action Request System and Remedy are registered trademarks of Remedy<br />

Corporation.<br />

Peregrine System and ServiceCenter are registered trademarks of Peregrine Systems<br />

Inc.<br />

HP, HP-UX and OpenView are trademarks of Hewlett-Packard Company.<br />

InstallShield is a registered trademark of InstallShield Software Corporation.<br />

Microsoft, Windows 95/98/Me/NT/2000/XP are either registered trademarks or<br />

trademarks of Microsoft Corporation.<br />

Microsoft Internet Information Server/Services (IIS), Microsoft Exchange Server,<br />

Microsoft SQL Server, Microsoft perfmon, Windows Media, and Microsoft<br />

Cluster Service are either registered trademarks or trademarks of Microsoft<br />

Corporation in the United States and/or other countries.<br />

BEA and WebLogic are registered trademarks of BEA Systems Inc.<br />

FireWall-1 is a registered trademark of Check Point Software Technologies Ltd.<br />

Netscape and Netscape Navigator are registered trademarks of Netscape<br />

Communications Corporation in the United States and other countries.<br />

Netscape's logos and Netscape product and service names are also trademarks of<br />

Netscape Communications Corporation, which may be registered in other<br />

countries.<br />

Micromuse acknowledges the use of Xpm tool kit components.<br />

SentinelLM is a trademark of Rainbow Technologies Inc.<br />

GLOBEtrotter and FLEXlm are registered trademarks of Globetrotter Software<br />

Inc.<br />

Red Hat, the Red Hat “Shadow Man” logo, RPM, Maximum RPM, the RPM<br />

logo, Linux Library, PowerTools, Linux Undercover, RHmember, RHmember<br />

More, Rough Cuts, Rawhide and all Red Hat-based trademarks and logos are<br />

trademarks or registered trademarks of Red Hat Inc. in the United States and other<br />

countries.<br />

Linux is a registered trademark of Linus Torvalds.<br />

SUSE is a trademark of SUSE LINUX Products GmbH, a Novell business.<br />

Macromedia and Flash are trademarks or registered trademarks of Macromedia,<br />

Inc. in the United States and/or other countries.<br />

Nokia is a registered trademark of Nokia Corporation.<br />

WAP Forum and all trademarks, service marks and logos based on these<br />

designations (Trademarks) are marks of Wireless Application Protocol Forum Ltd.<br />

Micromuse acknowledges the use of InstallAnywhere software in <strong>Netcool</strong>/WAP<br />

Service Monitors. Copyright © Zero G Software Inc.<br />

Orbix is a registered trademark of IONA Technologies PLC. Orbix 2000 is a<br />

trademark of IONA Technologies PLC.<br />

NetCharts is a registered trademark of Visual Mining, Inc. and/or its affiliates.<br />

Micromuse acknowledges the use of Graph Layout Toolkit in <strong>Netcool</strong>/ <strong>Precision</strong><br />

for <strong>IP</strong> Networks. Copyright © 1992 - 2001, Tom Sawyer Software, Berkeley,<br />

California. All rights reserved.<br />

Portions of <strong>Netcool</strong>/<strong>Precision</strong> for <strong>IP</strong> Networks and <strong>Netcool</strong>/SM Reporter are ©<br />

TIBCO Software, Inc. 1994-2006. All rights reserved. TIB and TIB/Rendezvous<br />

are trademarks of TIBCO Software, Inc.<br />

Portions of <strong>Netcool</strong>/<strong>Precision</strong> for <strong>IP</strong> Networks & <strong>Netcool</strong>/OMNIbus probes and<br />

monitors are copyright © 1996-2005, Daniel Stenberg, . All<br />

rights reserved. Permission to use, copy, modify, and distribute this software for<br />

any purpose with or without fee is hereby granted, provided that the above<br />

copyright notice and this permission notice appear in all copies.<br />

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF<br />

ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED<br />

TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A<br />

PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY<br />

RIGHTS. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT<br />

HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER<br />

LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR<br />

OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH<br />

THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE<br />

SOFTWARE.<br />

Except as contained in this notice, the name of a copyright holder shall not be used<br />

in advertising or otherwise to promote the sale, use or other dealings in this<br />

Software without prior written authorization of the copyright holder.<br />

Portions of <strong>Netcool</strong>/SM Reporter are copyrighted by DataDirect Technologies<br />

Corp., 1991-2005.<br />

Portions of <strong>Netcool</strong>/SM Reporter are copyright (c) 1990-1999 Sleepycat Software.<br />

All rights reserved.<br />

Redistribution and use in source and binary forms, with or without modification,<br />

are permitted provided that the following conditions are met:<br />

1. Redistributions of source code must retain the above copyright notice, this list<br />

of conditions and the following disclaimer.<br />

2. Redistributions in binary form must reproduce the above copyright notice, this<br />

list of conditions and the following disclaimer in the documentation and/or other<br />

materials provided with the distribution.<br />

3. Redistributions in any form must be accompanied by information on how to<br />

obtain complete source code for the DB software and any accompanying software<br />

that uses the DB software. The source code must either be included in the<br />

distribution or be available for no more than the cost of distribution plus a nominal<br />

fee, and must be freely redistributable under reasonable conditions. For an<br />

executable file, complete source code means the source code for all modules it<br />

contains. It does not include source code for modules or files that typically<br />

accompany the major components of the operating system on which the executable<br />

file runs.<br />

THIS SOFTWARE IS PROVIDED BY SLEEPYCAT SOFTWARE ``AS IS''<br />

AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT<br />

NOT LIMITED TO, THE IMPLIED WARRANTIES OF<br />

MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR<br />

NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL<br />

SLEEPYCAT SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,<br />

INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL<br />

DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT<br />

OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR


PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND<br />

ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT<br />

LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)<br />

ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN<br />

IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<br />

Sleepycat software is available from<br />

http://downloads.sleepycat.com/db-3.0.55.zip.<br />

Portions of <strong>Netcool</strong>/SM Reporter are copyright (c) 1990, 1993, 1994, 1995. The<br />

Regents of the University of California. All rights reserved.<br />

Redistribution and use in source and binary forms, with or without modification,<br />

are permitted provided that the following conditions are met:<br />

1. Redistributions of source code must retain the above copyright notice, this list<br />

of conditions and the following disclaimer.<br />

2. Redistributions in binary form must reproduce the above copyright notice, this<br />

list of conditions and the following disclaimer in the documentation and/or other<br />

materials provided with the distribution.<br />

3. Neither the name of the University nor the names of its contributors may be<br />

used to endorse or promote products derived from this software without specific<br />

prior written permission.<br />

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND<br />

CONTRIBUTORS ``AS IS'' AND* ANY EXPRESS OR IMPLIED<br />

WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED<br />

WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A<br />

PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE<br />

REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,<br />

INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR<br />

CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,<br />

PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF<br />

USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER<br />

CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN<br />

CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING<br />

NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE<br />

USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF<br />

SUCH DAMAGE.<br />

Portions of <strong>Netcool</strong>/SM Reporter are copyright (c) 1995, 1996. The President and<br />

Fellows of Harvard University. All rights reserved.<br />

Redistribution and use in source and binary forms, with or without modification,<br />

are permitted provided that the following conditions are met:<br />

1. Redistributions of source code must retain the above copyright notice, this list<br />

of conditions and the following disclaimer.<br />

2. Redistributions in binary form must reproduce the above copyright notice, this<br />

list of conditions and the following disclaimer in the documentation and/or other<br />

materials provided with the distribution.<br />

3. Neither the name of the University nor the names of its contributors may be<br />

used to endorse or promote products derived from this software without specific<br />

prior written permission.<br />

THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS<br />

CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED<br />

WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED<br />

WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A<br />

PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL<br />

HARVARD OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,<br />

INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR<br />

CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,<br />

PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF<br />

USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER<br />

CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN<br />

CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING<br />

NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE<br />

USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF<br />

SUCH DAMAGE.<br />

<strong>Netcool</strong>/SM Reporter includes the Jetty Package which is copyright (c) 1998 Mort<br />

Bay Consulting Pty. Ltd. (Australia) and others. Individual files in this package<br />

may contain additional copyright notices. The javax.servlet packages are copyright<br />

Sun Microsystems Inc.<br />

1. The Standard Version of the Jetty package is available from<br />

http://www.mortbay.com.<br />

2. You may make and distribute verbatim copies of the source form of the Standard<br />

Version of this Package without restriction, provided that you include this license<br />

and all of the original copyright notices and associated disclaimers.<br />

3. You may make and distribute verbatim copies of the compiled form of the<br />

Standard Version of this Package without restriction, provided that you include<br />

this license.<br />

4. You may apply bug fixes, portability fixes and other modifications derived from<br />

the Public Domain or from the Copyright Holder. A Package modified in such a<br />

way shall still be considered the Standard Version.<br />

5. You may otherwise modify your copy of this Package in any way, provided that<br />

you insert a prominent notice in each changed file stating how and when you<br />

changed that file, and provided that you do at least ONE of the following:<br />

a) Place your modifications in the Public Domain or otherwise make them Freely<br />

Available, such as by posting said modifications to Usenet or an equivalent<br />

medium, or placing the modifications on a major archive site such as ftp.uu.net, or<br />

by allowing the Copyright Holder to include your modifications in the Standard<br />

Version of the Package.<br />

b) Use the modified Package only within your corporation or organization.<br />

c) Rename any non-standard classes so the names do not conflict with standard<br />

classes, which must also be provided, and provide a separate manual page for each<br />

non-standard class that clearly documents how it differs from the Standard<br />

Version.<br />

d) Make other arrangements with the Copyright Holder.<br />

6. You may distribute modifications or subsets of this Package in source code or<br />

compiled form, provided that you do at least ONE of the following:<br />

a) Distribute this license and all original copyright messages, together with<br />

instructions (in the manual page or equivalent) on where to get the complete<br />

Standard Version.<br />

b) Accompany the distribution with the machine-readable source of the Package<br />

with your modifications. The modified package must include this license and all<br />

of the original copyright notices and associated disclaimers, together with<br />

instructions on where to get the complete Standard Version.<br />

c) Make other arrangements with the Copyright Holder.<br />

7. You may charge a reasonable copying fee for any distribution of this Package.<br />

You may charge any fee you choose for support of this Package. You may not<br />

charge a fee for this Package itself. However, you may distribute this Package in<br />

aggregate with other (possibly commercial) programs as part of a larger (possibly<br />

commercial) software distribution provided that you meet the other distribution<br />

requirements of this license.<br />

8. Input to or the output produced from the programs of this Package do not<br />

automatically fall under the copyright of this Package, but belong to whomever<br />

generated them, and may be sold commercially, and may be aggregated with this<br />

Package.<br />

9. Any program subroutines supplied by you and linked into this Package shall not<br />

be considered part of this Package.<br />

10. The name of the Copyright Holder may not be used to endorse or promote<br />

products derived from this software without specific prior written permission.<br />

11. This license may change with each release of a Standard Version of the Package.<br />

You may choose to use the license associated with version you are using or the<br />

license of the latest Standard Version.<br />

12. THIS PACKAGE IS PROVIDED “AS IS” AND WITHOUT ANY<br />

EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT<br />

LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY<br />

AND FITNESS FOR A PARTICULAR PURPOSE.<br />

<strong>Netcool</strong>/SM Reporter includes FreeMarker, a tool that allows Java programs to use


templates to generate HTML or other text output that contains dynamic content.<br />

Copyright (C) 1998, 2002 Benjamin Geer. E-mail: beroul@users.sourceforge.net<br />

Redistribution and use in source and binary forms, with or without modification,<br />

are permitted provided that the following conditions are met:<br />

Redistributions of source code must retain the above copyright notice, this list of<br />

conditions and the following disclaimer.<br />

Redistributions in binary form must reproduce the above copyright notice, this list<br />

of conditions and the following disclaimer in the documentation and/or other<br />

materials provided with the distribution.<br />

Neither the name “Freemarker” nor any of the names of the project contributors<br />

may be used to endorse or promote products derived from this software without<br />

specific prior written permission.<br />

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND<br />

CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED<br />

WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED<br />

WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A<br />

PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE<br />

COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY<br />

DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR<br />

CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,<br />

PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF<br />

USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER<br />

CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN<br />

CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING<br />

NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE<br />

USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF<br />

SUCH DAMAGE.<br />

Copyright 2006 Micromuse. Portions of <strong>Netcool</strong>/WSM are licensed under the<br />

Apache License, Version 2.0 (the “License”); you may not use this file except in<br />

compliance with the License. You may obtain a copy of the License at<br />

http://www.apache.org/licenses/LICENSE-2.0. Unless required by applicable law<br />

or agreed to in writing, software distributed under the License is distributed on an<br />

“AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<br />

KIND, either express or implied. See the License for the specific language<br />

governing permissions and limitations under the License.<br />

Micromuse acknowledges the use of Digital X11 in <strong>Netcool</strong>/<strong>Precision</strong> for <strong>IP</strong><br />

Networks. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard,<br />

Massachusetts, All Rights Reserved. DIGITAL DISCLAIMS ALL<br />

WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL<br />

IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN<br />

NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT<br />

OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER<br />

RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN<br />

AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS<br />

ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR<br />

PERFORMANCE OF THIS SOFTWARE.<br />

Micromuse acknowledges the use of functionality within the <strong>Netcool</strong>/OMNIbus<br />

Probe for Ping that was developed by Stanford University.<br />

<strong>Netcool</strong>/SM Operations, <strong>Netcool</strong>/SM <strong>Configuration</strong>, and <strong>Netcool</strong>/OMNIbus<br />

probes and monitors include software developed by the OpenSSL Project for use<br />

in the OpenSSL Toolkit (http://www.openssl.org/. Copyright (c) 1998-2005 The<br />

OpenSSL Project. All rights reserved. Redistribution and use in source and binary<br />

forms, with or without modification, are permitted provided that the following<br />

conditions are met:<br />

1. Redistributions of source code must retain the above copyright notice, this list<br />

of conditions and the following disclaimer.<br />

2. Redistributions in binary form must reproduce the above copyright notice, this<br />

list of conditions and the following disclaimer in the documentation and/or other<br />

materials provided with the distribution.<br />

3. All advertising materials mentioning features or use of this software must display<br />

the following acknowledgment: “This product includes software developed by the<br />

OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/)”<br />

4. The names “OpenSSL Toolkit” and “OpenSSL Project” must not be used to<br />

endorse or promote products derived from this software without prior written<br />

permission. For written permission, please contact openssl-core@openssl.org.<br />

5. Products derived from this software may not be called “OpenSSL” nor may<br />

“OpenSSL” appear in their names without prior written permission of the<br />

OpenSSL Project.<br />

6. Redistributions of any form whatsoever must retain the following<br />

acknowledgment: “This product includes software developed by the OpenSSL<br />

Project for use in the OpenSSL Toolkit (http://www.openssl.org/)”<br />

THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT “AS IS”<br />

AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT<br />

NOT LIMITED TO, THE IMPLIED WARRANTIES OF<br />

MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE<br />

ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR<br />

ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,<br />

INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL<br />

DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT<br />

OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR<br />

PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND<br />

ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT<br />

LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)<br />

ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN<br />

IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<br />

This product includes cryptographic software written by Eric Young<br />

(eay@cryptsoft.com). This product includes software written by Tim Hudson<br />

(tjh@cryptsoft.com).<br />

Original SSLeay License Copyright (C) 1995-1998 Eric Young<br />

(eay@cryptsoft.com). All rights reserved.<br />

This package is an SSL implementation written by Eric Young<br />

(eay@cryptsoft.com). The implementation was written so as to conform with<br />

Netscapes SSL. This library is free for commercial and non-commercial use as long<br />

as the following conditions are adhered to. The following conditions apply to all<br />

code found in this distribution, be it the RC4, RSA, lhash, DES, etc., code; not<br />

just the SSL code. The SSL documentation included with this distribution is<br />

covered by the same copyright terms except that the holder is Tim Hudson<br />

(tjh@cryptsoft.com). Copyright remains Eric Young's, and as such any Copyright<br />

notices in the code are not to be removed. If this package is used in a product, Eric<br />

Young should be given attribution as the author of the parts of the library used.<br />

This can be in the form of a textual message at program startup or in<br />

documentation (online or textual) provided with the package. Redistribution and<br />

use in source and binary forms, with or without modification, are permitted<br />

provided that the following conditions are met:<br />

1. Redistributions of source code must retain the copyright notice, this list of<br />

conditions and the following disclaimer.<br />

2. Redistributions in binary form must reproduce the above copyright notice, this<br />

list of conditions and the following disclaimer in the documentation and/or other<br />

materials provided with the distribution.<br />

3. All advertising materials mentioning features or use of this software must display<br />

the following acknowledgement: “This product includes cryptographic software<br />

written by Eric Young (eay@cryptsoft.com)”.<br />

4. If you include any Windows specific code (or a derivative thereof) from the apps<br />

directory (application code) you must include an acknowledgement: “This<br />

product includes software written by Tim Hudson (tjh@cryptsoft.com)”<br />

THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY<br />

EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT<br />

LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY<br />

AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN<br />

NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE<br />

FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,<br />

OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED<br />

TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS<br />

OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)


HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,<br />

WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT<br />

(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY<br />

OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE<br />

POSSIBILITY OF SUCH DAMAGE.<br />

The licence and distribution terms for any publicly available version or derivative<br />

of this code cannot be changed, i.e. this code cannot simply be copied and put<br />

under another distribution licence [including the GNU Public Licence.]<br />

Micromuse acknowledges the use of software developed by ObjectPlanet. ©2003<br />

ObjectPlanet, Inc., Ovre Slottsgate, 0157 Oslo, Norway.<br />

Micromuse acknowledges the use of Expat in <strong>Netcool</strong>/ASM. Copyright 1998,<br />

1999, 2000 Thai Open Source Software Center Ltd. and Clark Cooper. Copyright<br />

2001, 2002 Expat maintainers. THE EXPAT SOFTWARE IS PROVIDED<br />

HEREUNDER “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS<br />

OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES<br />

OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND<br />

NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR<br />

COPYRIGHT HOLDERS OF THE EXPAT SOFTWARE BE LIABLE FOR<br />

ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN<br />

ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,<br />

OUT OF OR IN CONNECTION WITH THE EXPAT SOFTWARE OR<br />

THE USE OR OTHER DEALINGS IN THE SOFTWARE. Expat explicitly<br />

grants its permission to any person obtaining a copy of any Expat software and<br />

associated documentation files (the “Expat Software”) to deal in the Expat<br />

Software without restriction, including without limitation the rights to use, copy,<br />

modify, merge, publish, distribute, sublicense, and/or sell copies of the Expat<br />

Software. Expat's permission is subject to the following conditions: The above<br />

copyright notice and this permission notice shall be included in all copies or<br />

substantial portions of the Expat Software. Except as set forth hereunder, all<br />

software provided by Micromuse hereunder is subject to the applicable license<br />

agreement.<br />

Micromuse acknowledges that <strong>Netcool</strong> Security Manager includes Hypersonic<br />

SQL. Copyright (c) 2001-2002, The HSQL Development Group. All rights<br />

reserved.<br />

JABBER® is a registered trademark and its use is granted under a sublicense from<br />

the Jabber Software Foundation.<br />

Micromuse acknowledges the use of MySQL in <strong>Netcool</strong>/<strong>Precision</strong> for <strong>IP</strong><br />

Networks and in <strong>Netcool</strong>/<strong>Precision</strong> for Transmission Networks. Copyright ©<br />

1995, 1996 TcX AB & Monty Program KB & Detron.<br />

Micromuse acknowledges the use of Cryptix in <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>. Copyright<br />

(c) 1995-2004 The Cryptix Foundation Limited. All rights reserved.<br />

Redistribution and use in source and binary forms, with or without modification,<br />

are permitted provided that the following conditions are met:<br />

1. Redistributions of source code must retain the copyright notice, this list of<br />

conditions and the following disclaimer.<br />

2. Redistributions in binary form must reproduce the above copyright notice, this<br />

list of conditions and the following disclaimer in the documentation and/or other<br />

materials provided with the distribution.<br />

THIS SOFTWARE IS PROVIDED BY THE CRYPTIX FOUNDATION<br />

LIMITED AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR<br />

IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE<br />

IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A<br />

PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE<br />

CRYPTIX FOUNDATION LIMITED OR CONTRIBUTORS BE LIABLE<br />

FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,<br />

OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED<br />

TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS<br />

OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)<br />

HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,<br />

WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT<br />

(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY<br />

OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE<br />

POSSIBILITY OF SUCH DAMAGE.<br />

Micromuse acknowledges the use of PCRE in <strong>Netcool</strong>/<strong>Precision</strong>. Copyright<br />

©1997-2005 University of Cambridge. All rights reserved. Redistribution and use<br />

in source and binary forms, with or without modification, are permitted provided<br />

that the following conditions are met:<br />

1. Redistributions of source code must retain the above copyright notice, this list<br />

of conditions and the following disclaimer.<br />

2. Redistributions in binary form must reproduce the above copyright notice, this<br />

list of conditions and the following disclaimer in the documentation and/or other<br />

materials provided with the distribution.<br />

3. Neither the name of the University of Cambridge nor the name of Google Inc.<br />

nor the names of their contributors may be used to endorse or promote products<br />

derived from this software without specific prior written permission.<br />

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND<br />

CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED<br />

WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED<br />

WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A<br />

PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE<br />

COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY<br />

DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR<br />

CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,<br />

PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF<br />

USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER<br />

CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN<br />

CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING<br />

NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE<br />

USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE<br />

POSSIBILITY OF SUCH DAMAGE.<br />

Micromuse acknowledges the use of Net-SNMP in <strong>Netcool</strong>/ISM and<br />

<strong>Netcool</strong>/OMNIbus probes & monitors.<br />

Part 1: CMU/UCD copyright notice: (BSD like) Copyright 1989, 1991, 1992 by<br />

Carnegie Mellon University Derivative Work - 1996, 1998-2000. Copyright<br />

1996, 1998-2000 The Regents of the University of California. All Rights<br />

Reserved. Permission to use, copy, modify and distribute this software and its<br />

documentation for any purpose and without fee is hereby granted, provided that<br />

the above copyright notice appears in all copies and that both that copyright notice<br />

and this permission notice appear in supporting documentation, and that the<br />

name of CMU and The Regents of the University of California not be used in<br />

advertising or publicity pertaining to distribution of the software without specific<br />

written permission.<br />

CMU AND THE REGENTS OF THE UNIVERSITY OF CALIFORNIA<br />

DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,<br />

INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY<br />

AND FITNESS. IN NO EVENT SHALL CMU OR THE REGENTS OF THE<br />

UNIVERSITY OF CALIFORNIA BE LIABLE FOR ANY SPECIAL,<br />

INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES<br />

WHATSOEVER RESULTING FROM THE LOSS OF USE, DATA OR<br />

PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE<br />

OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN<br />

CONNECTION WITH THE USE OR PERFORMANCE OF THIS<br />

SOFTWARE.<br />

Part 2: Networks Associates Technology, Inc. copyright notice (BSD) Copyright<br />

(c) 2001-2003, Networks Associates Technology, Inc. All rights reserved.<br />

Redistribution and use in source and binary forms, with or without modification,<br />

are permitted provided that the following conditions are met:<br />

- Redistributions of source code must retain the above copyright notice, this list of<br />

conditions and the following disclaimer.<br />

- Redistributions in binary form must reproduce the above copyright notice, this<br />

list of conditions and the following disclaimer in the documentation and/or other<br />

materials provided with the distribution.<br />

- Neither the name of the Networks Associates Technology, Inc. nor the names of<br />

its contributors may be used to endorse or promote products derived from this<br />

software without specific prior written permission.


THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND<br />

CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED<br />

WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED<br />

WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A<br />

PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE<br />

COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY<br />

DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR<br />

CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,<br />

PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF<br />

USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER<br />

CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN<br />

CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING<br />

NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE<br />

USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF<br />

SUCH DAMAGE.<br />

Part 3: Cambridge Broadband Ltd. copyright notice (BSD) Portions of this code<br />

are copyright (c) 2001-2003, Cambridge Broadband Ltd. All rights reserved.<br />

Redistribution and use in source and binary forms, with or without modification,<br />

are permitted provided that the following conditions are met:<br />

- Redistributions of source code must retain the above copyright notice, this list of<br />

conditions and the following disclaimer.<br />

- Redistributions in binary form must reproduce the above copyright notice, this<br />

list of conditions and the following disclaimer in the documentation and/or other<br />

materials provided with the distribution.<br />

- The name of Cambridge Broadband Ltd. may not be used to endorse or promote<br />

products derived from this software without specific prior written permission.<br />

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS”<br />

AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT<br />

NOT LIMITED TO, THE IMPLIED WARRANTIES OF<br />

MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE<br />

ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER<br />

BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,<br />

EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT<br />

NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR<br />

SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS<br />

INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF<br />

LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT<br />

(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY<br />

OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE<br />

POSSIBILITY OF SUCH DAMAGE.<br />

Part 4: Sun Microsystems, Inc. copyright notice (BSD) Copyright © 2003 Sun<br />

Microsystems, Inc., 4150 Network Circle, Santa Clara, California 95054, USA.<br />

All rights reserved. Use is subject to license terms below. This distribution may<br />

include materials developed by third parties. Sun, Sun Microsystems, the Sun logo<br />

and Solaris are trademarks or registered trademarks of Sun Microsystems, Inc. in<br />

the U.S. and other countries. Redistribution and use in source and binary forms,<br />

with or without modification, are permitted provided that the following<br />

conditions are met:<br />

- Redistributions of source code must retain the above copyright notice, this list of<br />

conditions and the following disclaimer.<br />

- Redistributions in binary form must reproduce the above copyright notice, this<br />

list of conditions and the following disclaimer in the documentation and/or other<br />

materials provided with the distribution.<br />

- Neither the name of the Sun Microsystems, Inc. nor the names of its contributors<br />

may be used to endorse or promote products derived from this software without<br />

specific prior written permission.<br />

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND<br />

CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED<br />

WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED<br />

WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A<br />

PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE<br />

COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY<br />

DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR<br />

CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,<br />

PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF<br />

USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER<br />

CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN<br />

CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING<br />

NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE<br />

USE OF THIS SOFTWARE, EVEN IF DVISED OF THE POSSIBILITY OF<br />

SUCH DAMAGE.<br />

Part 5: Sparta, Inc. copyright notice (BSD) Copyright (c) 2003-2004, Sparta, Inc.<br />

All rights reserved. Redistribution and use in source and binary forms, with or<br />

without modification, are permitted provided that the following conditions are<br />

met:<br />

- Redistributions of source code must retain the above copyright notice, this list of<br />

conditions and the following disclaimer.<br />

- Redistributions in binary form must reproduce the above copyright notice, this<br />

list of conditions and the following disclaimer in the documentation and/or other<br />

materials provided with the distribution.<br />

- Neither the name of Sparta, Inc. nor the names of its contributors may be used<br />

to endorse or promote products derived from this software without specific prior<br />

written permission.<br />

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND<br />

CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED<br />

WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED<br />

WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A<br />

PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE<br />

COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY<br />

DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR<br />

CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,<br />

PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF<br />

USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER<br />

CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN<br />

CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING<br />

NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE<br />

USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF<br />

SUCH DAMAGE.<br />

Part 6: Cisco/BUPTNIC copyright notice (BSD) Copyright (c) 2004, Cisco, Inc.<br />

and Information Network, Center of Beijing University of Posts and<br />

Telecommunications. All rights reserved. Redistribution and use in source and<br />

binary forms, with or without modification, are permitted provided that the<br />

following conditions are met:<br />

- Redistributions of source code must retain the above copyright notice, this list of<br />

conditions and the following disclaimer.<br />

- Redistributions in binary form must reproduce the above copyright notice, this<br />

list of conditions and the following disclaimer in the documentation and/or other<br />

materials provided with the distribution.<br />

- Neither the name of Cisco, Inc., Beijing University of Posts and<br />

Telecommunications, nor the names of their contributors may be used to endorse<br />

or promote products derived from this software without specific prior written<br />

permission.<br />

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND<br />

CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED<br />

WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED<br />

WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A<br />

PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE<br />

COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY<br />

DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR<br />

CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,<br />

PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF<br />

USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER<br />

CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN<br />

CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING<br />

NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE<br />

USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF


SUCH DAMAGE.<br />

Micromuse acknowledges the use of STLport in <strong>Netcool</strong> Probes & Monitors.<br />

Copyright 1999, 2000 Boris Fomitchev This material is provided “as is”, with<br />

absolutely no warranty expressed or implied. Any use is at your own risk.<br />

Permission to use or copy this software for any purpose is hereby granted without<br />

fee, provided the above notices are retained on all copies. Permission to modify the<br />

code and to distribute modified code is granted, provided the above notices are<br />

retained, and a notice that the code was modified is included with the above<br />

copyright notice.<br />

The Licensee may distribute binaries compiled with STLport (whether original or<br />

modified) without any royalties or restrictions.<br />

The Licensee may distribute original or modified STLport sources, provided that:<br />

The conditions indicated in the above permission notice are met;<br />

The following copyright notices are retained when present, and conditions<br />

provided in accompanying permission notices are met:<br />

Copyright 1994 Hewlett-Packard Company,<br />

Copyright 1996, 97 Silicon Graphics Computer Systems, Inc.<br />

Copyright 1997 Moscow Center for SPARC Technology.<br />

Permission to use, copy, modify, distribute and sell this software and its<br />

documentation for any purpose is hereby granted without fee, provided that the<br />

above copyright notice appear in all copies and that both that copyright notice and<br />

this permission notice appear in supporting documentation. Hewlett-Packard<br />

Company makes no representations about the suitability of this software for any<br />

purpose. It is provided “as is” without express or implied warranty.<br />

Permission to use, copy, modify, distribute and sell this software and its<br />

documentation for any purpose is hereby granted without fee, provided that the<br />

above copyright notice appear in all copies and that both that copyright notice and<br />

this permission notice appear in supporting documentation. Silicon Graphics<br />

makes no representations about the suitability of this software for any purpose. It<br />

is provided “as is” without express or implied warranty.<br />

Permission to use, copy, modify, distribute and sell this software and its<br />

documentation for any purpose is hereby granted without fee, provided that the<br />

above copyright notice appear in all copies and that both that copyright notice and<br />

this permission notice appear in supporting documentation. Moscow Center for<br />

SPARC Technology makes no representations about the suitability of this software<br />

for any purpose. It is provided “as is” without express or implied warranty.<br />

All other trademarks, registered trademarks and logos are the property of their<br />

respective owners.<br />

Micromuse Inc., 650 Townsend Street, San Francisco, USA CA 94103<br />

www.micromuse.com<br />

Document Version Number: 1.0


Contents<br />

Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1<br />

Audience. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2<br />

About this <strong>Guide</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

Associated Publications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

<strong>Netcool</strong>®/OMNIbus Installation and Deployment <strong>Guide</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

<strong>Netcool</strong>®/OMNIbus User <strong>Guide</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

<strong>Netcool</strong>®/OMNIbus Administration <strong>Guide</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

<strong>Netcool</strong>®/OMNIbus Probe and Gateway <strong>Guide</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

<strong>Netcool</strong>®/<strong>Precision</strong> <strong>IP</strong> Installation and Deployment <strong>Guide</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

<strong>Netcool</strong>®/<strong>Precision</strong> <strong>IP</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

<strong>Netcool</strong>®/<strong>Precision</strong> <strong>IP</strong> Monitoring and RCA <strong>Guide</strong>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

<strong>Netcool</strong>®/<strong>Precision</strong> <strong>IP</strong> Desktop <strong>Guide</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

<strong>Netcool</strong>®/<strong>Precision</strong> <strong>IP</strong> Topology Visualization <strong>Guide</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

<strong>Netcool</strong> GUI Foundation Administration <strong>Guide</strong>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

<strong>Netcool</strong> Licensing Administration <strong>Guide</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

Online Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

Typographical Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

Note, Tip, and Warning Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

Syntax and Example Subheadings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

Contents<br />

Operating System Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> . . . . . . . . . . 11<br />

The <strong>Precision</strong> Server Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />

Communication Between Processes on Different Hosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

Communication Between DISCO and the Helper Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

The ServiceData <strong>Configuration</strong> File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

Changing the Multicast Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> i


Contents<br />

ii<br />

Configuring <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Server Domains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

Domain-Specific <strong>Configuration</strong> Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

An Overview of Using <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> on Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

Controlling <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> on Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

Additional Functionality for Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

Functionality Not Available for Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />

Introduction to DISCO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

An Overview of the <strong>Discovery</strong> Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />

Discovering Device Existence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />

Discovering Device Details (Standard). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />

Discovering Device Details (Context-Sensitive) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

Discovering Associated Device Addresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

Discovering Device Connectivity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

Creating the Topology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

Configurable <strong>Discovery</strong> Data Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />

Context-Sensitive <strong>Discovery</strong>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />

Restricting the <strong>Discovery</strong> and Defining Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />

<strong>Discovery</strong> Stages and Phases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />

Data Collection Stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />

Data Processing Stage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

Advantages of Staged <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

Criteria for Multiphasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />

Managing the Phases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

The Effect of <strong>Discovery</strong> Multiphasing on Network Traffic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

After the First <strong>Discovery</strong>: Rediscovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40<br />

Conducting a Full or Partial Rediscovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40<br />

Rediscovery Completion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43<br />

Forcing Rediscoveries of Particular Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Contents<br />

Chapter 2: Process Control with CTRL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />

Introducing CTRL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />

The CTRL Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />

Configuring CTRL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />

Setting up a Single <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Domain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />

Setting up Multiple <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Domains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />

Configuring <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Domains on Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

Component Dependencies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56<br />

Configuring Managed Processes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56<br />

Configuring Unmanaged Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57<br />

Starting CTRL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />

Prerequisites for Running CTRL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />

Querying the Databases of CTRL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />

Logging onto the Databases of CTRL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />

The services Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64<br />

Chapter 3: Creating and Managing Users. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />

Introduction to User Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />

The User <strong>Configuration</strong> Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />

User Authentication with AUTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />

Profile Creation and Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />

User Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />

Configuring User Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />

The Default Profiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72<br />

The Default User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72<br />

Starting AUTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73<br />

Prerequisites for Running AUTH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73<br />

Starting the User <strong>Configuration</strong> Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />

Using the User <strong>Configuration</strong> Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />

Creating and Editing Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />

Creating and Editing Profiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> iii


Contents<br />

iv<br />

The AUTH Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82<br />

The auth Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82<br />

Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI. . . . . . . . . 85<br />

Introducing Methods for Configuring Network <strong>Discovery</strong>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86<br />

The Network <strong>Discovery</strong> GUI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86<br />

Configuring a <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96<br />

Scoping the <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97<br />

Seeding the <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100<br />

Configuring the Dynamic Finders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106<br />

Setting SNMP and Telnet Passwords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111<br />

Enabling and Disabling <strong>Discovery</strong> Agents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118<br />

Setting <strong>Discovery</strong> Filters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120<br />

Configuring DNS Helpers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127<br />

Configuring NAT Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130<br />

Setting Advanced <strong>Discovery</strong> Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133<br />

Starting and Monitoring a <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138<br />

Running Discoveries and Rediscoveries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139<br />

Using the <strong>Discovery</strong> Wizard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143<br />

Launching the <strong>Discovery</strong> Wizard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144<br />

Scoping and Seeding the <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145<br />

Setting SNMP Passwords. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150<br />

Setting Telnet Access Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151<br />

Specifying the Type of <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152<br />

Optimizing the <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155<br />

Completing the <strong>Configuration</strong>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160<br />

Reading and Writing <strong>Configuration</strong> Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162<br />

Chapter 5: Querying <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Databases . . . . . . . . . . . . . . . . . . . . . . . . . 165<br />

Accessing the <strong>Precision</strong> Server Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Contents<br />

The OQL Workbench. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167<br />

Accessing the OQL Workbench. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167<br />

Using the OQL Workbench . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168<br />

The OQL Service Provider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169<br />

Starting the OQL Service Provider. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169<br />

Using the OQL Service Provider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170<br />

Chapter 6: Network <strong>Discovery</strong> from the Command Line . . . . . . . . . . . . . . . . . . . . . 175<br />

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176<br />

Preparing for <strong>Discovery</strong>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177<br />

Starting DISCO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178<br />

Prerequisites for Running DISCO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179<br />

Configuring the <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181<br />

<strong>Configuration</strong> Task List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181<br />

Scoping the <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183<br />

Configuring DISCO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183<br />

Configuring the Ping Finder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183<br />

Activating the <strong>Discovery</strong> Agents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184<br />

Deactivating the <strong>Discovery</strong> Agents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186<br />

The Helper Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186<br />

Managing the Helpers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187<br />

Configuring the Device SNMP Access Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187<br />

Editing Stitcher and Agent Definition Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189<br />

Running the <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> v


Contents<br />

vi<br />

Tracking the Progress of the <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191<br />

Simple Queries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191<br />

Complex Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191<br />

Other Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192<br />

Identifying the Status of the Ping Finder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192<br />

Interrogating the Databases of DISCO: Simple Database Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192<br />

Complex Database Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199<br />

Identifying the Number of Discovered Devices of a Given Device Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204<br />

Determining Whether the <strong>Discovery</strong> Has Completed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205<br />

Chapter 7: Scoping a <strong>Discovery</strong>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207<br />

Introduction to Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208<br />

Reasons for Scoping the <strong>Discovery</strong>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208<br />

Types of Scoping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208<br />

Defining <strong>Discovery</strong> Zones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209<br />

Defining a Single Inclusion Zone. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209<br />

Defining Multiple Inclusion Zones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210<br />

Defining Exclusion Zones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211<br />

Restricting Detection of Specific Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212<br />

Restricting Interrogation of Specific Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212<br />

Restricting Instantiation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214<br />

Devices with Out Of Scope Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218<br />

Chapter 8: Using Finders to Seed a <strong>Discovery</strong>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219<br />

Introduction to the Finders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220<br />

Multiple Instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220<br />

Configuring the Ping Finder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221<br />

General <strong>Configuration</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221<br />

Seeding the Ping Finder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222<br />

Scoping the Ping Finder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224<br />

The Status Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Contents<br />

Configuring the File Finder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228<br />

The configuration Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228<br />

The parseRules Table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228<br />

Example <strong>Configuration</strong>s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229<br />

Files to Parse and Rules for Parsing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229<br />

General Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231<br />

Verifying the Existence of a Device Reported by the File Finder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232<br />

Configuring the Sniffer Finder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234<br />

The <strong>Configuration</strong> Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234<br />

Example <strong>Configuration</strong>s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234<br />

Configuring the Trap Finder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236<br />

The configuration Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236<br />

Example <strong>Configuration</strong>s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237<br />

Chapter 9: <strong>Discovery</strong> Agents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239<br />

Introducing the Agents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240<br />

The Details Agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240<br />

The Associated Address (AssocAddress) Agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240<br />

<strong>Discovery</strong> Agent Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241<br />

Types of Agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242<br />

Discovering Connectivity between Ethernet Switches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243<br />

Connectivity at the Layer 3 Network Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249<br />

Discovering Connectivity between ATM Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252<br />

Discovering MPLS Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254<br />

Discovering NAT Gateways. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256<br />

Discovering Containment Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258<br />

<strong>Discovery</strong> Agents on Other Protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259<br />

Context Agents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261<br />

Task-specific <strong>Discovery</strong> Agents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261<br />

Enabling and Disabling the Agents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265<br />

Enabling and Disabling the <strong>Discovery</strong> Agents Prior to a <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> vii


Contents<br />

viii<br />

Selecting Agents To Run. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267<br />

Which <strong>IP</strong> layer Agents to Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267<br />

Which Standard Agents To Use. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267<br />

Which Specialized Agents To Run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268<br />

Suggested List of Agents for a Layer 3 <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269<br />

Suggested List of Agents for a Layer 2 <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269<br />

Discovering Device Protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271<br />

Configuring Extreme Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271<br />

Filtering Devices Sent to the Agents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272<br />

Introduction to the <strong>Discovery</strong> Agent Filter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272<br />

Internal Filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274<br />

Partial Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276<br />

Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276<br />

Retrieving Extra Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278<br />

Changing the Agent Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278<br />

The Mediation and Processing Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278<br />

The Mediation Layer Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279<br />

The Mediation Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279<br />

The Processing Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281<br />

Special Case: Adding Information to the master.entityByNeighbor Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283<br />

Discovering SPVCs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284<br />

SPVC Script Process Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284<br />

Chapter 10: The <strong>Discovery</strong> Helper System. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285<br />

Introduction to the Helper System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286<br />

The Helpers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286<br />

Helper System Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287<br />

Dynamic Timeouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287<br />

Starting the Helper Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288<br />

Starting the Helpers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Contents<br />

Configuring the Helpers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289<br />

Configuring the ARP Helper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289<br />

Configuring the DNS Helper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290<br />

Configuring the PING Helper. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291<br />

Configuring the SNMP Helper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292<br />

Configuring the Telnet Helper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293<br />

SNMP and Telnet Device Access <strong>Configuration</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298<br />

Configuring SNMP Device Access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298<br />

Configuring Telnet Device Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303<br />

The Helper Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307<br />

The ARP Helper database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307<br />

The DNS Helper Database Schema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309<br />

The Ping Helper Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312<br />

The SNMP Helper Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314<br />

The Telnet Helper Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316<br />

Connecting to Helpers on Different Subnets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319<br />

Communication Between DISCO and the Helper Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321<br />

The ServiceData <strong>Configuration</strong> File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321<br />

Changing the Multicast Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323<br />

Chapter 11: Configuring an MPLS <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325<br />

About MPLS <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326<br />

Layer 3 MPLS VPNs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326<br />

Enhanced Layer 2 MPLS VPNs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328<br />

Configuring MPLS Agents and SNMP and Telnet Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329<br />

Enabling MPLS Agents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329<br />

Configuring MPLS <strong>Discovery</strong> Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330<br />

Configuring Telnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331<br />

Configuring SNMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> ix


Contents<br />

x<br />

Advanced MPLS <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333<br />

Defining the Scope of an MPLS/VPN <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333<br />

Specifying a VPN Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335<br />

Fine Tuning Label Data <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336<br />

Visualizing MPLS Topology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337<br />

Chapter 12: Managing NAT Environments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341<br />

Network Address Translation (NAT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342<br />

Overview of NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342<br />

The <strong>Precision</strong> Server and NAT Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343<br />

Differences in a NAT <strong>Discovery</strong> Process Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344<br />

Configuring a NAT <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346<br />

Enabling NAT Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346<br />

Defining Address Spaces for Each Domain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346<br />

Configuring Trap Handling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347<br />

Running the Appropriate Agent. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348<br />

Adapting the Containment Model for Use with NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352<br />

Viewing NAT Environments Using Topoviz Network Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353<br />

Chapter 13: Accessing Topology Data in MODEL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355<br />

About MODEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356<br />

Starting MODEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357<br />

Prerequisites for Running MODEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358<br />

About the Containment Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359<br />

Applying the Containment Principle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359<br />

Generating the Containment Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362<br />

Altering the Containment Model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Contents<br />

Accessing the Discovered Topology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363<br />

Prerequisites for Accessing the Network Topology Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363<br />

Querying the MODEL Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363<br />

The Master Topology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363<br />

The Containment Model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365<br />

Reinstantiating the Containment Model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368<br />

Identifying the Current Classes Used in MODEL (Optional) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368<br />

Editing the AOC Definitions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369<br />

Restarting the <strong>Discovery</strong> Data Flow at the Appropriate Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369<br />

Confirming the Instantiation (Optional) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371<br />

Databases of MODEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372<br />

The master Database Schema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372<br />

The model Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375<br />

Chapter 14: The Persistent Topology Store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377<br />

STORE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378<br />

Starting STORE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379<br />

Prerequisites for Running STORE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380<br />

Restoring Databases Using STORE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380<br />

STORE Databases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381<br />

The system Database Schema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381<br />

The kernel Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384<br />

The fault Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388<br />

Example <strong>Configuration</strong>s: Configuring STORE to Listen for Topology Traffic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392<br />

Example <strong>Configuration</strong>s: Configuring STORE to Listen for Event Traffic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> xi


Contents<br />

xii<br />

Chapter 15: The Active Object Class Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399<br />

Introduction to the AOC Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400<br />

The <strong>Precision</strong> Server Aproach to Network Modelling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400<br />

Active Object Classes and the <strong>Precision</strong> Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401<br />

Multiple Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402<br />

Active Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402<br />

Starting CLASS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403<br />

Prerequisites for Running CLASS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404<br />

The CLASS Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405<br />

The class Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405<br />

Manually Editing AOCs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409<br />

The Architecture of an AOC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409<br />

AOC Components - An Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410<br />

A Complete AOC File Explained. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410<br />

Chapter 16: The SNMP Trap Multiplexer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415<br />

SNMP Trap Multiplexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416<br />

Starting TrapMux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417<br />

Configuring TrapMux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418<br />

Example TrapMux <strong>Configuration</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418<br />

Controlling TrapMux Using the OQL Service Provider. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418<br />

The trapMux Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419<br />

Replaying Traps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422<br />

Replay the File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Contents<br />

Appendix A: The <strong>Discovery</strong> Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423<br />

Types of Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424<br />

DISCO <strong>Configuration</strong> Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424<br />

<strong>Discovery</strong> Scope Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424<br />

Process Management Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424<br />

DISCO Subprocess Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425<br />

Databases for Tracking the <strong>Discovery</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425<br />

Topology Databases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425<br />

Rediscovery Database. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425<br />

Additional Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425<br />

Failover Recovery. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426<br />

Ignored Cached Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426<br />

The failover Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426<br />

Example failover Database <strong>Configuration</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430<br />

<strong>Configuration</strong> Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431<br />

The config Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431<br />

The managedProcesses Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434<br />

The status Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435<br />

The agents Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437<br />

The NATStatus Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439<br />

Example <strong>Configuration</strong> of the disco.config Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439<br />

Example <strong>Configuration</strong> of the disco.managedProcesses Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440<br />

Example <strong>Configuration</strong> of the disco.agents Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441<br />

<strong>Discovery</strong> Scope Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442<br />

The scope Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442<br />

Example scope Database <strong>Configuration</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445<br />

More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447<br />

Process Management Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448<br />

Configuring the Data Flow: Starting Stitchers On-Demand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448<br />

The agents Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448<br />

The stitchers Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> xiii


Contents<br />

xiv<br />

Subprocess Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454<br />

The finders Database Schema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454<br />

The Details Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457<br />

Tracking <strong>Discovery</strong> Databases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460<br />

The translations Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460<br />

The instrumentation Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463<br />

The workingEntities database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467<br />

Topology Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470<br />

The fullTopology Database Schema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470<br />

The scratchTopology Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471<br />

The impactTopology Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472<br />

Rediscovery Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475<br />

The dataLibrary Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475<br />

The rediscoveredEntities Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475<br />

Additional Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476<br />

The agentTemplate Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476<br />

Appendix B: The Object Query Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479<br />

Introduction to OQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480<br />

Key Differences Between OQL and SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480<br />

General Rules of OQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480<br />

Quotes in OQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480<br />

Punctuation Used in OQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481<br />

Comments in OQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481<br />

Logical operators of OQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482<br />

Precedence and Association of Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482<br />

Conventions Used in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483<br />

Sample Databases Used in This Appendix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Contents<br />

Creating a Database or Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485<br />

Datatypes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485<br />

Column Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487<br />

Default Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487<br />

Unique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487<br />

Counter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487<br />

Timestamp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488<br />

Example of Database and Table Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488<br />

Inserting Data into a Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490<br />

Example of Inserting Data into a Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490<br />

Selecting Data from a Table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493<br />

Conditional Tests in OQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495<br />

Example Uses of the like Operator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495<br />

Example Use of the and Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496<br />

Example Use of the or Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497<br />

Selecting Based on Part of an Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497<br />

Using Select to Perform Subqueries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498<br />

Using Subqueries to Search a List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499<br />

Selecting Based on Part of a List. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499<br />

Selecting Data into Another Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501<br />

Using any, *, and all to Perform Table Joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501<br />

Updating a Record in a Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503<br />

Updating a List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503<br />

Updating an Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503<br />

Listing the Databases or Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505<br />

Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505<br />

Deleting a Record from a Database Table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507<br />

Basic Example of Deletion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507<br />

Deleting on Part of Object or List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507<br />

Deleting a Database or Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508<br />

Example of Deleting a Database and Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> xv


Contents<br />

xvi<br />

The Eval Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509<br />

Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509<br />

The eval Statement Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510<br />

Extraction of Record Values and Fields in OQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512<br />

Advanced Use of the eval Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513<br />

Appendix C: Stitchers and Stitcher Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517<br />

Introduction to <strong>Discovery</strong> Stitchers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518<br />

<strong>Discovery</strong> Stitchers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518<br />

Monitoring Stitchers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518<br />

Stitcher Formats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518<br />

Structure of the Stitchers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519<br />

List of Default <strong>Discovery</strong> Stitchers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521<br />

Stitcher Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535<br />

Stitcher Language Structural Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535<br />

Stitcher Trigger Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535<br />

Stitcher Rules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536<br />

Stitcher Language Programming Constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537<br />

Stitcher Language Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538<br />

Stitcher Language Relational Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538<br />

Comments in Stitchers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538<br />

Precedence and Association of Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539<br />

Quotes in the Stitcher Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539<br />

Stitcher Text File Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540<br />

Compiled Stitchers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540<br />

Text-Based <strong>Discovery</strong> Stitchers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540<br />

Stitcher Trigger Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Contents<br />

Stitcher Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544<br />

Variables Within the Stitcher Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544<br />

Programming Constructs: Looping within the Stitcher Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545<br />

Stitcher Rules: Delete() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548<br />

Stitcher Rules: ExecuteOQL() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549<br />

Stitcher Rules: RetrieveOQL(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549<br />

Stitcher Rules: RetrieveSingleOQL() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549<br />

Stitcher Rules: RetrieveOQLFromService() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549<br />

Stitcher Rules: GetInScopeRecord(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550<br />

Stitcher Rules: GetRecordFromScope() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550<br />

Stitcher Rules: SendOQLtoService() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550<br />

Stitcher Rules: SendAllOQLToService() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551<br />

Stitcher Rules: ExecuteStitcher() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552<br />

Stitcher Rules: ExecEvalOnRecord() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553<br />

Stitcher Rules: IsInSubnet() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553<br />

Stitcher Rules: MergeEntities() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553<br />

Stitcher Rules: PrintRecord() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553<br />

Stitcher Rules: Print() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554<br />

Stitcher Rules: MatchPattern(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554<br />

<strong>Discovery</strong>-specific Stitcher Rules: DiscoSendOQLToFinder() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557<br />

<strong>Discovery</strong>-specific Stitcher Rules: DiscoRefresh(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557<br />

<strong>Discovery</strong>-specific Stitcher Rules: IsRecordInFilter() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558<br />

<strong>Discovery</strong>-specific Stitcher Rules: Disco<strong>Discovery</strong>CycleComplete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558<br />

Contact Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> xvii


Contents<br />

xviii<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


preface.fm July 5, 2005<br />

Preface<br />

This guide describes how to administer and use the <strong>Precision</strong> Server. The following chapters and appendices<br />

describe each functional area, and task-oriented examples are provided to assist users and administrators in<br />

configuring and using the application.<br />

This preface contains the following sections:<br />

• Audience on page 2<br />

About this <strong>Guide</strong> on page 3<br />

Associated Publications on page 5<br />

Typographical Notation on page 7<br />

Operating System Considerations on page 10<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 1


Preface<br />

Audience<br />

2<br />

This guide is intended for both users and administrators, and provides detailed cross-platform information<br />

about tools, functions, and capabilities. In addition, it is designed to be used as a reference guide to assist<br />

you in designing and configuring your environment.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> works in conjunction with <strong>Netcool</strong> ® /OMNIbus and it is assumed that you<br />

understand how <strong>Netcool</strong>/OMNIbus works. For more information on <strong>Netcool</strong>/OMNIbus, refer to the<br />

publications described in Associated Publications on page 5.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


About this <strong>Guide</strong><br />

This book is organized as follows:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

About this <strong>Guide</strong><br />

Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> on page 11 introduces the <strong>Precision</strong><br />

Server architecture and the concept of domains. This chapter also describes DISCO, the<br />

auto-discovery engine, and the discovery process, including restricting discovery and rediscovery.<br />

Chapter 2: Process Control with CTRL on page 47 describes how to start the <strong>Precision</strong> Server Domain<br />

Process Controller, ncp_ctrl, and configure it to start and manage your <strong>Precision</strong> Server<br />

processes.<br />

Chapter 3: Creating and Managing Users on page 69 describes the default users and profiles included<br />

with the <strong>Precision</strong> Server. This chapter also describes how to use the User <strong>Configuration</strong> Tool to<br />

create and edit users and user profiles. in addition, this chapter describes the <strong>Precision</strong> Server<br />

authentication engine, ncp_auth, along with its databases.<br />

Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI on page 85 describes the <strong>Discovery</strong><br />

<strong>Configuration</strong> GUI, which is the recommended way to configure your discovery. This chapter<br />

describes how to start the GUI, and how to use it to configure all aspects of your network discovery.<br />

Chapter 5: Querying <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Databases on page 165 describes ncp_oql, the Object<br />

Query Language (OQL) Service Provider. This chapter describes how to use the OQL Service<br />

Provider to query the databases of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>.<br />

Chapter 6: Network <strong>Discovery</strong> from the Command Line on page 175 describes how to start, run, and<br />

track a discovery from the command line.<br />

Chapter 7: Scoping a <strong>Discovery</strong> on page 207 describes how to limit the scope of a discovery using<br />

OQL.<br />

Chapter 8: Using Finders to Seed a <strong>Discovery</strong> on page 219 describes the finders, processes that discover<br />

device existence. This chapter describes how to configure the behavior of the finders using OQL<br />

inserts.<br />

Chapter 9: <strong>Discovery</strong> Agents on page 239 describes the <strong>Discovery</strong> Agents supplied with the <strong>Precision</strong><br />

Server. This chapter describes the different types of Agent, how to enable and disable the Agents, and<br />

how to configure the <strong>Discovery</strong> Agents.<br />

Chapter 10: The <strong>Discovery</strong> Helper System on page 285 describes the Helper Server, a subsystem of<br />

DISCO, and its helpers. This chapter describes how to start the Helper Server and how to configure<br />

the helpers.<br />

Chapter 11: Configuring an MPLS <strong>Discovery</strong> on page 325 describes how to discover MPLS networks.<br />

It explains which types of MPLS discovery you can perform using <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> and leads you<br />

through the steps required to perform an MPLS discovery.<br />

3


Preface<br />

4<br />

Chapter 12: Managing NAT Environments on page 341 describes NAT (Network Address<br />

Translation) and how <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> manages NAT environments. This chapter also describes<br />

how to configure a NAT discovery.<br />

Chapter 13: Accessing Topology Data in MODEL on page 355 describes the function of the MODEL<br />

component, including how to access the discovered network topology. This chapter also describes the<br />

containment model used by <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> to model physical and logical containment of<br />

network devices.<br />

Chapter 14: The Persistent Topology Store on page 377 describes the persistent topology store,<br />

STORE, and its databases.<br />

Chapter 15: The Active Object Class Server on page 399 describes CLASS, the AOC Server. This<br />

chapter describes how to start CLASS, and how to manually edit the AOCs.<br />

Chapter 16: The SNMP Trap Multiplexer on page 415 describes how to forward traps to multiple<br />

destinations using trapMux, the SNMP trap multiplexer.<br />

Appendix A: The <strong>Discovery</strong> Databases on page 423 gives the schemas of all the databases used by<br />

DISCO.<br />

Appendix B: The Object Query Language on page 479 describes OQL, the Object Query Language<br />

used by the databases of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>. This chapter describes how to perform various types of<br />

queries and operations on component databases.<br />

Appendix C: Stitchers and Stitcher Language on page 517 gives a list of stitchers used in the discovery<br />

process. Stitchers are software processes used throughout <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> to transfer and<br />

manipulate data. This chapter also describes the syntax and rules of the stitcher language.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Associated Publications<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Associated Publications<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> integrates with the <strong>Netcool</strong>/OMNIbus event management product. <strong>Netcool</strong>/<strong>Precision</strong><br />

<strong>IP</strong> is also deployed within the <strong>Netcool</strong> GUI Foundation server application, which runs <strong>Netcool</strong>/<strong>Precision</strong><br />

<strong>IP</strong> and other <strong>Netcool</strong> suite GUIs.<br />

To efficiently administer <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>, you must possess an understanding of the<br />

<strong>Netcool</strong>/OMNIbus technology. This section provides a description of the documentation that accompanies<br />

<strong>Netcool</strong>/OMNIbus, <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> and the <strong>Netcool</strong> GUI Foundation.<br />

<strong>Netcool</strong>®/OMNIbus Installation and Deployment <strong>Guide</strong><br />

This book is intended for <strong>Netcool</strong> administrators who need to install and deploy <strong>Netcool</strong>/OMNIbus. It<br />

includes installation, upgrade, and licensing procedures. In addition, it contains information about<br />

configuring security and component communications. It also includes examples of <strong>Netcool</strong>/OMNIbus<br />

architectures and how to implement them.<br />

<strong>Netcool</strong>®/OMNIbus User <strong>Guide</strong><br />

This book is intended for anyone who needs to use <strong>Netcool</strong>/OMNIbus desktop tools on UNIX or Windows<br />

platforms. It provides an overview of <strong>Netcool</strong>/OMNIbus components, as well as a description of the<br />

operator tasks related to event management using the desktop tools.<br />

<strong>Netcool</strong>®/OMNIbus Administration <strong>Guide</strong><br />

This book is intended for system administrators who need to manage <strong>Netcool</strong>/OMNIbus. It describes how<br />

to perform administrative tasks using the <strong>Netcool</strong>/OMNIbus Administrator GUI, command line tools, and<br />

process control. It also contains descriptions and examples of ObjectServer SQL syntax and automations.<br />

<strong>Netcool</strong>®/OMNIbus Probe and Gateway <strong>Guide</strong><br />

This book contains introductory and reference information about probes and gateways, including probe<br />

rules file syntax and gateway commands. For more information about specific probes and gateways, refer to<br />

the documentation available for each probe and gateway on the Micromuse Support Site.<br />

<strong>Netcool</strong>®/<strong>Precision</strong> <strong>IP</strong> Installation and Deployment <strong>Guide</strong><br />

This book describes the automated installation process and minimum system requirements for<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>. This book also describes post-installation configuration and troubleshooting.<br />

5


Preface<br />

<strong>Netcool</strong>®/<strong>Precision</strong> <strong>IP</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

6<br />

This book describes how to configure and run discoveries. It contains reference information about the<br />

<strong>Precision</strong> Server, which performs network discovery. The book describes the components that make up the<br />

<strong>Precision</strong> Server, including helpers, agents, stitchers, and databases, and includes a detailed command line<br />

option reference. In addition, this book provides comprehensive information about the stitcher and OQL<br />

languages used within <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>.<br />

<strong>Netcool</strong>®/<strong>Precision</strong> <strong>IP</strong> Monitoring and RCA <strong>Guide</strong><br />

This book describes how to customize monitoring and event correlation, and how to write and adapt<br />

monitoring stitchers. The book also describes the RCA Engine databases, and the additional components<br />

installed as part of the integration with <strong>Netcool</strong>/OMNIbus.<br />

<strong>Netcool</strong>®/<strong>Precision</strong> <strong>IP</strong> Desktop <strong>Guide</strong><br />

This book describes the operation of the <strong>Precision</strong> Desktop. The <strong>Precision</strong> Desktop is not available on<br />

Windows.<br />

<strong>Netcool</strong>®/<strong>Precision</strong> <strong>IP</strong> Topology Visualization <strong>Guide</strong><br />

This book describes how to visualize your topology using the Topoviz Hop View. The book also describes<br />

how to partition your view of the network using the Network Views, and how to view device information<br />

using the MIB Browser.<br />

<strong>Netcool</strong> GUI Foundation Administration <strong>Guide</strong><br />

This book describes how to administer the <strong>Netcool</strong> GUI Foundation, the central server application that runs<br />

web-based GUIs from different <strong>Netcool</strong> products. This guide describes how to configure the <strong>Netcool</strong> GUI<br />

Foundation server, manage users, create and provision pages, and administer security permissions.<br />

<strong>Netcool</strong> Licensing Administration <strong>Guide</strong><br />

Online Help<br />

This book is intended for <strong>Netcool</strong> administrators who need to install and administer <strong>Netcool</strong> Licensing. It<br />

provides an overview of the generic <strong>Netcool</strong> Licensing component, as well as instructions for installing,<br />

upgrading, and configuring one or more license servers to dispense licenses to <strong>Netcool</strong> Licensing clients.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> web-based GUIs contain context-sensitive online help with index and search<br />

capabilities. Online documentation, HTML versions of the associated guides, are also available.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Typographical Notation<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Typographical Notation<br />

Table 1 shows the typographical notation and conventions used to describe commands, SQL syntax, and<br />

graphical user interface (GUI) features. This notation is used throughout this book and other <strong>Netcool</strong> ®<br />

publications.<br />

Table 1: Typographical Notation and Conventions (1 of 2)<br />

Example Description<br />

Monospace The following are described in a monospace font:<br />

Commands and command line options<br />

Screen representations<br />

Source code<br />

Object names<br />

Program names<br />

SQL syntax elements<br />

Filenames, paths, and directory names<br />

Italicized monospace text indicates a variable that the user must populate. For example, -password<br />

password.<br />

Bold The following application characteristics are described in a bold font style:<br />

Buttons<br />

Note: Text in the pop-up tooltips is used to name buttons with icons. These button names are<br />

described in plain text.<br />

Frames<br />

Text fields<br />

Menu entries<br />

A bold arrow symbol indicates a menu entry selection. For example, File→Save.<br />

Italic The following are described in an italic font style:<br />

An application window name; for example, the Login window<br />

Information that the user must enter<br />

The introduction of a new term or definition<br />

Emphasized text<br />

References to external documents<br />

[1] Code or command examples are occasionally prefixed with a line number in square brackets. For<br />

example:<br />

[1] First command...<br />

[2] Second command...<br />

[3] Third command...<br />

7


Preface<br />

8<br />

Table 1: Typographical Notation and Conventions (2 of 2)<br />

Example Description<br />

{ a | b } In SQL syntax notation, curly brackets enclose two or more required alternative choices, separated by<br />

vertical bars.<br />

[ ] In SQL syntax notation, square brackets indicate an optional element or clause. Multiple elements or<br />

clauses are separated by vertical bars.<br />

| In SQL syntax notation, vertical bars separate two or more alternative syntax elements.<br />

... In SQL syntax notation, ellipses indicate that the preceding element can be repeated. The repetition is<br />

unlimited unless otherwise indicated.<br />

,... In SQL syntax notation, ellipses preceded by a comma indicate that the preceding element can be<br />

repeated, with each repeated element separated from the last by a comma. The repetition is unlimited<br />

unless otherwise indicated.<br />

a In SQL syntax notation, an underlined element indicates a default option.<br />

( ) In SQL syntax notation, parentheses appearing within the statement syntax are part of the syntax and<br />

should be typed as shown unless otherwise indicated.<br />

Many <strong>Netcool</strong> commands have one or more command line options that can be specified following a hyphen<br />

(-).<br />

Command line options can be string, integer, or BOOLEAN types:<br />

A string can contain alphanumeric characters. If the string has spaces in it, enclose it in quotation<br />

(") marks.<br />

An integer must contain a positive whole number or zero (0).<br />

A BOOLEAN must be set to TRUE or FALSE.<br />

SQL keywords are not case-sensitive, and may appear in uppercase, lowercase, or mixed case. Names of<br />

ObjectServer objects and identifiers are case-sensitive.<br />

Note, Tip, and Warning Information<br />

The following types of information boxes are used in the documentation:<br />

Note: Note is used for extra information about the feature or operation that is being described. Essentially,<br />

this is for extra data that is important but not vital to the user.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


!<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Typographical Notation<br />

Tip: Tip is used for additional information that might be useful for the user. For example, when describing<br />

an installation process, there might be a shortcut that could be used instead of following the standard<br />

installation instructions.<br />

Warning: Warning is used for highlighting vital instructions, cautions, or critical information. Pay close<br />

attention to warnings, as they contain information that is vital to the successful use of our products.<br />

Syntax and Example Subheadings<br />

The following types of constrained subheading are used in the documentation:<br />

Syntax<br />

Syntax subheadings contain examples of ObjectServer SQL syntax commands and their usage. For example:<br />

CREATE DATABASE database_name;<br />

Example<br />

Example subheadings describe typical or generic scenarios, or samples of code. For example:<br />

[1] <br />

[2] <br />

[6] <br />

9


Preface<br />

Operating System Considerations<br />

10<br />

Unless otherwise specified, command files are located in the NCHOME/precision/bin directory,<br />

where NCHOME is the environment variable that contains the path to the <strong>Netcool</strong> Suite home directory.<br />

The precise formulation of this path depends on your platform:<br />

On UNIX platforms, replace NCHOME with $NCHOME. All command line formats and examples are<br />

for the standard UNIX shell. UNIX is case-sensitive. You must type commands in the case shown in<br />

the book.<br />

On Microsoft Windows platforms, replace NCHOME with %NCHOME% and the forward slash (/) with<br />

a backward slash (\).<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


1. Server_Overview.fm July 11, 2005<br />

Chapter 1: Introduction to <strong>Discovery</strong> with<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

This chapter introduces the components and processes of the <strong>Precision</strong> Server and also provides a detailed<br />

overview of the discovery process.<br />

This chapter contains the following sections:<br />

The <strong>Precision</strong> Server Architecture on page 12<br />

Communication Between Processes on Different Hosts on page 15<br />

Configuring <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Server Domains on page 18<br />

An Overview of Using <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> on Windows on page 20<br />

Introduction to DISCO on page 23<br />

An Overview of the <strong>Discovery</strong> Process on page 25<br />

Restricting the <strong>Discovery</strong> and Defining Exceptions on page 34<br />

<strong>Discovery</strong> Stages and Phases on page 35<br />

After the First <strong>Discovery</strong>: Rediscovery on page 40<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 11


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

1.1 The <strong>Precision</strong> Server Architecture<br />

12<br />

The <strong>Precision</strong> Server maps and distributes the network topology, interprets and distributes class-based<br />

management policy issues, and provides the basis for retrieval of device-specific data from the network<br />

devices through an extensible polling mechanism.<br />

The <strong>Precision</strong> Server is extensible and scalable. It is possible to plug in one or more network management<br />

applications that can make use of the processes available in the <strong>Precision</strong> Server to gather application-specific<br />

data and perform application-specific tasks. An example of such an application is the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

RCA and monitoring system, which is described in the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Monitoring and RCA <strong>Guide</strong>.<br />

Figure 1 shows the core components of the <strong>Precision</strong> Server. The components are described in detail in<br />

individual chapters of this guide.<br />

AUTH<br />

Helper Server<br />

H<br />

H<br />

Network<br />

Figure 1: <strong>Precision</strong> Server Overview<br />

F<br />

CTRL<br />

DISCO<br />

F<br />

CLASS<br />

MODEL<br />

STORE<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> provides the user with the capability to automatically discover network devices and<br />

their connectivity. This auto-discovery capability generates a topology model that can be:<br />

Displayed using the Topoviz topology visualization tool.<br />

H = helper<br />

F = finder<br />

Used to automatically configure the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> network monitoring system to identify<br />

network events.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

The <strong>Precision</strong> Server Architecture<br />

Used to correlate disparate network events using the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Root Cause Analysis<br />

(RCA) Engine.<br />

Provide a list of network assets to network-inventory systems.<br />

The automated network discovery process (DISCO) is highly configurable and extensible. It operates by<br />

detecting the existence of a device on the network and querying the device for inventory and connectivity<br />

information, which is subsequently processed or ‘stitched’ together to generate a connectivity or topology<br />

model. The DISCO system components are described in Table 1.<br />

Table 1: Components of the <strong>Discovery</strong> System<br />

Component Description<br />

<strong>Discovery</strong> finders Finders can use a number of different protocols to<br />

determine the existence of devices on the network.<br />

<strong>Discovery</strong> agents Agents are used to request information from devices that<br />

the finders have discovered. There are a variety of agents,<br />

each specialized to retrieve information from different<br />

devices, and/or use different protocols.<br />

<strong>Discovery</strong> Helper Server Requests for information made by agents go through the<br />

Helper Server. The Helper Server can service the requests<br />

directly with cached data or pass on the request to the<br />

appropriate helper.<br />

<strong>Discovery</strong> helpers Helpers translate queries into the appropriate network<br />

protocol and make requests to the devices.<br />

<strong>Discovery</strong> stitchers Stitchers process the information collected by the agents<br />

into a topology/connectivity model.<br />

Once generated, the topology model is held in the topology repository (MODEL). MODEL is queried by<br />

other subsystems using <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>'s Object Query Language (OQL). The persistent storage<br />

system (STORE) is used to store the network model on disk. Further details of MODEL and STORE can<br />

be found in Chapter 13: Accessing Topology Data in MODEL on page 355 and Chapter 14: The Persistent<br />

Topology Store on page 377. If necessary, you can also use OQL to query the component databases through<br />

an OQL command line interface, details of which can be found in Appendix B: The Object Query Language<br />

on page 479.<br />

When a device has been discovered and recognized by <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>, it is assigned (instantiated) a<br />

management class. A device's class defines the network management policies that are applied to the device.<br />

The management class is defined by the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Active Object Class (AOC) system – a<br />

hierarchically defined set of management policies that are controlled and distributed by the AOC server<br />

engine (CLASS). The AOC system is briefly described in Manually Editing AOCs on page 409 and covered<br />

in greater detail in the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Monitoring and RCA <strong>Guide</strong>. For details of CLASS, see<br />

Chapter 15: The Active Object Class Server on page 399 of this guide.<br />

13


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

14<br />

The <strong>Precision</strong> Server provides a process management system (CTRL) that is responsible for starting and<br />

stopping individual components within <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>. For details of configuring CTRL, see<br />

Chapter 2: Process Control with CTRL on page 47.<br />

The <strong>Precision</strong> Server stores information (including the topology model) in a database system, access to which<br />

is controlled using the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> authentication system (AUTH). Using the User Management<br />

interface, as an administrative user, you can define different levels of access within different profiles and<br />

assign appropriate profiles to individual users. For details of adding users to the system, see<br />

Chapter 3: Creating and Managing Users on page 69.<br />

Inter-process communication is achieved using the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> message bus (based upon<br />

TIB/Rendezvous). The publish-subscribe mechanism, based upon multicast technology, provides<br />

communication between the individual components and also allows them to be distributed onto multiple<br />

machines. For details on configuring TIB/Rendezvous, see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Installation and<br />

Deployment <strong>Guide</strong>.<br />

Note: When inter-process communication needs to take place with processes running on different hosts that<br />

are behind a firewall, you need to dedicate a port for each process running on a separate host. For<br />

information on how to do this for discovery helpers and agents running on separate hosts, see<br />

Communication Between Processes on Different Hosts on page 15.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Communication Between Processes on Different Hosts<br />

1.2 Communication Between Processes on Different Hosts<br />

When inter-process communication needs to take place with processes running on different hosts that are<br />

behind a firewall, then you need to use a TCP socket-based connection to dedicate a port for each process<br />

running on a separate host. Examples of this kind of inter-process communication may occur in the<br />

following scenarios:<br />

Helpers and the Helper Server are running on a different host to DISCO<br />

Agents and the Helper Server are running on a different host to DISCO<br />

Interaction between primary and backup servers in a failover architecture<br />

This section considers the scenario in which the helpers and the Helper Server are running on a different<br />

host to DISCO and describes how to facilitate inter-process communication in this case. The same<br />

principles described in this example apply to all the scenarios.<br />

Communication Between DISCO and the Helper Server<br />

If the helpers and the Helper Server are running on a different host to DISCO, then DISCO and the Helper<br />

System communicate using a TCP socket-based connection. However, the initial communication of the<br />

server address is accomplished by a multicast process. A client (discovery agents and helpers are clients to the<br />

Helper Server) sends a multicast request for the address of the server to participating <strong>Precision</strong> Server<br />

processes. The server responds with its connection details, and a TCP connection is established. This<br />

connection then becomes the private link between the server and the client process. You can specify the exact<br />

multicast address and port number for communication between processes through the Service Data<br />

configuration file, ServiceData.cfg.<br />

The ServiceData <strong>Configuration</strong> File<br />

The ServiceData configuration file is a dynamic file that is constantly updated by <strong>Precision</strong> Server<br />

processes. Every <strong>Precision</strong> Server service (that is, component or process) using a TCP socket adds a line to<br />

the file on start up containing information about the service. The service removes the line from the<br />

configuration file when it terminates. The information appended to the configuration file is listed below:<br />

The service name<br />

The service domain<br />

The service <strong>IP</strong> address<br />

The service port number<br />

The server on which the process is being run<br />

15


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

16<br />

In the example configuration file shown below, the first service called MulticastService shows the<br />

multicast address and port number. The second service shows that the Helper service is running on the<br />

DEMO domain, and includes information about the <strong>IP</strong> address, port number and the name of the server<br />

where the Helper service is running.<br />

--<br />

-- Server data file - contains info on servers and the general multicast<br />

-- address to use.<br />

--<br />

SERVICE: MulticastService DOMAIN: ANY_PRECISION_DOMAIN ADDRESS: 225.13.13.13 PORT:<br />

33000<br />

SERVICE: Helper DOMAIN: DEMO ADDRESS: 192.168.31.8 PORT: 51153 SERVERNAME: britanicus<br />

DYNAMIC: YES<br />

Defining Fixed Helper Ports<br />

When helpers are located on different hosts that are behind a firewall, you need to dedicate a port on the<br />

server machine for communication with the helpers. You also need to dedicate a port on each of the<br />

machines where one or more helpers are running for communication with the server. You do this by<br />

modifying the ServiceData.cfg file on the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> installation on the server machine<br />

and on each of the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> installations on each of the remote hosts where helpers are running.<br />

Note: <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> needs to be installed on each of the remote hosts where helpers are running.<br />

To set fixed port settings for helpers on the server machine:<br />

1. On the server machine, start the Helper server. For information on how to do this, see Starting the<br />

Helper Server on page 288.<br />

2. Copy the ServiceData.cfg file so that you have a backup copy.<br />

3. Edit the ServiceData.cfg file and copy the line relevant to the helper (or helpers) for which<br />

you want to fix a static port.<br />

The line may look something like this:<br />

SERVICE: Helper DOMAIN: DEMO ADDRESS: 192.168.31.8 PORT: 51153 SERVERNAME:<br />

britanicus DYNAMIC: YES<br />

The port for the helper in this example has been assigned on a dynamic basis by Rendezvous.<br />

4. Change the PORT setting to the desired value.<br />

5. Change the string DYNAMIC:YES to DYNAMIC:NO.<br />

6. Save the ServiceData.cfg file.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


To set fixed port settings for the server on the helper host:<br />

1. Copy the ServiceData.cfg file so that you have a backup copy.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Communication Between Processes on Different Hosts<br />

2. On the server, edit the ServiceData.cfg file and copy the line that you edited to set fixed port<br />

settings for helpers on the server machine.<br />

3. Edit the ServiceData.cfg file on the helper host and paste the line that you copied in Step 2.<br />

Using the example above, this line looks like this:<br />

SERVICE: Helper DOMAIN: DEMO ADDRESS: 192.168.31.8 PORT: 51153 SERVERNAME:<br />

britanicus DYNAMIC: NO<br />

4. Save the ServiceData.cfg file.<br />

5. Repeat steps 1 to 4 for each of the helpers that requires a fixed port setting.<br />

Changing the Multicast Address<br />

In order to modify the multicast address used by the <strong>Precision</strong> Server processes, you have to edit the address<br />

and the port of the first line of the ServiceData.cfg configuration file, as shown below.<br />

--<br />

-- Server data file - contains info on servers and the general<br />

-- multicast address to use.<br />

--<br />

SERVICE: MulticastService DOMAIN: DOMAIN_NAME ADDRESS: MULTICAST_ADDRESS PORT:<br />

PORT_NUMBER<br />

In the above statement:<br />

MulticastService refers to the <strong>Precision</strong> Server service that is being configured to use a<br />

particular multicast address. Valid entries include Model, Events, Class, Auth, Exec, Ctrl.<br />

DOMAIN_NAME indicates the domain name of the service that is to use the specified multicast<br />

address. It is possible to set the same service to use different multicast addresses for each domain that<br />

it is run in. Alternatively, you may replace the DOMAIN_NAME with ANY_PRECISION_DOMAIN,<br />

which means that the service is to use the same multicast address for all domains it is executed in.<br />

MULTICAST_ADDRESS indicates the multicast address to be used by the multicast service<br />

provider.<br />

PORT_NUMBER indicates the port number to be used by the multicast service provider.<br />

The multicast address in the configuration files must be the same for all devices that have clients that talk to<br />

each other. If this is not the case, processes on one device can talk but others are not able to listen because<br />

they are not tuned in to the right frequency.<br />

17


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

1.3 Configuring <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Server Domains<br />

18<br />

A <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> domain is an arbitrary set of <strong>Precision</strong> Server executables that work together in a<br />

single group identified by a name that is referred to as the domain name. You can run multiple domains in<br />

order to perform multiple network discoveries, and multiple <strong>Precision</strong> Server processes can run<br />

independently of each other on the same device if they belong to different domains.<br />

The domain in which a component runs is determined by the command line argument -domain, which<br />

is compulsory for all components.<br />

Note: In order for RCA and topology visualization to function properly, each ObjectServer (or<br />

ObjectServer failover pair) must be associated with only one <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> domain.<br />

Domain-Specific <strong>Configuration</strong> Files<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> components are controlled by configuration files. For example, the component<br />

ncp_ctrl reads the CtrlServices.cfg file on startup and starts those components that have entries<br />

in the file.<br />

You can run components in multiple domains with different configurations by creating different<br />

configuration files for each domain. When started, components look for a domain-specific version of their<br />

configuration file(s), and use this in preference to the default version.<br />

Some components, such as the configuration GUIs, save your configuration changes by writing to<br />

component configuration files. Any configuration files changed during a session with a configuration GUI<br />

are specific to the domain in which the GUI was started.<br />

Note: You only need to create domain-specific versions of those files that are different for a given domain.<br />

Files without changes can be ’shared' by components running in different domains.<br />

To create a domain-specific version of a file:<br />

1. Back up the original version of the file.<br />

2. Save a copy of the file with the domain name appended to the filename.<br />

For example, to save the file CtrlServices.cfg for the domain MASTER, it must be named<br />

CtrlServices.MASTER.cfg.<br />

In the above example, the next time that ncp_ctrl is run in the domain MASTER, it starts those processes<br />

listed in the CtrlServices.MASTER.cfg file. The next time that ncp_ctrl is run in a different<br />

domain, NCOMS, for example, it starts those processes listed in the CtrlServices.cfg file.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Server Domains<br />

Note: Many instructions to <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> components are specified by inserting data into database<br />

tables. These insert commands are coded in configuration files. When specifying inserts for a given<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> component, ensure that all inserts to the same database are coded in the same<br />

configuration file. If different configuration files try to execute inserts on the same database, unexpected<br />

results may occur.<br />

Note: You should also ensure that the configuration file in which you specify inserts is different to the<br />

configuration file that you use to create databases for a given <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> component. This ensures<br />

that the process of upgrading to a new version of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> runs smoothly.<br />

Domain-Specific File Names<br />

Although in practice there are some files that you are unlikely to need to alter, in principle all of the following<br />

types of files can be made domain-specific:<br />

<strong>Configuration</strong> files, that is, all files ending in .cfg<br />

<strong>Discovery</strong> agent files, that is, all files ending in .agnt<br />

Active Object Class files, that is, all files ending in .aoc<br />

Stitcher files, that is, all files in a stitchers directory ending in .stch or .so<br />

In the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> documentation, these files are referred to using their default names unless noted<br />

otherwise.<br />

Note: In order to ensure that users are valid across all domains, ncp_auth does not use domain-specific<br />

versions of its configuration file even if they exist.<br />

19


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

1.4 An Overview of Using <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> on Windows<br />

20<br />

This section provides a concise overview of using <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> on a Windows platform and provides<br />

details of the additional functionality for Windows, as well as functionality not currently provided for<br />

Windows.<br />

This section is structured as follows:<br />

Controlling <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> on Windows on page 20<br />

Additional Functionality for Windows on page 21<br />

Functionality Not Available for Windows on page 22<br />

Controlling <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> on Windows<br />

Micromuse recommends that <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> domain processes are run as Windows services. The<br />

main benefit of running <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> processes as services is that an administrator can create<br />

domains and services that a standard user can control.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

An Overview of Using <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> on Windows<br />

Additional items will appear on the Windows Start Menu upon successful installation of <strong>Netcool</strong>/<strong>Precision</strong><br />

<strong>IP</strong>. Figure 2 shows the new <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> items added to the Start Menu. The menu items enable<br />

you to open a ncp_ctrl console, or start or stop ncp_ctrl. These menu items only apply to the<br />

domain that was set up during installation.<br />

Figure 2: <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> on the Windows Start Menu<br />

Additional Functionality for Windows<br />

This section provides details of the additional functionality available to Windows in this release of<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> enables you to set up and control <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> processes as Windows services.<br />

See Configuring <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Server Domains on page 18 for further details.<br />

A new -errorlevel command line parameter has been added to all <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> processes. The<br />

number following this parameter will indicate the types of errors to be printed. Permitted values are:<br />

1 - Print only fatal errors<br />

21


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

22<br />

2 - Print fatal errors and warnings<br />

3 - Print fatal errors, warnings and informational messages<br />

The default -errorlevel is 3, which is equivalent to previous functionality. You can set the value to 1<br />

for all processes. Please note that this will make fixing subtle problems more difficult. Debug is controlled<br />

independently using the -debug parameter. However, for coherence, if -errorlevel is set to a lower<br />

value than -debug, the error level will be increased to either 3 or the debug level, whichever is lower.<br />

You can copy <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> configuration files between Windows and UNIX. The files might lose<br />

some formatting when viewed in a text editor due to the different formats for line breaks in text files on<br />

Windows and UNIX systems. However, <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> is able to read them. When UNIX<br />

configuration files are used on Windows, Notepad will not show any line breaks. Wordpad will display<br />

UNIX text files correctly, so it is the best application to view configuration files copied from UNIX<br />

platforms. When a Windows configuration file is used on UNIX, vi will show ^M at the end of each line.<br />

This is a cosmetic issue and does not affect usability of the file by <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>.<br />

Functionality Not Available for Windows<br />

This section provides details of the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> functionality that is not available on Windows<br />

installations.<br />

The User <strong>Configuration</strong> Tool is not available for Windows deployments; you can modify AUTH<br />

using OQL if you need to change or add user settings for a Windows deployment.<br />

The MONITOR <strong>Configuration</strong> Tool is not available for Windows deployments; you can edit AOCs<br />

using Notepad or another text editor of your choice, but the changes will not take effect until the<br />

<strong>Precision</strong> Server components are restarted.<br />

The Perl API is not included in this version of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>, therefore the<br />

NATTextFileAgent agent cannot be used.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


1.5 Introduction to DISCO<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Introduction to DISCO<br />

DISCO manages the process of discovering device existence and interconnectivity. DISCO resolves<br />

retrieved connectivity information to create the containment model and produce a network topology that is<br />

passed to the MODEL component.<br />

On startup, DISCO reads the following configuration files in order:<br />

NCHOME/etc/precision/DiscoSchema.cfg, which contains definitions of the databases<br />

used during the discovery process.<br />

NCHOME/etc/precision/DiscoAgents.cfg, which contains a list of the discovery agents<br />

and other subprocesses that DISCO is to run and manage.<br />

NCHOME/etc/precision/DiscoScope.cfg, which contains scoping information for the<br />

discovery.<br />

Note: NCHOME is the environment variable that contains the path to the <strong>Netcool</strong> Suite home directory. For<br />

information on how this environment variable varies with platform, see Operating System Considerations on<br />

page 10.<br />

The DISCO subprocesses involved in the discovery are shown in Table 2. The description includes<br />

cross-references to detailed explanations in this guide.<br />

Table 2: Processes and Applications That Interact with DISCO (1 of 2)<br />

Name Description<br />

Finders Finders discover the existence of devices but do not retrieve connectivity information (see<br />

Chapter 8: Using Finders to Seed a <strong>Discovery</strong> on page 219).<br />

Details agent The Details agent interrogates the network through the Helper Server for basic device information<br />

and determines whether SNMP access is available (see Chapter 9: <strong>Discovery</strong> Agents on page 239).<br />

Associated Address<br />

agent<br />

The Associated Address agent downloads all <strong>IP</strong> addresses associated with a device to verify that<br />

the device has not already been discovered through another interface. Devices that have already<br />

been discovered are not passed to the discovery agents (see The Associated Address (AssocAddress)<br />

Agent on page 240).<br />

<strong>Discovery</strong> agents The discovery agents retrieve connectivity information. They do not have any direct interaction<br />

with the network, but instead retrieve information through the Helper Server. <strong>Discovery</strong> agents<br />

can be libraries or text files, and are specialized for particular protocols, devices or classes (see<br />

<strong>Discovery</strong> Agents on page 239).<br />

Helper Server The Helper Server manages the helpers and stores information retrieved from the network.<br />

<strong>Discovery</strong> agents retrieve their information through the Helper Server to reduce the load on the<br />

network (see Introduction to the Helper System on page 286).<br />

23


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

24<br />

Table 2: Processes and Applications That Interact with DISCO (2 of 2)<br />

Name Description<br />

Helpers The helpers retrieve information from the network on behalf of the discovery agents (see The<br />

<strong>Discovery</strong> Helper System on page 285).<br />

Stitchers Stitchers are processes that are responsible for the transfer, manipulation and distribution of data<br />

between databases. The discovery stitchers are responsible for creating the network topology (see<br />

Introduction to <strong>Discovery</strong> Stitchers on page 518).<br />

In order for DISCO to launch and manage its subprocesses, CTRL must be running. DISCO instructs<br />

CTRL to launch the finders and discovery agents as necessary, although these subprocesses can also be<br />

started manually at the command line.<br />

When DISCO is operational, it periodically scans the agents and stitchers directories and loads any new or<br />

modified stitcher and discovery agent definitions.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


1.6 An Overview of the <strong>Discovery</strong> Process<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

An Overview of the <strong>Discovery</strong> Process<br />

This section gives a step-by-step walkthrough of the discovery process, demonstrating how DISCO discovers<br />

devices on the network to produce a network topology containment model.<br />

The default data flow is shown in a series of diagrams that depict a single discovery cycle. A discovery cycle is<br />

said to have occurred when the data flow described in this section has completed from start to finish. A full<br />

discovery may require more than one cycle.<br />

Internally, the discovery is split into various stages and phases. These are explained in <strong>Discovery</strong> Stages and<br />

Phases on page 35.<br />

This section splits the discovery data flow into the following conceptual steps:<br />

Discovering Device Existence on page 26<br />

Discovering Device Details (Standard) on page 27<br />

Discovering Device Details (Context-Sensitive) on page 28<br />

Discovering Associated Device Addresses on page 29<br />

Discovering Device Connectivity on page 30<br />

Creating the Topology on page 31<br />

These steps follow the discovery data flow in order from start to finish, with the exception of Discovering<br />

Device Details (Context-Sensitive) on page 28, which replaces Discovering Device Details (Standard) on<br />

page 27 if the discovery is context-sensitive.<br />

25


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

Discovering Device Existence<br />

26<br />

Figure 3 shows how the initial existence of devices on the network is discovered.<br />

1<br />

3<br />

F<br />

Network<br />

despatch<br />

returns<br />

pending<br />

Database<br />

processing<br />

F F<br />

Finders database<br />

Figure 3: <strong>Discovery</strong> Process Flow: Device Existence<br />

The process flow shown in Figure 3 is described below.<br />

2<br />

4<br />

despatch<br />

returns F = finder<br />

Details Agent<br />

1. Finders receive their instructions from their configuration files and the inserts made into the<br />

finders.despatch table, then proceed to the network to look for devices.<br />

2. Finders return device existence information to the finders.returns table.<br />

3. As soon as device existence information is placed into the finders.returns table, a stitcher<br />

moves the information to the finders.processing table. This signifies that the network entity<br />

is being processed by DISCO. If the discovery is in the blackout state, the information is placed into<br />

the finders.pending table instead. See The Blackout State on page 35 for information on the<br />

blackout state and how data in the finders.pending table is managed.<br />

4. A stitcher moves the information about device existence from the finders.processing table<br />

to the Details.despatch table, ready for processing by the Details agent.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Discovering Device Details (Standard)<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

An Overview of the <strong>Discovery</strong> Process<br />

Figure 4 shows how device details are discovered in a standard (not context-sensitive) discovery.<br />

1<br />

H<br />

despatch<br />

returns<br />

Network<br />

2<br />

Details Agent<br />

Figure 4: <strong>Discovery</strong> Process Flow: Device Details (Standard)<br />

The process flow shown in Figure 4 is described below.<br />

H<br />

Helper Server<br />

3<br />

4<br />

despatch<br />

returns<br />

AssocAddress Agent<br />

H = helper<br />

1. All the agent despatch tables are active, so an insertion into the Details.despatch table<br />

automatically triggers the Details agent to discover basic device information and determine whether<br />

or not SNMP access to the device is available.<br />

2. The Details agent interrogates the network through the Helper Server. Requests are cached to reduce<br />

the number of times that the helpers (represented by the letter H in Figure 4) must interrogate the<br />

network directly.<br />

3. The information retrieved from the network is returned to the Details.returns table.<br />

4. The information in the Details.returns table is passed to the despatch table of the<br />

Associated Address (AssocAddress) agent for processing.<br />

27


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

Discovering Device Details (Context-Sensitive)<br />

28<br />

Figure 5 shows how device details are discovered in a context-sensitive discovery. See Context-Sensitive<br />

<strong>Discovery</strong> on page 33 for more information on context sensitivity in discovery.<br />

1<br />

H<br />

despatch<br />

returns<br />

Details Agent<br />

Network<br />

2<br />

Figure 5: <strong>Discovery</strong> Process Flow: Device Details (Context-Sensitive)<br />

The process flow shown in Figure 5 is described below.<br />

H<br />

Helper Server<br />

3<br />

4<br />

despatch<br />

returns<br />

Context Agents<br />

H = helper<br />

despatch<br />

returns<br />

AssocAddress Agent<br />

1. All the agent despatch tables are active, so an insertion into the Details.despatch table<br />

automatically triggers the Details agent to discover basic device information and determine whether<br />

or not SNMP access to the device is available.<br />

2. The Details agent interrogates the network through the Helper Server. Requests are cached to reduce<br />

the number of times that the helpers must interrogate the network directly.<br />

3. The information retrieved from the network is returned to the Details.returns table.<br />

4. The information in the Details.returns table is passed to the despatch table of the<br />

appropriate Context agent, which adds context tags.<br />

5. When the Context agent has finished its processing, the information is passed to the despatch<br />

table of the Associated Address (AssocAddress) agent for processing.<br />

5<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Discovering Associated Device Addresses<br />

Figure 6 shows how associated device addresses are discovered.<br />

ipToBaseName<br />

translations<br />

database<br />

The process flow shown in Figure 6 is described below.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

H<br />

Network<br />

Figure 6: <strong>Discovery</strong> Process Flow: Associated Device Addresses<br />

H<br />

Helper Server<br />

2<br />

1<br />

despatch<br />

returns<br />

3<br />

AssocAddress Agent<br />

despatch<br />

returns<br />

Agent X<br />

despatch<br />

returns H = helper<br />

Agent Y<br />

An Overview of the <strong>Discovery</strong> Process<br />

1. The Associated Address agent downloads all the <strong>IP</strong> addresses associated with the interfaces of the<br />

device under investigation using the Helper Server.<br />

2. The Associated Address agent checks the <strong>IP</strong> addresses against the registry of addresses (the<br />

translations.ipToBaseName table). The details are also added to this registry. If the device<br />

has already been discovered by another of its addresses (that is, there is already a record for this device<br />

in the translations.ipToBaseName table), its details are not sent to the discovery agents.<br />

3. Provided the device has not already been discovered, stitchers pass the details to the appropriate<br />

discovery agents, as specified in the DiscoAgents.cfg configuration file.<br />

29


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

Discovering Device Connectivity<br />

30<br />

Figure 7 shows how device connectivity is discovered, as well as how devices are discovered recursively.<br />

despatch<br />

returns<br />

Agent X<br />

2<br />

1<br />

Figure 7: <strong>Discovery</strong> Process Flow: Device Connectivity<br />

H<br />

Network<br />

The process flow shown in Figure 7 is described below.<br />

H<br />

Helper Server<br />

despatch<br />

returns<br />

pending<br />

processing<br />

Finders database<br />

1<br />

2<br />

despatch<br />

returns<br />

Agent Y<br />

H = helper<br />

1. Inserting information into the despatch table of an agent triggers an attempt by that agent to<br />

discover connectivity information about that device. The discovery agents set up a Transmission<br />

Control Protocol (TCP) socket-based communication link with the Helper Server and request the<br />

appropriate connectivity information.<br />

2. The addresses of the remote neighbors of the device, as well as the subnet address(es) of the device, are<br />

passed by a stitcher to the finders to be discovered. These addresses may or may not exist, and they<br />

may or may not be in the discovery scope, so they must go through the discovery process from the<br />

beginning.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Creating the Topology<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

An Overview of the <strong>Discovery</strong> Process<br />

Figure 8 shows a simplified data flow for the creation of the topology from the raw data returned by the<br />

discovery agents.<br />

despatch<br />

returns<br />

Agent V<br />

1<br />

FE<br />

EBNR<br />

Layer2<br />

database<br />

despatch<br />

returns<br />

Agent W<br />

Figure 8: <strong>Discovery</strong> Process Flow: Creating the Topology<br />

2<br />

FE<br />

EBNR<br />

fullTopology<br />

database<br />

despatch<br />

returns<br />

Agent X<br />

3 4<br />

EBN<br />

scratchTopology<br />

database<br />

Layer3<br />

database<br />

despatch<br />

returns<br />

Agent Y<br />

1. After all the discovery agents have finished, and the discovery enters the processing phase, special data<br />

processing stitchers interact with the discovery agent databases to produce temporary network<br />

topologies, for example, a layer 2 topology or a layer 3 topology. These topologies have separate tables<br />

for device information (EntityByName) and connectivity information (EntityByNeighbor).<br />

2. When all the discovery agents have finished their tasks (and all the appropriate temporary topologies<br />

have been created), another set of stitchers begin combining the temporary network topologies. A<br />

single topology is now generated. The workingEntities.FinalEntity table holds device<br />

information for the topology while the fullTopology.EntityByNeighbor table holds<br />

connectivity information.<br />

2<br />

FE<br />

EBNR<br />

MODEL<br />

1<br />

31


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

32<br />

3. When the fullTopology database is complete, a set of specialized topology stitchers work on the<br />

topology to deduce and create the containment model. The default containment model is based on<br />

physical containment and VLAN membership, and is stored in the<br />

workingEntities.FinalEntity table. Connectivity, containment and device information<br />

are now merged in the scratchTopology database. By default, this topology is sent straight to<br />

MODEL.<br />

4. MODEL instantiates each network element (subject to the instantiation filter) and sends the<br />

topology to other components as required. For more information on MODEL and the instantiation<br />

filter, see Chapter 13: Accessing Topology Data in MODEL on page 355.<br />

Configurable <strong>Discovery</strong> Data Flow<br />

The discovery process data flow is user-configurable. Stitchers control the movement of data between<br />

databases. You can therefore customize the discovery process to suit your own needs by changing the way in<br />

which the stitchers are triggered and operate.<br />

Stitcher and Agent Triggers<br />

You can modify the data flow by changing the criteria that trigger the deployment of the stitchers and<br />

discovery agents, by modifying the stitchers, and, if necessary, by modifying the agent definitions. Some<br />

typical triggers are:<br />

Data being inserted into a specific database table<br />

A stitcher or discovery agent completing its operation<br />

The end of a discovery phase<br />

Any changes you make are automatically picked up by DISCO during its periodic scan of the agent and<br />

stitcher files (the scan frequency is determined by the entry in the disco.config database). On<br />

detecting changes, DISCO modifies its agent and stitcher definitions databases accordingly, and applies the<br />

changes to the next discovery cycle.<br />

For more details about the stitchers and the stitcher language, see Appendix C: Stitchers and Stitcher<br />

Language on page 517.<br />

On-Demand Stitchers<br />

Stitchers can be started on demand. If you insert a stitcher into the stitchers.actions database,<br />

DISCO automatically runs the stitcher. This means that the discovery cycle can be started at any point, and<br />

further actions can be configured to start when the stitcher completes. For details of the<br />

stitchers.actions database, see Table A25 stitchers.actions Database Table Schema on page 453.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Context-Sensitive <strong>Discovery</strong><br />

!<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

An Overview of the <strong>Discovery</strong> Process<br />

If you have devices that you need to discover such as SMS devices, MPLS Edge devices, or other devices with<br />

virtual routers, you must run a context-sensitive discovery. Context-sensitive discovery ensures correct<br />

representation of virtual routers. Always check that your particular device type is supported for discovery.<br />

In a context-sensitive discovery, information about a device is passed from the returns table of the Details<br />

agent to the despatch table of the relevant Context agent.<br />

The Context agents use the filters in the .agnt files of the agents to determine which devices to process.<br />

This is true for all discovery agents. If the device is not of a type which supports virtual routers, that is, does<br />

not need context-sensitive processing, it is passed directly to the Associated Address agent.<br />

Warning: Enabling a context-sensitive discovery automatically enables all the Context agents. Disabling a<br />

context-sensitive discovery automatically disables all the Context agents. You should not manually enable or<br />

disable Context agents, either through the configuration files or through the Network <strong>Discovery</strong> GUI.<br />

To enable a context-sensitive discovery, appended the following insert to the DiscoSchema.cfg file:<br />

insert into disco.config<br />

(<br />

m_UseContext<br />

)<br />

values<br />

(<br />

1<br />

)<br />

Inserting the value 0 disables the context-sensitive discovery.<br />

33


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

1.7 Restricting the <strong>Discovery</strong> and Defining Exceptions<br />

34<br />

You can specify discovery exceptions. Discovered devices can be filtered by making entries to the tables of<br />

the scope database. The scope database is created in the DiscoSchema.cfg configuration file.<br />

Inserts into this database should be defined in the DiscoScope.cfg configuration file.<br />

The tables of the scope database are:<br />

scope.zones<br />

scope.detectionFilter<br />

scope.instantiateFilter<br />

The scope.zones table defines the scope of the discovery, either including or excluding areas of the<br />

network. Devices outside the scope are not passed to the Details agent, that is, these devices are not<br />

discovered and SNMP access is not attempted.<br />

The scope.detectionFilter table restricts the devices that are sent to the discovery agents. Only<br />

devices that match the filter are passed to the discovery agents for interface discovery. Devices that do not<br />

match the filter are passed to the Details agent, but no interfaces are discovered and the device is not passed<br />

to the discovery agents. This filter could be used to restrict SNMP access to a device.<br />

The scope.instantiateFilter table restricts the display of discovered devices. Only devices that<br />

match any filter that is specified are instantiated, although devices that do not match the filter are still<br />

discovered.<br />

For information on setting the scope of discovery, see Scoping a <strong>Discovery</strong> on page 207.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


1.8 <strong>Discovery</strong> Stages and Phases<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

<strong>Discovery</strong> Stages and Phases<br />

This section describes how the discovery is divided into stages. The stages are subdivided into phases.<br />

The discovery process can be divided into two stages—data collection and data processing.<br />

Data Collection Stage<br />

The data collection stage involves interrogating the network for device information to produce a network<br />

topology. DISCO uses the finders, agents and helpers during the data collection stage. The data collection<br />

stage can be further subdivided into a number of phases, as explained below.<br />

Data Collection Phase One<br />

In the first phase of the discovery, finders identify all the devices that exist on the network. Generally, a phase<br />

can only be completed when all the launched processes have completed their operation. However, although<br />

it may be desirable to wait until all devices have been discovered by the finders before proceeding to phase<br />

two, it is inefficient to hold back the discovery process by waiting indefinitely. Phase one therefore completes<br />

when the find rate drops below a certain level, determined by either:<br />

The rate at which devices are being discovered dropping below the threshold specified by<br />

disco.config.m_AvgeFindPeriod.<br />

No devices being discovered for the amount of time specified in<br />

disco.config.m_NothingFndPeriod.<br />

Agents in Data Collection Phase One<br />

Some agents return data that can be used to find other devices, for example, the <strong>IP</strong> address of remote<br />

neighbors, or the subnet within which a local neighbor exists. The Feedback stitcher can send this<br />

information to the Ping finder for inclusion in the discovery, but because of the blackout state any agent<br />

involved in this process would have to be run in phase one in order for devices to be discovered in the current<br />

discovery cycle.<br />

Phase one therefore usually involves the Switch discovery agents downloading all VLAN and interface<br />

information.<br />

The Blackout State<br />

After phase one, the discovery enters the blackout state. The finders have discovered the existence of a<br />

pre-determined majority of devices on the network. Any new device addresses discovered in the blackout<br />

state, either by the finders or recursively by a discovery agent, are put into the finders.pending<br />

database table.<br />

35


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

36<br />

Devices in the finders.pending database table are processed in the next discovery. If there are devices<br />

in the finders.pending database table, the next discovery starts as soon as the current discovery<br />

finishes.<br />

Data Collection Phase Two<br />

When the criteria for the completion of phase one have been fulfilled, phase two begins. In order to map<br />

layers two and three of the OSI model, the ARP Cache discovery agent populates the Helper Server with<br />

ARP data, specifically, a complete list of device <strong>IP</strong> address to MAC address resolution.<br />

Completion Criteria<br />

For a transition to occur from phase two to phase three, the processes from phase two must have completed<br />

their operation. An agent is deemed to have finished once all entities in its despatch table are also in its<br />

returns table.<br />

The agents are multithread, however, and records of discovered devices passed to the agents are tagged with<br />

a certain phase. Consequently, at any given time an agent can be processing devices in two separate phases.<br />

If any action that should have occurred in phase two is detected after phase three has begun, phase three<br />

continues while the agent runs through phase two processing.<br />

Data Collection Phase Three<br />

By phase three, the discovery process has full knowledge of the devices that exist within the network<br />

(acquired from phase one) and access to full <strong>IP</strong> address to MAC address mappings for all devices in the<br />

Helper Server (acquired from phase two). The Switch agents can now proceed to download all the forward<br />

database table information of the network switches whilst pinging all devices to confirm the accuracy of the<br />

contents of the forward database tables.<br />

When phase three has finished, which is signified by the completion of all processes scheduled to run in the<br />

phase, the discovery is ready to proceed from the data collection stage to the data processing stage, where all<br />

the connectivity information is knitted together to form a network topology.<br />

The Impact of the Stages and Phases Approach on DISCO Processes<br />

The division of the data collection stage into phases affects all the processes involved in the discovery and<br />

network topology deduction, because the phases are processed in order. Any given phase cannot begin until<br />

the criteria for completion of the previous phase have been met.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

<strong>Discovery</strong> Stages and Phases<br />

All the processes of DISCO must therefore have an associated phase (or phases) in which they are allowed<br />

to operate. Thus, whilst the finders are typically configured to run through all phases, you might want to<br />

configure certain discovery agents to operate only within a specific phase(s). The flexibility of DISCO allows<br />

you to have processes that are intelligent enough to behave differently when they operate within different<br />

phases, and can pass control to other processes or stop operation until the start of their next operational<br />

phase.<br />

Data Processing Stage<br />

Topology deduction takes place during the data processing stage, as the information from the data collection<br />

stage is analyzed, interpreted and processed by the stitchers. The culmination of the data processing stage is<br />

the production of the containment model.<br />

The two stages usually overlap, because the stitchers can be configured to begin processing connectivity<br />

information from different discovery agents before the main stitching operation begins.<br />

Advantages of Staged <strong>Discovery</strong><br />

The following examples illustrate why it is advantageous to apply a staged and phased approach to discovery.<br />

Example 1: Switch Connectivity<br />

In determining the true connectivity of some devices, it is sometimes necessary for the discovery agent to<br />

know all the devices that exist before requesting particular Management Information Base (MIB) variable(s),<br />

especially if the requested information is of a transient nature.<br />

A good example is when the layer 2 agents discover connectivity between Ethernet switches. Ethernet<br />

switches have forward database tables that expire over time. One technique that ensures that a switch has a<br />

fully populated forward database table at the time of interrogation, is to ping all devices associated with the<br />

switch.<br />

You would therefore configure the Switch discovery agents to perform some other processing in data<br />

collection phase one. Once they receive the signal that phase one has been completed (that is, all devices have<br />

been found) they can commence phase two operations. For example, they could ping all devices within the<br />

discovery domain whilst downloading the forward database tables for all switches.<br />

37


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

38<br />

Example 2: Mapping Subnet Boundaries<br />

One apparent limitation of configuring individual discovery agents to make individual ARP requests directly<br />

from the Helper Server is that the ARP helper cannot run simultaneously on multiple subnets unless it is<br />

specifically configured to do so. One way of resolving this problem is by using a special ARP Cache discovery<br />

agent that imitates a generic discovery agent (in the sense that entities can be sent to it) but that is also able<br />

to map boundaries or different layers of the OSI model.<br />

The ARP Cache discovery agent can inquire about ARP caches that exist on routers. It uses this information<br />

to populate the ARP helper database within the Helper Server and build up full device <strong>IP</strong> address to MAC<br />

address mapping without having to rely on the ARP helper.<br />

This approach could be applied when using Switch discovery agents that need to perform <strong>IP</strong> address to MAC<br />

address resolution before they can commence operation. Following the example above, you could configure<br />

your discovery data collection stage to have three phases:<br />

Phase one: Find all devices that exist on the network.<br />

Phase two: Use the ARP Cache discovery agent to populate the Helper Server with full <strong>IP</strong> address to<br />

MAC address mappings.<br />

Phase three: Ping all devices and invoke the Switch discovery agents by downloading the forward<br />

database tables for all switches in the network, using the <strong>IP</strong> address to MAC address mappings<br />

determined in phase two.<br />

Example 3: Multiphase <strong>Discovery</strong> Agents<br />

Another possible consequence of dividing the data collection stage into phases is that you can configure the<br />

discovery agents to perform different operations within different phases.<br />

Although a discovery agent is programmed to commence operation in phase two, it could also conduct some<br />

other operation in phase one. This is because the end of phase one only signifies that all devices have been<br />

nominally discovered. The agent could be configured to perform other actions such as downloading<br />

interfaces, issuing Telnet requests, or downloading other MIB variables during phase one. Only when phase<br />

two has commenced does the agent begin to perform processing instructions specific to phase two.<br />

It is good practice to configure the discovery to occur over multiple phases, to ensure maximum accuracy of<br />

the deduced topology.<br />

Criteria for Multiphasing<br />

The main criterion for configuring a discovery that has multiple phases is an assessment of the requirements<br />

of the different operations that need to be performed during the discovery process.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

<strong>Discovery</strong> Stages and Phases<br />

Example three above suggests that Ethernet-based discovery agents require at least two phases. It is possible<br />

to have discovery agents that can operate in any phase.<br />

Managing the Phases<br />

The different phases of the discovery data collection stage are managed by an internal phase manager that is<br />

responsible for reading the maximum overall phase number and calculating the total number of phases as<br />

soon as all the discovery agent and stitcher definition files are loaded. The phase manager is also responsible<br />

for calculating the phase and process dependencies, that is, which discovery agents are scheduled to run in<br />

which phases.<br />

The phase manager also monitors the processes running during the phases. When the phase manager detects<br />

that all the processes for the current phase have completed, it sends a signal indicating phase completion for<br />

all the processes that are waiting to be launched in the next phase.<br />

The Effect of <strong>Discovery</strong> Multiphasing on Network Traffic<br />

One of the main benefits of multiphasing is a reduction in network traffic. Since certain similar types of<br />

network request are grouped together in phases, data can be cached in the Helper Server to provide an<br />

efficient means of reducing network load. The Helper Server is the intermediary between the discovery<br />

agents and the network, and can amalgamate multiple pings of the same device into one block so that they<br />

are resolved into one actual ping.<br />

The Helper Server also has a request pool, which ensures that only a certain number of requests are handled<br />

simultaneously. The request pool ensures the Helper Server does not overload the network. The Helper<br />

Server is introduced and explained in detail in The <strong>Discovery</strong> Helper System on page 285.<br />

39


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

1.9 After the First <strong>Discovery</strong>: Rediscovery<br />

40<br />

When the data collection and processing stages of the first discovery have completed, and the network<br />

topology has been sent to MODEL, DISCO adopts a reactive state, ready to conduct a rediscovery if<br />

necessary. DISCO can be configured to perform either a full rediscovery of the network or a partial<br />

rediscovery limited to a particular subnet.<br />

During rediscovery the overall operational stages of DISCO (as described in the previous sections of this<br />

chapter) remain the same, and DISCO adheres to the configured operational data flow. However, while in<br />

this stage DISCO is reactive, listening for events that prompt it to initiate a rediscovery of a particular subnet<br />

or device.<br />

The receipt of a trap from a device within the network is one example of an event that can trigger a<br />

rediscovery. In this instance you would configure the data flow so that the receipt of a trap by the Trap finder<br />

prompts DISCO to assess whether a full or partial rediscovery should be conducted.<br />

Conducting a Full or Partial Rediscovery<br />

Once a discovery has been completed, DISCO enters rediscovery mode, in which the discovery of the<br />

existence of new devices results in updates to the network topology model. One advantage of the fact that<br />

the discovery data flow is fully configurable is that by modifying the stitchers you can configure the way in<br />

which DISCO treats devices that are found when in the rediscovery mode.<br />

By default, when the system is in rediscovery mode and either a new device is found or an existing device<br />

changes, the device is rediscovered. The stitchers ensure that the device is only rediscovered once and also<br />

check that the change has not caused the relationship of the device with its neighbors to change. If necessary,<br />

the neighbors of the device are also rediscovered (although, as explained on page 43, the rediscovery process<br />

initiates a full rediscovery if the number of devices needing to be rediscovered as a result of relationship<br />

changes exceeds a certain limit).<br />

The following sections describe this process in more detail.<br />

Determining the Current <strong>Discovery</strong> Mode<br />

You can determine the current mode of DISCO by querying the disco.status table. If<br />

disco.status.m_<strong>Discovery</strong>Mode=1, DISCO is in rediscovery mode.<br />

An example query of the disco.status table is given in Using the OQL Service Provider on page 170.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

After the First <strong>Discovery</strong>: Rediscovery<br />

By default, DISCO adopts a reactive mode when m_<strong>Discovery</strong>Mode=1. If the finders find a new<br />

device, DISCO determines whether the device is in scope and whether it warrants a full or partial network<br />

rediscovery. You can configure the way DISCO determines whether to conduct a full or partial rediscovery<br />

by modifying the FnderRetProcessing.stch stitcher, which handles the processing of devices<br />

placed in the finders.returns table. The process flow of the FnderRetProcessing.stch<br />

stitcher is described in Process Flow of the FnderRetProcessing Stitcher on page 41.<br />

Finding New Devices<br />

In order to find new devices at any point in the discovery, the finders must be active. Since the network has<br />

already been discovered, the most practical finder to deploy during rediscovery is the Trap finder, which<br />

listens for traps (messages that indicate a change in the state of the device).<br />

In order to run the Trap finder you must either configure DISCO (prior to the discovery) so that it starts<br />

the Trap finder as a managed process, or alternatively you can start the Trap finder at any time within the<br />

same domain as DISCO using the ncp_df_trap command as shown below, entering your domain name<br />

where NCOMS is specified.<br />

ncp_df_trap -domain NCOMS<br />

Once the Trap finder has started, it begins to listen for traps. If any traps are received from a network device,<br />

the Trap finder makes an insert into the finders.returns database table of DISCO.<br />

Process Flow of the FnderRetProcessing Stitcher<br />

In order to configure the way in which DISCO handles newly discovered devices, you can edit the<br />

FnderRetProcessing.stch stitcher, which is the stitcher responsible for processing entries placed<br />

into the finders.returns table. The default process flow of the FnderRetProcessing.stch<br />

stitcher is:<br />

When an entry is placed in the finders.returns table, the stitcher checks whether the device is<br />

in the scope of the discovery. If the device is not in scope, it is ignored.<br />

If the device is in scope and disco.status.m_<strong>Discovery</strong>Mode=0, that is, DISCO is in<br />

discovery mode, the stitcher moves the device details to either the finders.pending table to be<br />

processed later (if the discovery is in the blackout state) or the finders.processing table to be<br />

processed now.<br />

41


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

42<br />

If the device is in scope and disco.status.m_<strong>Discovery</strong>Mode=1, that is, DISCO is in<br />

rediscovery mode, the stitcher determines whether the device needs to be rediscovered. By default, the<br />

stitcher rediscovers:<br />

– Devices found by the Trap finder where the trap type is either a cold start, warm start or link up.<br />

– Devices for which finders.returns.m_Creator='Rediscovery'. There is no<br />

Rediscovery finder, but this column is set to 'Rediscovery' by other stitchers, such as<br />

ProcRemoteConns.stch, to indicate that as a result of rediscovering other devices this<br />

device needs to be rediscovered.<br />

– Any newly found device that is in scope and has not already been discovered.<br />

If necessary you can alter the section of the FnderRetProcessing.stch stitcher that performs<br />

the above checks in order to configure when rediscovery of a device takes place, although this<br />

configuration adjustment must be undertaken by advanced users only.<br />

If a device that has already been discovered is to be rediscovered, the stitcher refreshes the information<br />

held in the Helper Server that relates to that device.<br />

For all devices to be rediscovered, the stitcher removes the old entries for that device from the<br />

finders.processing, Details.returns and Details.despatch tables, copying<br />

the old information to the rediscoveryStore.dataLibrary table for comparison<br />

purposes.<br />

The stitcher then places the details of the device to be rediscovered into the<br />

finders.processing table and the FnderProcToDetailsDesp.stch stitcher moves<br />

the device details to the Details agent.<br />

Processing Information from the <strong>Discovery</strong> Agents<br />

When the entity that is being rediscovered has been processed by the Details agent, and the details are placed<br />

in the Details.returns table, the DetailsRetProcessing.stch stitcher is run. This stitcher<br />

compares the old data in the rediscoveryStore.dataLibrary table with the new data. By<br />

default, the rediscovery continues from this point, although if necessary, you can edit this stitcher so that,<br />

for example, rediscovery only continues when SNMP access is available.<br />

The data is processed by the AssocAddress agent and then by the appropriate agents (according to the<br />

configured discovery process flow) and returned to their returns tables.<br />

A full discovery would combine the information from the discovery agent returns tables to produce the<br />

topology. However, in a rediscovery the information must be checked to determine whether the<br />

relationships between devices have changed as a result of the new information.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

After the First <strong>Discovery</strong>: Rediscovery<br />

For example, if the device being rediscovered, device A, was connected to device B before the rediscovery,<br />

but is now connected to a third device, device C, then both B and C must also be rediscovered because their<br />

relationship has changed. The AgentRetProcessing.stch stitcher is responsible for determining<br />

the relationships between devices and the comparison is performed by ProcRemoteConns.stch.<br />

Switches and hubs need to be rediscovered differently to routers as the connectivity information they provide<br />

is indirect instead of direct. Any entity that also needs to be rediscovered as a consequence of rediscovery is<br />

inserted back into the finders.returns table with m_Creator='Rediscovery'.<br />

Full Rediscoveries<br />

Comparing the current relationship between devices to their previous relationship and rediscovering all the<br />

devices whose relationships have changed can sometimes become circular, so the discovery process includes<br />

a check to prevent this happening. If the ratio of entities that have been compared to the entities that need<br />

to be rediscovered exceeds the percentage specified in the disco.config.m_PendingPerCent<br />

column, then DISCO stops rediscovering individual devices and initiates a full network discovery.<br />

Additionally, the fact that all rediscovered entities are recorded in the<br />

rediscoveryStore.rediscoveredEntities table means that a given entity can only be<br />

rediscovered once.<br />

Rediscovery Completion<br />

When all the entities that need to be rediscovered have been processed, the topology layers are rebuilt by the<br />

FinalPhase.stch stitcher. This stitcher also clears the rediscoveryStore database, making it<br />

ready for the next rediscovery.<br />

It is important to note that DISCO might go through many discovery cycles during rediscovery before the<br />

topology is rebuilt. DISCO only rebuilds the topology when there are no entities needing to be rediscovered.<br />

Option to Rebuild Topology Layers<br />

You can specify whether or not to rebuild the topology layers following a partial rediscovery. Using this<br />

option, you can greatly increase the speed of partial rediscovery.<br />

If you specify that the topology layers should not be rebuilt following partial rediscovery, the result is<br />

that new devices are added to the topology much faster than they would be if the topology layers are<br />

rebuilt; however, the resulting topology may not be complete. Connectivity associated with the newly<br />

discovered device is not fully reflected in the topology. Topology layers are fully rebuilt when a full<br />

rediscovery is run.<br />

If you specify that topology layers should be rebuilt following partial rediscovery, the result is an<br />

accurate topology showing all connectivity. However the process of adding new devices takes longer.<br />

43


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

44<br />

Use the m_RebuildLayers field in the disco.config table to specify whether or not to rebuild<br />

topology layers following partial rediscovery. You set this value as follows:<br />

If disco.config.m_RebuildLayers=0, then following partial rediscovery, topology layers<br />

stitchers are not run. The result is a much quicker partial discovery: however, connectivity associated<br />

with the newly discovered device is not fully reflected in the topology.<br />

If disco.config.m_RebuildLayers=1, then following partial rediscovery, topology layers<br />

stitchers are run. Partial rediscovery takes longer but results in a complete topology.<br />

For more information on the disco.config table, see The config Table on page 427.<br />

Forcing Rediscoveries of Particular Devices<br />

Sometimes you may know that one or more devices have had their configuration changed, and may want to<br />

rediscover them regardless of whether the system has detected the change from traps sent by the devices.<br />

Forcing a rediscovery can be achieved in two ways:<br />

You can use the Network <strong>Discovery</strong> GUI to specify individual devices or complete subnets to be<br />

rediscovered, as described in Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI on<br />

page 85.<br />

You can make inserts to the finders.rediscovery table using ncp_oql, specifying the <strong>IP</strong><br />

address or subnet to be rediscovered.<br />

Example Forced Rediscovery<br />

To force a rediscovery of the device with <strong>IP</strong> address 192.168.1.2, first start the OQL Service Provider<br />

using the following command:<br />

ncp_oql -domain NCOMS -service Disco<br />

Having logged into the OQL provider, execute the following query:<br />

insert into finders.rediscovery (m_Address, m_RequestType) values ("192.168.1.2", 1);<br />

When discovery of a device is forced like this, ncp_disco immediately passes it to the Ping finder to<br />

confirm it exists, and, if it does, triggers the appropriate agents to re-analyze it. If the connections from the<br />

device have changed, neighboring devices may also be rediscovered.<br />

Note: Forced rediscoveries are not intended as a means of removing devices from the discovery if they have<br />

been removed from the network. A network management application cannot assume that a device that is no<br />

longer accessible has been deliberately removed from the network. Forced rediscoveries should only be used<br />

against devices that are operational but whose configuration has been changed.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Removing a Device from Your Network<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

After the First <strong>Discovery</strong>: Rediscovery<br />

The best way to deal with a device that is known to be scheduled for permanent removal from the network<br />

is as follows:<br />

1. Suspend polling against the device, as described in the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> RCA and Monitoring<br />

<strong>Guide</strong>. This prevents any spurious alerts being raised against the device by the monitoring system as<br />

the device is powered off.<br />

2. Physically remove the device from the network.<br />

3. Immediately before the next full network discovery, set the linger time for the record of the device in<br />

ncp_model to 0.<br />

Setting the Linger Time for a Device<br />

The value of the LingerTime field indicates how many discoveries a particular device can fail to be found<br />

in before it is assumed to have been removed from the network and its record is removed from the topology.<br />

Setting the LingerTime field to zero ensures that when the device is not found in the next discovery, its<br />

record is immediately removed from the topology. To set the LingerTime field to zero:<br />

1. Enter a command similar to the following to start the OQL Service Provider:<br />

ncp_oql -domain NCOMS -service Model<br />

2. Update the LingerTime field in the master.entityByName table for all entities that<br />

represent the device. For example, if the device is called core-router.micromuse.com, enter<br />

the following command:<br />

update master.entityByName set LingerTime = 0 where EntityName like<br />

'core-router.micromuse.com';<br />

45


Chapter 1: Introduction to <strong>Discovery</strong> with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

46<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


2. CTRL.fm July 6, 2005<br />

Chapter 2: Process Control with CTRL<br />

This chapter explains how to configure the domain process controller to manage a single domain or multiple<br />

domains.<br />

This chapter contains the following sections:<br />

Introducing CTRL on page 48<br />

Configuring CTRL on page 49<br />

Starting CTRL on page 59<br />

Querying the Databases of CTRL on page 60<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 47


Chapter 2: Process Control with CTRL<br />

2.1 Introducing CTRL<br />

48<br />

CTRL (ncp_ctrl) is the master process controller that launches and manages <strong>Precision</strong> Server<br />

components. It also launches the <strong>Precision</strong> Server components in the appropriate order, in line with the<br />

configured process dependencies.<br />

CTRL is the only <strong>Precision</strong> Server component that can start another process. It is also used by other<br />

<strong>Precision</strong> Server processes that need to launch and manage their subprocesses. For example, MONITOR<br />

launches the Polling agents by sending an Object Query Language (OQL) insert to the tables of the CTRL<br />

database.<br />

The CTRL Database<br />

CTRL uses the services database to manage processes, as follows:<br />

Inserting a process into the appropriate table of this database causes that process to be executed.<br />

Deleting a process from the appropriate table of this database causes the process to be terminated.<br />

You can use CTRL to specify which <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> processes to start event if CTRL is not yet<br />

running. This works as follows:<br />

If CTRL is not yet running, you can specify the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> components to be run by<br />

appending OQL inserts to the CtrlServices.cfg configuration file.<br />

If CTRL is running, specify the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> components to be run by logging into the<br />

CTRL database using the OQL Service Provider and issuing an insert into the appropriate table of<br />

the services database.<br />

You can also configure CTRL by choosing the automatic configuration option during the installation<br />

process. For more information on the installation process, see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Installation and<br />

Deployment <strong>Guide</strong>.<br />

The schema of the services database is given in The services Database Schema on page 64.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


2.2 Configuring CTRL<br />

This section describes how to set up CTRL to start and manage <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> components.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring CTRL<br />

Although it is possible to manually launch the individual <strong>Precision</strong> Server components from the command<br />

line, it is more convenient to run a <strong>Precision</strong> Server domain using a single domain controller, which starts<br />

the individual processes as and when they are needed.<br />

CTRL has two configuration files:<br />

CtrlSchema.cfg contains the definitions for the CTRL databases. You should not need to edit<br />

this file.<br />

CtrlServices.cfg contains any necessary inserts into the CTRL databases to tell CTRL which<br />

components to start and in what order.<br />

In order to configure CTRL to launch and manage the appropriate processes, you must append OQL inserts<br />

to the CTRL configuration file, CtrlServices.cfg. CTRL starts two types of process:<br />

Managed processes for which CTRL is fully responsible. CTRL not only starts and stops these<br />

processes, but also keeps track of their activities and restarts them if they die.<br />

Unmanaged processes that CTRL is only responsible for starting or stopping. CTRL is not responsible<br />

for tracking unmanaged processes and makes no attempt to restart these processes if they die.<br />

Although it is entirely up to you to determine which processes are managed and which are unmanaged, it is<br />

recommended that the core <strong>Precision</strong> Server components are handled as managed processes. Only processes<br />

such as scripts should be launched as unmanaged processes.<br />

Note: CTRL must be used when running <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> in failover configuration, as described in the<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Monitoring and RCA <strong>Guide</strong>.<br />

Setting up a Single <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Domain<br />

Micromuse recommends using one instance of CTRL to run and manage each domain. To set up a single<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> domain:<br />

1. Back up your CtrlServices.cfg file.<br />

2. Save a copy of the CtrlServices.cfg file with your domain name appended to the filename,<br />

for example, CtrlServices.MASTER.cfg.<br />

3. Edit the CtrlServices.MASTER.cfg file following the instructions in this chapter.<br />

49


Chapter 2: Process Control with CTRL<br />

50<br />

4. Make any other configuration adjustments that you require. For example, you can configure your<br />

discovery (see Chapter 6: Network <strong>Discovery</strong> from the Command Line on page 175) and save your<br />

discovery configuration files with MASTER appended to the filename as above. If you configure your<br />

discovery using the <strong>Discovery</strong> <strong>Configuration</strong> GUI, your configuration files are automatically saved<br />

with the domain name in which the GUI was started appended to the filenames.<br />

5. Start CTRL using the following command:<br />

ncp_ctrl -domain MASTER &<br />

6. CTRL now starts the required components in the domain MASTER in the order you specified.<br />

Setting up Multiple <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Domains<br />

Micromuse recommends using one instance of CTRL to run and manage each domain. You can run several<br />

instances of CTRL simultaneously if required, each one managing a different domain. To set up two<br />

domains:<br />

1. Back up your CtrlServices.cfg file.<br />

2. Save a copy of the CtrlServices.cfg file with your first domain name appended to the<br />

filename, for example, CtrlServices.DOMAIN1.cfg.<br />

3. Edit the CtrlServices.DOMAIN1.cfg file following the instructions in this chapter.<br />

4. Make any other configuration adjustments that you require. For example, you can configure your<br />

discovery (see Chapter 6: Network <strong>Discovery</strong> from the Command Line on page 175) and save your<br />

discovery configuration files with DOMAIN1 appended to the filename as above. If you configure<br />

your discovery using the <strong>Discovery</strong> <strong>Configuration</strong> GUI, your configuration files are automatically<br />

saved with the domain name in which the GUI was started appended to the filenames.<br />

5. Start CTRL using the following command:<br />

ncp_ctrl -DOMAIN1 &<br />

6. CTRL now starts the required components in the domain DOMAIN1 in the order you specified.<br />

7. Save another copy of the CtrlServices.cfg file with your second domain name appended to<br />

the filename, for example, CtrlServices.DOMAIN2.cfg.<br />

8. Edit the CtrlServices.DOMAIN2.cfg file following the instructions in this chapter.<br />

9. Make any other configuration adjustments that you require, as in step 4.<br />

10. Start CTRL using the following command:<br />

ncp_ctrl -domain DOMAIN2 &<br />

11. CTRL now starts the required components in the domain DOMAIN2 in the order you specified.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring CTRL<br />

You now have two domains running separately. You can start, stop, or configure one domain without<br />

affecting the other.<br />

Note: When creating a new domain you must configure ncp_model_to_mysql to migrate the<br />

topology into the MySQL database used by Topoviz. During this configuration you are asked to provide the<br />

names of the ObjectServers that should be associated with the domain. It is not possible to associate a single<br />

ObjectServer with multiple domains. See the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Installation and Deployment <strong>Guide</strong> for<br />

more details.<br />

Configuring <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Domains on Windows<br />

The following sections describe how to handle <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> processes as Windows services and how<br />

to set up or remove domains as Windows services.<br />

If you want to configure and control domains from a console window, follow the steps in Setting up a Single<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Domain on page 49.<br />

Handling <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Processes as Windows Services<br />

There are two different ways of running <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> processes on Windows:<br />

From a console; when a process is run from the console, it is run by the current user. If the user has<br />

restricted permissions, <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> might not function correctly. Use Windows Control<br />

Panel to check user permissions.<br />

As a service; a service is the Windows equivalent of a background process on UNIX. When<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> is installed, the installer creates services for the domain set up as part of the<br />

installation process. It is possible to install, or remove, services for additional domains by use of the<br />

ncp_install_services program. You can also start or stop services manually.<br />

The main benefit of running <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> processes as services is that an administrator can create<br />

domains and services that a standard user can start even if that user does not have adequate permissions to<br />

run the service. Another benefit is that no visible windows clutter your desktop.<br />

The main advantage of running processes from the console is that troubleshooting is easier if any problems<br />

occur.<br />

Windows services have no STDOUT or STDERR. Therefore they must always log to a file, even if a specific<br />

file has not been configured for them in CtrlServices.cfg. By default, <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

processes running as services will create log files in %NCHOME%\log\<strong>Precision</strong>, so you must not<br />

delete this directory. If you specify a different log file in CtrlServices.cfg then that specified file will<br />

be used instead.<br />

51


Chapter 2: Process Control with CTRL<br />

52<br />

Note: NCHOME is the environment variable that contains the path to the <strong>Netcool</strong> Suite home directory. For<br />

information on how this environment variable varies with platform, see Operating System Considerations on<br />

page 10.<br />

Running Windows Services as a Specific User<br />

When a process is run as a service, it is run by the user configured to run that service, regardless of which<br />

user starts it. The default user for services is "LocalSystem", which Task Manager displays as "SYSTEM".<br />

To change the default Service user, select the service from the Windows Services window<br />

(Start Menu→Control Panel→Administrative Tools→Services) and modify its properties to include the<br />

revised user and password. You can also install all services for a domain to run as a specific user, using the<br />

following command:<br />

ncp_install_services -domain MASTER -username "MICROMUSE\admin"<br />

All domain services for MASTER will run under user "admin", as opposed to the default "LocalSystem".<br />

You must type in the password for the "admin" user before <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> creates the services. You<br />

can specify the password on the command line using the -password option, but this is not recommended for<br />

security reasons.<br />

Setting Up an Additional <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Domain on Windows<br />

Micromuse recommends using one instance of CTRL to run and manage each domain. To set up an<br />

additional <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> domain using Windows services:<br />

1. Back up your CtrlServices.cfg file.<br />

2. Save a copy of the CtrlServices.cfg file with your domain name appended to the filename,<br />

for example, CtrlServices.MASTER.cfg.<br />

3. Edit the CtrlServices.cfg file following the instructions in this chapter.<br />

4. Make any other configuration adjustments that you require. For example, you can configure your<br />

discovery (see Chapter 6: Network <strong>Discovery</strong> from the Command Line on page 175) and save your<br />

discovery configuration files with MASTER appended to the filename as above. If you configure your<br />

discovery using the <strong>Discovery</strong> <strong>Configuration</strong> GUI, your configuration files are automatically saved<br />

with the domain name in which the GUI was started appended to the filenames.<br />

5. Edit the InstallServices.cfg file to include the services you want to install and any default<br />

parameters; this file uses the same format as the CtrlServices.cfg file.<br />

Note: The most frequently changed parameter is the name of the ObjectServer, but please note that<br />

when ncp_ctrl starts a service, any parameters in CtrlServices.cfg will take precedence<br />

over default service parameters.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


6. Create the domain using the command below:<br />

ncp_install_services -domain MASTER<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring CTRL<br />

7. CTRL now starts the required components for the domain MASTER in the order you specified in the<br />

CtrlServices.MASTER.cfg file.<br />

8. View the Services window (Start Menu→Control Panel→Administrative Tools→Services) to check<br />

that all the required services are installed. See Figure 9.<br />

Figure 9: Services Window Showing <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Services<br />

9. If you want <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> to start automatically each time you reboot your machine, then<br />

select "ncp_ctrl for domain MASTER" from the Services list and edit its properties so that<br />

it starts automatically. Leave all other <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> services as manual startups, as<br />

ncp_ctrl will start them when they are required.<br />

10. Start the ncp_ctrl service; ncp_ctrl will will start the other services defined in the<br />

CtrlServices.MASTER.cfg file.<br />

53


Chapter 2: Process Control with CTRL<br />

54<br />

Setting Up Multiple <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Domains on Windows<br />

Micromuse recommends using one instance of CTRL to run and manage each domain. You can run several<br />

instances of CTRL simultaneously if required, each one managing a different domain. You must set up a<br />

separate ObjectServer for each domain.<br />

To set up two domains to run as services:<br />

1. Back up your CtrlServices.cfg file for the domain you set up during installation.<br />

2. Save a copy of the CtrlServices.cfg file with your first domain name appended to the<br />

filename, for example, CtrlServices.DOMAIN1.cfg.<br />

3. Edit the CtrlServices.DOMAIN1.cfg file following the instructions in this chapter.<br />

4. Make any other configuration adjustments that you require. For example, you can configure your<br />

discovery (see Chapter 6: Network <strong>Discovery</strong> from the Command Line on page 175) and save your<br />

discovery configuration files with DOMAIN1 appended to the filename as above. If you configure<br />

your discovery using the <strong>Discovery</strong> <strong>Configuration</strong> GUI, your configuration files are automatically<br />

saved with the domain name in which the GUI was started appended to the filenames.<br />

5. Edit the InstallServices.cfg file to include the services you want to install and any default<br />

parameters; this file uses the same format as the CtrlServices.cfg file.<br />

Note: The most frequently changed parameter is the name of the ObjectServer, but please note that<br />

when ncp_ctrl starts a service, any parameters in CtrlServices.cfg will take precedence<br />

over default service parameters.<br />

6. Create the domain using the command below:<br />

ncp_install_services -domain DOMAIN1<br />

7. Use the following command to start CTRL as a console process:<br />

ncp_ctrl -DOMAIN1<br />

If you want to run ncp_ctrl as a service, start it by opening the Windows Services window (Start<br />

Menu, Control Panel, Administrative Tools, Services) and then find the service named "ncp_ctrl<br />

in domain DOMAIN1". Select the service and click on the Service Start button.<br />

8. CTRL now starts the required components in the domain DOMAIN1 in the order you specified.<br />

9. Save another copy of the CtrlServices.cfg file with your second domain name appended to<br />

the filename, for example, CtrlServices.DOMAIN2.cfg.<br />

10. Edit the CtrlServices.DOMAIN2.cfg file following the instructions in this chapter.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring CTRL<br />

11. Edit the InstallServices.cfg file to include the services you want to install and any default<br />

parameters, as in step 5.<br />

12. Create the domain using the command below:<br />

ncp_install_services -domain DOMAIN2<br />

13. Make any other configuration adjustments that you require, as in step 4.<br />

14. Use the following command to start CTRL as a console process:<br />

ncp_ctrl -domain DOMAIN2<br />

If you want to run ncp_ctrl as a service, start it by opening the Services window<br />

(Start Menu→Control Panel→Administrative Tools→Services) and then find the service named<br />

"ncp_ctrl in domain DOMAIN2". Select the service and click on the Service Start button.<br />

15. CTRL now starts the required components in the domain DOMAIN2 in the order you specified.<br />

You now have two domains running separately. You can start, stop, or configure one domain from the<br />

Services window (Start Menu→Control Panel→Administrative Tools→Services) without affecting the<br />

other.<br />

Note: When creating a new domain you must configure ncp_model_to_mysql to migrate the<br />

topology into the MySQL database used by Topoviz. During this configuration you are asked to provide the<br />

names of the ObjectServers that should be associated with the domain. It is not possible to associate a single<br />

ObjectServer with multiple domains. See the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Installation and Deployment <strong>Guide</strong> for<br />

more details.<br />

Removing <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Services on Windows<br />

To remove services for a domain (in this example, MASTER), check that the services have stopped and then<br />

use the following command:<br />

ncp_install_services -domain MASTER -remove<br />

If the individual services are subject to control by ncp_ctrl, you must stop ncp_ctrl in order to stop<br />

the services. Any attempt to stop the individual services while ncp_ctrl is still running will result in<br />

ncp_ctrl restarting them.<br />

If you uninstall <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>, the installer will only uninstall the services it created during the<br />

installation; any services for domains created subsequent to the installation will be left on your system. Use<br />

ncp_install_services to remove all such services prior to uninstalling <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>,<br />

otherwise you will be unable to remove the orphan services.<br />

55


Chapter 2: Process Control with CTRL<br />

Component Dependencies<br />

56<br />

The <strong>Precision</strong> Server components must be started in the correct order. The component dependencies are<br />

shown in Table 3.<br />

Table 3: Dependencies of the <strong>Precision</strong> Server Processes<br />

Component Binary Name Dependencies<br />

AMOS ncp_f_amos MODEL, CLASS, STORE<br />

AUTH ncp_auth No dependency<br />

CLASS ncp_class No dependency<br />

CONFIG ncp_config No dependency<br />

CTRL ncp_ctrl No dependency<br />

DISCO ncp_disco The Helper Server, CTRL<br />

<strong>Discovery</strong> <strong>Configuration</strong> Tool ncp_discoconfig AUTH, CONFIG<br />

Gateway ncp_ncogate AMOS, MODEL, <strong>Netcool</strong>/OMNIbus<br />

ObjectServer<br />

The Helper Server ncp_d_helpserv No dependency<br />

MODEL ncp_model CLASS, STORE<br />

MONITOR ncp_monitor MODEL, CLASS, PROBE, CTRL<br />

OQL Service Provider ncp_oql AUTH and the component you wish to<br />

interrogate<br />

MONITOR <strong>Configuration</strong> Tool ncp_monitorconfig AUTH, CLASS<br />

MONITOR Probe nco_p_ncpmonitor <strong>Netcool</strong>/OMNIbus ObjectServer<br />

STORE ncp_store No dependency<br />

TrapMux ncp_trapmux No dependency<br />

User <strong>Configuration</strong> Tool ncp_userconfig AUTH, CONFIG<br />

Configuring Managed Processes<br />

In order to configure a process as a managed process, you must append an Object Query Language (OQL)<br />

insert into the services.inTray table. For more information on OQL, see The Object Query Language<br />

on page 479. For the full schema of the services.inTray table, see The services Database Schema on<br />

page 64.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Example <strong>Configuration</strong> of DISCO as a Managed Process<br />

The following example configures DISCO to be launched as a managed process.<br />

insert into services.inTray<br />

(<br />

serviceName,<br />

servicePath,<br />

domainName,<br />

hostName,<br />

argList,<br />

dependsOn,<br />

retryCount,<br />

logFile<br />

)<br />

values<br />

(<br />

"ncp_disco",<br />

"$NCHOME/precision/bin",<br />

"NCOMS",<br />

"Felix",<br />

[ "-domain", "NCOMS", "-debug", "4" ],<br />

[ "ncp_d_helpserv" ],<br />

3,<br />

"$NCHOME/log/precision/disco.log"<br />

);<br />

The above insert instructs CTRL to:<br />

Launch ncp_disco as a managed process.<br />

Locate the executable in $NCHOME/precision/bin.<br />

Launch DISCO in the NCOMS domain on the host Felix.<br />

Pass the arguments "-domain NCOMS" and "-debug 4" to DISCO.<br />

Wait for the Helper Server to be active before starting DISCO.<br />

Restart DISCO a maximum of 3 times.<br />

Configuring Unmanaged Processes<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring CTRL<br />

In order to configure a process as an unmanaged process, you must append an insert into the<br />

services.unManaged table. For the full schema of the services.unManaged table, see The<br />

unManaged Table on page 66.<br />

The services.unManaged table is mainly used by other <strong>Precision</strong> Server processes to instruct<br />

CTRL to start their subprocesses. For example, DISCO instructs CTRL to start the finders, helpers and<br />

agents by sending inserts into the services.unManaged table of CTRL.<br />

57


Chapter 2: Process Control with CTRL<br />

58<br />

Example <strong>Configuration</strong> of an Unmanaged Process<br />

In order to configure a user_script located in the NCHOME/precision/scripts directory as an<br />

unmanaged process, you would append an insert similar to the following to the CtrlServices.cfg<br />

configuration file.<br />

insert into services.unmanaged<br />

(<br />

serviceName, servicePath, argList<br />

)<br />

values<br />

(<br />

"user_script",<br />

"/opt/netcool/precision/solaris2/scripts/",<br />

[ ]<br />

);<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


2.3 Starting CTRL<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Starting CTRL<br />

CTRL is started by using the following command line; optional arguments are shown enclosed in square<br />

brackets.<br />

ncp_ctrl –domain DOMAIN_NAME [ -debug DEBUG ] [ -help ] [ -latency LATENCY ]<br />

[ -logdir DIRNAME ] [ -slave ] [ -version ]<br />

Table 4: Explanation of Command Line Options<br />

Option Explanation<br />

-domain DOMAIN_NAME The name of the domain under which to run CTRL.<br />

-debug DEBUG The level of debugging output (1-4, where 4 represents the most detailed<br />

output).<br />

-help Displays the command line options. Does not start the component even if<br />

used in conjunction with other arguments.<br />

-latency LATENCY The maximum time in milliseconds (ms) that CTRL waits to connect to<br />

another <strong>Precision</strong> Server process using the messaging bus. This option is<br />

useful for large and busy networks where the default settings can cause<br />

processes to assume that there is a problem when in fact the<br />

communication delay is a result of network traffic.<br />

-logdir DIRNAME Directs log messages for each process started by CTRL to a separate file in<br />

the specified directory.<br />

-slave Indicates that this instance of CTRL is to be run in slave mode. The slave<br />

CTRL process must have the same domain name as the master CTRL<br />

process.<br />

Prerequisites for Running CTRL<br />

When running in slave mode, CTRL accepts requests from the master<br />

process to launch services. The slave mode can be used to distribute<br />

processes.<br />

-version Displays the version number of the component. Does not start the<br />

component even if used in conjunction with other arguments.<br />

CTRL is the master process and must be run before all other processes. For example, CTRL must be running<br />

in order for DISCO and MONITOR to launch their subprocesses. Provided CTRL has been configured<br />

correctly, it launches and manages the appropriate processes when their dependencies have been satisfied.<br />

59


Chapter 2: Process Control with CTRL<br />

2.4 Querying the Databases of CTRL<br />

60<br />

You can interact with the databases of CTRL by using the OQL Service Provider (ncp_oql) to manipulate<br />

entries directly. Inserting a process into the services.inTray table using the OQL Service Provider<br />

causes that process to be launched. Deleting an entry in the services.inTray table using the OQL<br />

Service Provider causes the process to be terminated.<br />

See Chapter 5: Querying <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Databases on page 165 for information on starting ncp_oql,<br />

querying databases, and exiting ncp_oql.<br />

The schema of the service database of CTRL is given after the example queries, in The services Database<br />

Schema on page 64.<br />

Logging onto the Databases of CTRL<br />

Before you can log into the databases of CTRL you must ensure that AUTH and CTRL are running for the<br />

domain that you wish to interrogate.<br />

You can log into the databases of CTRL using a command similar to the following:<br />

ncp_oql -domain NCOMS -service Ctrl -username admin<br />

Replace NCOMS and admin with your domain name and username.<br />

The following sections contain examples showing some common OQL queries.<br />

Identifying the Services That Are Configured To Run<br />

The following query returns all the services that CTRL is configured to run.<br />

|phoenix:1.> select * from services.inTray;<br />

|phoenix:2.> go<br />

{<br />

serviceId=3;<br />

serviceName='ncp_model';<br />

domainName='NCOMS';<br />

hostName='phoenix';<br />

argList=['-domain', '$domainName'];<br />

processId=7222;<br />

dependsOn=['ncp_class', 'ncp_store'];<br />

serviceState=4;<br />

retryCount=3;<br />

interval=10;<br />

}<br />

.....<br />

.....<br />

{<br />

serviceId=4;<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


serviceName='ncp_disco';<br />

domainName='NCOMS';<br />

hostName='phoenix';<br />

argList=['-domain','$domainName'];<br />

processId=7223;<br />

dependsOn=['ncp_d_helpserv'];<br />

serviceState=4;<br />

retryCount=3;<br />

interval=10;<br />

}<br />

( 4 record(s) : Transaction complete )<br />

|phoenix:1.><br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Querying the Databases of CTRL<br />

In the above example, |phoenix:1.> represents the OQL Service Provider prompt. phoenix is<br />

replaced by the appropriate value for your system, such as the host name. Every time you press the Enter<br />

key, the line counter increases by 1.<br />

Which Services Are Currently Active?<br />

The following query returns the processes that CTRL has started that are currently running (that is,<br />

processes for which services.inTray.serviceState=4).<br />

|phoenix:1.> select serviceName, domainName, processId<br />

|phoenix:2.> from services.inTray<br />

|phoenix:3.> where serviceState = 4 ;<br />

|phoenix:4.> go<br />

...........<br />

{<br />

serviceName='ncp_store';<br />

domainName='NCOMS';<br />

processId=7220;<br />

}<br />

{<br />

serviceName='ncp_model';<br />

domainName='NCOMS';<br />

processId=7222;<br />

}<br />

{<br />

serviceName='ncp_disco';<br />

domainName='NCOMS';<br />

processId=7223;<br />

}<br />

( 3 record(s) : Transaction complete )<br />

|phoenix:1.><br />

A list of the possible values of the serviceState column (and their meanings) can be found on page 66.<br />

61


Chapter 2: Process Control with CTRL<br />

62<br />

Identifying Services Currently Unmanaged<br />

Insertions into the services.unManaged table are made by other <strong>Precision</strong> Server components in<br />

order to start and stop their subprocesses; for example, DISCO uses CTRL to start the finders. The OQL<br />

query returns a list of processes that have been started by CTRL but are not managed by CTRL.<br />

|phoenix:1.><br />

|phoenix:1.> select * from services.unManaged;<br />

|phoenix:2.> go<br />

..<br />

{<br />

serviceId=6;<br />

serviceName='ncp_df_ping';<br />

servicePath='/opt/netcool/precision/Release/Solaris2/disco/bin/';<br />

argList=['-domain','NCOMS'];<br />

processId=0;<br />

serviceState=0;<br />

}<br />

{<br />

serviceId=7;<br />

serviceName='ncp_df_file';<br />

servicePath='/opt/netcool/precision/Release/Solaris2/disco/bin/';<br />

argList=['-domain','NCOMS'];<br />

processId=0;<br />

serviceState=0;<br />

}<br />

( 2 record(s) : Transaction complete )<br />

|phoenix:1.><br />

Terminating a Service with CTRL<br />

You can terminate a service that is running by deleting the record in the services.inTray table. The<br />

following example terminates ncp_model.<br />

|phoenix:1.> delete from services.inTray<br />

|phoenix:2.> where serviceName = 'ncp_model' ;<br />

|phoenix:3.> go<br />

.<br />

( 0 record(s) : Transaction complete )<br />

|phoenix:1.><br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Dynamic <strong>Configuration</strong> Changes<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Querying the Databases of CTRL<br />

Once CTRL has loaded its configuration from CtrlServices.cfg, you can amend the configuration<br />

by making insertions, deletions and updates to the records of the CTRL databases. In the following example,<br />

the record for STORE is inserted into the database, which results in the execution of the ncp_store<br />

process.<br />

|phoenix:1.> insert into services.inTray<br />

|phoenix:2.> ( serviceName, domainName,<br />

|phoenix:3.> argList, retryCount )<br />

|phoenix:4.> values<br />

|phoenix:5.> ( 'ncp_store', 'NCOMS' ,<br />

|phoenix:6.> [ '-domain', '$domainName' ],<br />

|phoenix:7.> 3<br />

|phoenix:8.> );<br />

|phoenix:9.> go<br />

.<br />

( 0 record(s) : Transaction complete )<br />

|phoenix:1.><br />

Identifying Configured Process Dependencies<br />

The following query returns the configured component process dependencies.<br />

|phoenix:1.> select serviceName, dependsOn<br />

|phoenix:2.> from services.inTray;<br />

|phoenix:3.> go<br />

.....<br />

{<br />

serviceName='ncp_auth';<br />

dependsOn=[];<br />

}<br />

{<br />

serviceName='ncp_store';<br />

dependsOn=[];<br />

}<br />

.....<br />

.....<br />

{<br />

serviceName='ncp_model';<br />

dependsOn=['ncp_class', 'ncp_store'];<br />

}<br />

{<br />

serviceName='ncp_disco';<br />

dependsOn=['ncp_d_helpserv'];<br />

}<br />

( 5 record(s) : Transaction complete )<br />

|phoenix:1.><br />

63


Chapter 2: Process Control with CTRL<br />

The services Database Schema<br />

64<br />

The services database enables CTRL to manage and monitor the status of the core<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> processes. The services database is described in Table 5.<br />

Table 5: Synopsis of the services database<br />

Database Defined in Fully qualified database table names<br />

services NCHOME/etc/precision/CtrlSchema.cfg services.inTray<br />

The inTray Table<br />

The inTray table is an active table for managed processes. Inserts into this table cause processes to be<br />

launched and deletions from the table cause processes to be terminated. CTRL also monitors the status of<br />

processes named in the inTray table and restarts them if they die.<br />

Table 6: services.inTray Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

serviceId PRIMARY KEY<br />

NOT NULL<br />

UNIQUE<br />

services.slaveCtrl<br />

services.unManaged<br />

services.unControlled<br />

Integer The unique ID of the service (assigned internally).<br />

serviceName NOT NULL Text The name of the service to be managed.<br />

servicePath Text The full path to the service executable, assumed to<br />

be NCHOME/precision/bin if NULL.<br />

domainName Text The domain under which the service is to run.<br />

hostName Text The name of the machine upon which the service is<br />

to run.<br />

argList List of type text List of arguments sent to the service executable.<br />

processId Long integer The process ID of the service.<br />

dependsOn List of type text A list of processes that the current service is<br />

dependent on, that is, prerequisites.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 6: services.inTray Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

serviceState Externally defined<br />

serviceState data type<br />

The slaveCtrl Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Querying the Databases of CTRL<br />

Integer Integer reflecting the current operational state of<br />

the service:<br />

(0) The service is alive but currently idle.<br />

(1) The service is waiting for its prerequisites, that is,<br />

waiting for its dependencies to be satisfied.<br />

(2) The service is currently waiting for a heartbeat<br />

from another service.<br />

(3) Fork service, that is, the application is currently<br />

starting.<br />

(4) The service is alive and running.<br />

(5) The service is sick.<br />

(6) The service is dead.<br />

(7) The service has failed.<br />

(8) Shutdown.<br />

retryCount Integer The number of attempts to restart a service before<br />

aborting.<br />

interval Integer The average interval between service heartbeats<br />

(that is, signals from the service).<br />

logFile Text Name of file where output is logged.<br />

The slaveCtrl table is populated automatically and serves as a reference for other instances of CTRL<br />

that are running in slave mode. You must not use the OQL Service Provider to insert records into this table<br />

manually.<br />

Table 7: services.slaveCtrl Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

slaveId UNIQUE<br />

PRIMARY KEY<br />

NOT NULL<br />

Integer The unique identification number of the CTRL<br />

process running in slave mode.<br />

domainName Text The domain under which the slave CTRL process is<br />

operating.<br />

hostName Text The name of the machine on which the slave CTRL<br />

process is running.<br />

65


Chapter 2: Process Control with CTRL<br />

66<br />

Table 7: services.slaveCtrl Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

processId Long integer The process ID of the slave CTRL process.<br />

slaveState Externally defined<br />

serviceState data type<br />

The unManaged Table<br />

Integer The current operational state of the slave process.<br />

The unManaged table is used by CTRL to launch and terminate ‘unmanaged’ processes. An unmanaged<br />

process is defined as any process that is to be started by CTRL but is not monitored or restarted if it dies.<br />

The unManaged table is active, so inserting or deleting records from the table causes the corresponding<br />

processes to be started or stopped.<br />

Table 8: services.unManaged Database Table Schema<br />

Column name Constraints Data type Description<br />

serviceId UNIQUE<br />

PRIMARY KEY<br />

NOT NULL<br />

Integer The unique ID of the service.<br />

serviceName NOT NULL Text The name of the service.<br />

servicePath Text The full path to the service executable. If NULL,<br />

NCHOME/precision/bin is assumed.<br />

hostName Text The machine the service is running on.<br />

argList List of type Text A list of arguments that is sent to the service<br />

executable.<br />

processId Long integer The service process ID.<br />

serviceState Externally defined<br />

serviceState data type<br />

Integer Integer reflecting the current operational state of<br />

the service.<br />

logFile Text Name of file where output is logged.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The unControlled Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Querying the Databases of CTRL<br />

The unControlled table is a read-only table that is used to monitor uncontrolled services. Uncontrolled<br />

services are services from which CTRL has received a heartbeat but did not start. The unControlled<br />

table is for information purposes only and you must not make inserts into this table as this may lead to<br />

undesired functionality.<br />

Table 9: services.unControlledDatabase Table Schema<br />

Column name Constraints Data type Description<br />

serviceId UNIQUE<br />

PRIMARY KEY<br />

NOT NULL<br />

Integer The unique ID of the service.<br />

serviceName NOT NULL Text The name of the service.<br />

domainName Text The domain under which the service is running.<br />

hostName Text The name of the machine on which the service is<br />

running.<br />

processId Long integer The process ID of the service.<br />

serviceState Externally defined<br />

serviceState data type<br />

Integer Integer reflecting the current operational state of the<br />

service.<br />

interval Integer The average interval between heartbeat signals from<br />

the service.<br />

67


Chapter 2: Process Control with CTRL<br />

68<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


3. User_<strong>Configuration</strong>_Tool.fm July 7, 2005<br />

Chapter 3: Creating and Managing Users<br />

This chapter describes the User <strong>Configuration</strong> Tool. You can use this tool to add users to <strong>Netcool</strong>/<strong>Precision</strong><br />

<strong>IP</strong> and configure user profiles. This chapter also describes AUTH, the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Server<br />

authentication engine.<br />

The User <strong>Configuration</strong> Tool is not available for <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> deployments on Windows; you can<br />

modify AUTH using OQL if you need to change or add user settings for a Windows deployment.<br />

This chapter contains the following sections:<br />

Introduction to User Management on page 70<br />

Starting AUTH on page 73<br />

Starting the User <strong>Configuration</strong> Tool on page 74<br />

Using the User <strong>Configuration</strong> Tool on page 75<br />

The AUTH Database on page 82<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 69


Chapter 3: Creating and Managing Users<br />

3.1 Introduction to User Management<br />

70<br />

A valid <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> username and password is required in order to log into the following services:<br />

The Desktop<br />

The User <strong>Configuration</strong> Tool<br />

The <strong>Discovery</strong> <strong>Configuration</strong> Tool<br />

The OQL Service Provider<br />

The MONITOR <strong>Configuration</strong> Tool<br />

Note: The User <strong>Configuration</strong> Tool described in this chapter enables you to manage user accounts for the<br />

systems listed above. There is a separate set of user management functionality within the <strong>Netcool</strong> GUI<br />

Foundation. That user management functionality manages user access to the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> web<br />

applications, which run under the <strong>Netcool</strong> GUI Foundation. For introductory information on the <strong>Netcool</strong><br />

GUI Foundation, see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Visualization <strong>Guide</strong>. For detailed information on how to<br />

perform user management functions within the <strong>Netcool</strong> GUI Foundation, administrators should refer to<br />

the <strong>Netcool</strong> GUI Foundation Administration <strong>Guide</strong>.<br />

The User <strong>Configuration</strong> Tool<br />

The User <strong>Configuration</strong> Tool is a GUI for creating, editing and managing user accounts. Creating a new<br />

user involves:<br />

Creating a user account and defining its username and password.<br />

Associating a profile, (that is, a set of permissions) with the user account. You can either use the<br />

predefined profiles, which are suitable for most <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> users, or you can create your<br />

own profiles.<br />

Each profile is ranked with an integer value from 0 to 50, where 0 is the highest available rank and 50 the<br />

lowest. The rank of a profile is used within the <strong>Precision</strong> Desktop.<br />

If a user is assigned a profile that does not allow access to the User <strong>Configuration</strong> Tool, the user can only use<br />

the Tool to change their own password.<br />

User Authentication with AUTH<br />

AUTH (ncp_auth) is responsible for authenticating users for components that require authentication.<br />

AUTH supervises all user transactions, ensuring that users have permission to manage the network or<br />

configure the <strong>Precision</strong> Server.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Introduction to User Management<br />

For example, when a user attempts to log into the databases of a <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> component using the<br />

OQL Service Provider, the service provider communicates with AUTH to check that the user has permission<br />

to access those databases. The OQL Service Provider is only launched if AUTH validates the user by sending<br />

an authentication approval; otherwise the process is terminated.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> users must be configured with the User <strong>Configuration</strong> Tool, a standalone GUI<br />

supplied with the <strong>Precision</strong> Server. There are two stages to managing users with AUTH:<br />

1. Creating one or more profiles.<br />

2. Creating users and assigning a defined profile to each individual user.<br />

Profile Creation and Management<br />

A profile is a set of specific privileges or permissions that defines the actions that a user assigned to that profile<br />

can perform when using the <strong>Precision</strong> Server. For example, you may want to restrict certain users from<br />

modifying the AOC definitions using the MONITOR <strong>Configuration</strong> tool, and would therefore allow those<br />

users to view, but not modify, the class hierarchy. You could also restrict some users from accessing or<br />

modifying the <strong>Precision</strong> Server databases using the OQL Service Provider.<br />

It is perfectly acceptable to assign the same profile to many users, provided you are aware that those users<br />

have common permissions. You cannot, however, edit the supplied super profile, which must be assigned<br />

to the system administrator and which allows full control over the <strong>Precision</strong> Server, or assign this profile to<br />

multiple users.<br />

The profile rank is used by the <strong>Precision</strong> Desktop to determine which users can assign alerts to other users.<br />

A user can only assign alerts to another user with a lower or equal rank.<br />

User Creation<br />

You can create users by defining a username and password in the User <strong>Configuration</strong> Tool. Once a user has<br />

been defined, a profile must be assigned to them.<br />

Configuring User Permissions<br />

The auth database stores information on each user, such as their name, password and access privileges.<br />

Although it is possible to configure AUTH by editing the configuration file, this is not recommended<br />

practice as you are unable to configure encrypted passwords. It is therefore highly recommended that you<br />

configure user privileges through the User <strong>Configuration</strong> Tool, as described in Using the User <strong>Configuration</strong><br />

Tool on page 75.<br />

71


Chapter 3: Creating and Managing Users<br />

72<br />

Changes made using the User <strong>Configuration</strong> Tool are automatically saved in an updated<br />

AuthSchema.cfg configuration file in the directory specified using the ncp_config<br />

-write_schemas_to command line option. If no directory was specified when CONFIG was started,<br />

the updated AuthSchema is saved in NCHOME/etc/precision and the existing AuthSchema is<br />

moved to NCHOME/etc/precision/backup.<br />

Note: NCHOME is the environment variable that contains the path to the <strong>Netcool</strong> Suite home directory. For<br />

information on how this environment variable varies with platform, see Operating System Considerations on<br />

page 10.<br />

The Default Profiles<br />

Table 10 provides details of the default profiles that are supplied with the <strong>Precision</strong> Server. With suitable<br />

permissions, you can edit these profiles or create new profiles if necessary. You cannot edit the super profile,<br />

create a new profile with rank 0 or create another user with the profile ID super.<br />

The Default User<br />

!<br />

Table 10: Default Profiles Supplied with the <strong>Precision</strong> Server<br />

Profile ID Description Rank Permissions<br />

super The super user 0 Full control.<br />

admin Systems Administrator 1 Read and write permissions on all component databases and<br />

the ability to assign alerts in the <strong>Precision</strong> Desktop.<br />

supervise Supervisor 50 Read-only permissions on all databases and the ability to<br />

assign alerts in the <strong>Precision</strong> Desktop.<br />

user A <strong>Precision</strong> Desktop user 50 Read-only access to the <strong>Precision</strong> Desktop and the ability to<br />

assign alerts in the <strong>Precision</strong> Desktop.<br />

guest A read-only <strong>Precision</strong> Desktop<br />

user<br />

50 Read-only access to the <strong>Precision</strong> Desktop.<br />

By default, the <strong>Precision</strong> Server is supplied with an admin user account associated with the super profile.<br />

The admin account must be the only account associated with the super profile.<br />

Warning: Micromuse recommends that the system administrator change the password for the default user<br />

account (by default there is no password) and use the account to create other user accounts and configure<br />

their permissions.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


3.2 Starting AUTH<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Starting AUTH<br />

It is good practice to configure CTRL to launch and manage AUTH. AUTH can also be started manually<br />

using the following command line; optional arguments are shown enclosed in square brackets.<br />

ncp_auth -domain DOMAIN_NAME [ -debug DEBUG ] [ -help ] [ -latency LATENCY ] [ -version ]<br />

Table 11: Explanation of Command Line Options<br />

Option Explanation<br />

-domain DOMAIN_NAME The name of the domain under which to run AUTH.<br />

-debug DEBUG The level of debugging output (1-4, where 4 represents the most detailed output).<br />

-help Displays the command line options. Does not start the component even if used in<br />

conjunction with other arguments.<br />

-latency LATENCY The maximum time in milliseconds (ms) that AUTH waits to connect to another<br />

<strong>Precision</strong> Server process using the messaging bus. This option is useful for large<br />

and busy networks where the default settings can cause processes to assume that<br />

there is a problem when in fact the communication delay is a result of network<br />

traffic.<br />

-version Displays the version number of the component. Does not start the component<br />

even if used in conjunction with other arguments.<br />

Prerequisites for Running AUTH<br />

AUTH has no prerequisites.<br />

73


Chapter 3: Creating and Managing Users<br />

3.3 Starting the User <strong>Configuration</strong> Tool<br />

74<br />

In order to start the User <strong>Configuration</strong> Tool, you must have AUTH and CONFIG running in your<br />

domain. If AUTH and CONFIG are not running, the User <strong>Configuration</strong> Tool launches them on startup<br />

(and kills them on shutdown).<br />

Note: Only users with permission to make changes to other users and profiles can log into the User<br />

<strong>Configuration</strong> Tool. If you do not have permission to edit other users and profiles, then the only<br />

functionality available to you in the User <strong>Configuration</strong> Tool is to change your password.<br />

Start the User <strong>Configuration</strong> Tool using the following command:<br />

ncp_userconfig -domain NCOMS<br />

Substitute your domain name where NCOMS is specified. If EXEC is running, you can also start the User<br />

<strong>Configuration</strong> Tool from the <strong>Precision</strong> Desktop, by selecting the Admin→<strong>Configuration</strong>→User<br />

<strong>Configuration</strong> menu option. A graphical login window is displayed, as shown in Figure 10. Enter your<br />

username and password and click the Login button to start the User <strong>Configuration</strong> Tool.<br />

Figure 10: Login Window<br />

Only users with permission to make changes to other users and profiles can log into the User <strong>Configuration</strong><br />

Tool. If you do not have permission to edit other users and profiles, you are asked whether you want to<br />

change your password, as this is the only functionality available to you in the User <strong>Configuration</strong> Tool:<br />

If you select Yes, you can enter your new password in the User Information window, as described in<br />

The User Information Window on page 76.<br />

If you select No, the User <strong>Configuration</strong> Tool exits.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


3.4 Using the User <strong>Configuration</strong> Tool<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Using the User <strong>Configuration</strong> Tool<br />

The User <strong>Configuration</strong> Tool consists of two main windows, the User List window and the Profile List<br />

window.<br />

The User List window is used to view and edit user details. To switch to the User List window, click the Users<br />

tab. The User List window is displayed on start-up by default.<br />

The Profile List window is used to view and edit user profiles. To switch to the Profile List window, click the<br />

Profiles tab.<br />

Creating and Editing Users<br />

The User List window shows all currently configured users. The User List window displays the following<br />

attributes of each account:<br />

User ID that is used to log into to the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> GUIs and the OQL Service Provider.<br />

The Name associated with the user.<br />

The Profile associated with the user.<br />

Whether or not the account is locked.<br />

Figure 11 shows an example User List window, with the Gandalf account selected.<br />

Figure 11: User List Window<br />

To delete a user:<br />

1. Select the user.<br />

2. Click the Delete button.<br />

75


Chapter 3: Creating and Managing Users<br />

76<br />

There is no undo functionality. You can only delete a user if you have permission to do so.<br />

To create a new user:<br />

1. Change the value in the drop-down list box to indicate the type of user to create:<br />

– Empty creates a new blank user.<br />

– Selected creates a new user based on the currently selected user. Creating a new user based on<br />

the selected user copies all the fields from the existing user except the User ID, Name and<br />

password.<br />

2. Click the New button. The User Information window appears.<br />

3. Enter the appropriate information in the User Information window. The User Information window is<br />

described in the next section.<br />

To edit an existing user:<br />

1. Double-click the user in the list, or<br />

2. Select the user and then click the Edit button.<br />

3. The User Information window appears. Enter the appropriate information in the User Information<br />

window. The User Information window is described in the next section.<br />

The User Information Window<br />

Use the User Information window to edit the properties of an existing or a new user account. You can enter<br />

or modify the following information, although only the username and profile are required for a valid user.<br />

The User Information window has two tabs, the General tab and the Contact tab.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


General Tab<br />

The User Information window is shown in Figure 12, with the General tab selected.<br />

Figure 12: User Information Window: Entering General Information<br />

In the General tab, you can enter the following information:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Using the User <strong>Configuration</strong> Tool<br />

The User ID that is used to log into the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> GUIs and the OQL Service Provider.<br />

The full Name of the user.<br />

A Description for the user.<br />

Whether or not the account is to be locked (select the Account Locked check box to lock the<br />

account).<br />

The Profile associated with the account (select the appropriate profile from the drop-down list box).<br />

The Password for the user (the password must be entered twice).<br />

Contact Tab<br />

In the Contact tab, not shown, you can enter the following information:<br />

The Title of the user.<br />

The Organisation that the user belongs to.<br />

The Location of the user.<br />

77


Chapter 3: Creating and Managing Users<br />

78<br />

The telephone number of the user. You can enter as many numbers as necessary:<br />

– To add a number, enter the number in the text box and click the + button; the number is added<br />

to the drop-down list box.<br />

– You can remove a number from the drop-down list box by selecting it and clicking the X<br />

button.<br />

The e-mail address of the user.<br />

The pager number of the user.<br />

Any extra information for this user. To enter extra information, click the Extra Info button. The<br />

Extra Information window is displayed.<br />

– Enter any parameters and their corresponding values in the text boxes, and select the type of<br />

value (Integer, String or List) from the drop-down list box.<br />

– You can enter as many items of extra information as necessary. Click the Add button to add<br />

more space to enter information.<br />

– You can remove a line from the Extra Info window by clicking in the Parameter box for that<br />

line and clicking the Delete button.<br />

– When you have finished adding extra information, click OK to return to the Contact tab.<br />

Cancel returns to the Contact tab without making your changes.<br />

Returning to the User List<br />

When you have finished modifying the user details, click OK to save the changes and return to the User List<br />

window. Clicking Cancel returns you to the User List window with no changes saved.<br />

If you attempt to create a new user account without entering a password for the user—or remove the<br />

password for an existing user—you are warned of the security implications and prompted to return to the<br />

User Information window to enter a password. If you wish to create a user account with no password, click<br />

OK to create the user and return to the User List window.<br />

Creating and Editing Profiles<br />

The Profile List window, which is selected by clicking on the Profile tab from the User List window, shows<br />

the following attributes of each of the currently configured profiles:<br />

The Profile ID that is associated with user profiles.<br />

A Description for this profile.<br />

The Profile List window also indicates which users are associated with the currently selected profile.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Using the User <strong>Configuration</strong> Tool<br />

An example Profile List window is shown in Figure 13. The operator profile is currently selected.<br />

Figure 13: Profile List<br />

To delete a profile:<br />

1. Select the profile.<br />

2. Click the Delete button.<br />

There is no undo functionality, although you can only delete a profile if you have permission to do so.<br />

To create a new profile:<br />

1. Change the value in the drop-down list box to indicate the type of profile to create:<br />

– Empty creates a new blank profile.<br />

– Selected creates a new profile based on the currently selected profile. Creating a new profile<br />

based on the selected profile copies all the fields from the existing profile except the Profile ID.<br />

79


Chapter 3: Creating and Managing Users<br />

80<br />

2. Click the New button. The Profile Information window appears.<br />

3. Enter the appropriate information in the Profile Information window. The Profile Information<br />

window is described in the next section.<br />

To edit an existing profile:<br />

1. Double-click the profile in the list, or select the profile and then click the Edit button.<br />

2. The Profile Information window is displayed. Enter the appropriate information in the Profile<br />

Information window. The Profile Information window is described in the next section.<br />

The Profile Information Window<br />

The Profile Information window, displayed in Figure 14, shows the operator profile with a ranking of 45.<br />

Figure 14: Profile Information Window<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


In the Profile Information window, you can enter the following details:<br />

Profile: the name of the profile.<br />

The Description of the profile.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Using the User <strong>Configuration</strong> Tool<br />

The Ranking of the profile. 0 is the highest profile rank and 50 is the lowest. The 0 ranking is<br />

reserved for the super profile, so the highest rank that you can select for another profile is 1.<br />

The permissions are assigned to this profile for various <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> components.<br />

Profile Permissions<br />

Profile permissions are defined on a per-component basis in the Actions area of the Profile Information<br />

window. For each component you can specify whether a user with this profile has:<br />

Read-only database access to the component (OQLRead).<br />

Read and write database access to the component (OQLReadWrite).<br />

For certain components you can define actions. For example, for the <strong>Precision</strong> Desktop you can specify<br />

whether the user can assign alerts to other users (AssignAlert).<br />

Below the drop-down list box containing the component name are two boxes: the Actions Available list box,<br />

and the Actions Selected list box:<br />

If a particular permission appears in the Actions Available list box, that permission is available for the<br />

currently selected component, but a user with this profile cannot carry out the action.<br />

If a particular permission appears in the Actions Selected list box, a user with this profile can carry<br />

out the action.<br />

Click on a permission in either list box and use the arrow buttons to move that permission between the boxes<br />

if necessary. When you click on a permission, a textual description of the permission appears in the Action<br />

Description list box.<br />

When you have finished modifying the profiles, click OK to return to the Profile List window. Clicking<br />

Cancel returns to the Profile List window without saving any changes.<br />

Exiting the User <strong>Configuration</strong> Tool<br />

When you have finished modifying the users and profiles, you can exit the User <strong>Configuration</strong> Tool by<br />

selecting the menu option File→Exit.<br />

81


Chapter 3: Creating and Managing Users<br />

3.5 The AUTH Database<br />

82<br />

Table 12 describes the database of AUTH.<br />

Table 12: auth Database Schema<br />

Database Description<br />

The auth database Stores defined profile and user settings.<br />

The auth Database Schema<br />

Table 13 describes the auth database.<br />

Table 13: Synopsis of the auth Database<br />

Database name auth<br />

Defined in NCHOME/etc/precision/AuthSchema.cfg<br />

Fully qualified database table names auth.users<br />

The users Table<br />

The users table contains the username and password for each <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> user. The users<br />

table also specifies the profile assigned to this user.<br />

Table 14: auth.users Database Table Schema (1 of 2)<br />

auth.profiles<br />

auth.applications<br />

auth.contactInfo<br />

Column name Constraints Data type Description<br />

m_Name NOT NULL<br />

Default = ""<br />

Text The full name of this user.<br />

m_Password NOT NULL Text The password for this user (automatically<br />

encrypted by the User <strong>Configuration</strong> Tool).<br />

m_Description NOT NULL<br />

Default = ""<br />

Text A description of this user.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 14: auth.users Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

m_Locked NOT NULL<br />

Default = 1<br />

m_UserID NOT NULL<br />

The profiles Table<br />

PRIMARY KEY<br />

UNIQUE<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

The AUTH Database<br />

Integer Integer indicating whether this user account<br />

is locked.<br />

Text The unique ID that this user uses to log into<br />

the GUIs and the OQL Service Provider.<br />

Each <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> user must be assigned one of the profiles that are stored in the<br />

auth.profiles table. The profiles table contains information about the rank of the user relative<br />

to other users and a list of permissions for the profile.<br />

Table 15: auth.profiles Database Table Schema<br />

Column name Constraints Data type Description<br />

m_ProfileID NOT NULL<br />

PRIMARY KEY<br />

UNIQUE<br />

m_Description NOT NULL<br />

Default = ""<br />

m_Ranking NOT NULL<br />

Default = 50<br />

m_Permissions Externally defined<br />

permission data type<br />

Text The unique ID for this profile. A user is assigned to a<br />

given profile by inserting the value of<br />

auth.profiles.m_ProfileID into<br />

auth.users.m_ProfileID for that user.<br />

Text A description of this profile that appears in the User<br />

<strong>Configuration</strong> Tool.<br />

Integer The rank of a user assigned to this profile. The super<br />

user profile has a rank of 0, and any user assigned to<br />

this profile can make changes to all other profiles.<br />

Object type<br />

permission<br />

The higher the number, the lower the rank. The<br />

lowest rank is 50.<br />

A list of permissions associated with this profile. For<br />

each service the permissions specify whether a user<br />

assigned to this profile can:<br />

Read the databases of the service.<br />

Write to the databases of the service.<br />

83


Chapter 3: Creating and Managing Users<br />

84<br />

The applications Table<br />

The applications table contains descriptive information that is displayed in the Profile Information<br />

window of the User <strong>Configuration</strong> Tool. The applications table is populated by default with<br />

information provided to assist users wishing to configure the permissions available to a given profile.<br />

Table 16: auth.applications Database Table Schema<br />

Column name Constraints Data type Description<br />

m_AppID NOT NULL<br />

PRIMARY KEY<br />

UNIQUE<br />

The contactInfo Table<br />

Text The service name to which this information relates.<br />

m_Name NOT NULL Text The name of the component and service to which this<br />

information relates. The contents of the m_Name<br />

column appear in a drop-down list box in the User<br />

<strong>Configuration</strong> Tool.<br />

m_Description NOT NULL Text A description of this service.<br />

m_Actions Externally defined<br />

action data type<br />

The contactInfo table contains contact information for each <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> user.<br />

Table 17: auth.contactInfo Database Table Schema<br />

Object type<br />

action<br />

Column name Constraints Data type Description<br />

m_UserID NOT NULL<br />

PRIMARY KEY<br />

UNIQUE<br />

A description of each of the available options that<br />

appear in the User <strong>Configuration</strong> Tool.<br />

Text The unique ID that this user uses to log into the GUIs<br />

and the OQL Service Provider.<br />

m_Title Text The title of the user.<br />

m_Organisation Text The organisation of the user.<br />

m_Location Text The location of the user.<br />

m_Phone List type text The phone number of the user.<br />

m_Email_Address Text The e-mail address of the user.<br />

m_PagerNumber Text The pager number of the user.<br />

m_ExtraInfo Externally defined<br />

vblist data type<br />

Object type<br />

vblist<br />

Extra information about this user.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


4. <strong>Discovery</strong>_<strong>Configuration</strong>_Tool.fm July 7, 2005<br />

Chapter 4: Network <strong>Discovery</strong> Using the<br />

Network <strong>Discovery</strong> GUI<br />

This chapter describes the Network <strong>Discovery</strong> GUI, which you can use to configure the discovery process.<br />

This chapter contains the following sections:<br />

Introducing Methods for Configuring Network <strong>Discovery</strong> on page 86<br />

Configuring a <strong>Discovery</strong> on page 96<br />

Starting and Monitoring a <strong>Discovery</strong> on page 138<br />

Using the <strong>Discovery</strong> Wizard on page 143<br />

Reading and Writing <strong>Configuration</strong> Files on page 162<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 85


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

4.1 Introducing Methods for Configuring Network <strong>Discovery</strong><br />

86<br />

You must configure the discovery process before attempting to discover your network. Configuring a<br />

discovery involves specifying parameters that govern how the discovery is performed. These parameters are<br />

described in Configuring a <strong>Discovery</strong> on page 96.<br />

The <strong>Precision</strong> Server provides two methods for configuring discovery, both of which are described in full in<br />

this guide. You can:<br />

Configure the discovery using the Network <strong>Discovery</strong> GUI, an intuitive GUI that is described in this<br />

chapter.<br />

Configure the discovery by manually editing the component configuration files and inserting values<br />

into the various component databases. This option is described in Chapter 6: Network <strong>Discovery</strong> from<br />

the Command Line on page 175 of this guide, but must only be used by advanced <strong>Precision</strong> Server<br />

users.<br />

If necessary you can use both methods of configuration.<br />

Note: Before configuring and running a discovery, you need to perform certain preparatory checks on your<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Server and on the networks you wish to discover. For more information, see Preparing<br />

for <strong>Discovery</strong> on page 177.<br />

The Network <strong>Discovery</strong> GUI<br />

The Network <strong>Discovery</strong> GUI offers two ways to configure your discovery, either using a wizard that guides<br />

you step-by-step through the process, or by using the custom configuration option, which allows you to edit<br />

specific discovery fields. If you are configuring the discovery for the first time, you are advised to use the<br />

wizard to configure your discovery.<br />

Accessing the Network <strong>Discovery</strong> GUI<br />

To access the Network <strong>Discovery</strong> GUI, log into the <strong>Netcool</strong> GUI Foundation, as described in the<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Topology Visualization <strong>Guide</strong>. The <strong>Netcool</strong> GUI Foundation is installed as part of the<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> installation, and is the framework within which all <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> web interfaces<br />

appear.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Introducing Methods for Configuring Network <strong>Discovery</strong><br />

Once you have logged into the <strong>Netcool</strong> GUI Foundation, select the <strong>Precision</strong> Admin page. This page<br />

provides access to the Network <strong>Discovery</strong> GUI, OQL Workbench and MySQL database settings, as shown<br />

in Figure 15. This figure shows the <strong>Precision</strong> Admin page with the <strong>Discovery</strong> <strong>Configuration</strong> tab open. See<br />

Table 18 on page 88 for information on which tabs to click to access the different sections of the <strong>Precision</strong><br />

Admin page.<br />

Figure 15: <strong>Precision</strong> Admin Page Showing <strong>Discovery</strong> <strong>Configuration</strong> Options<br />

87


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

88<br />

Table 18: Tabs Available on the <strong>Precision</strong> Admin Page<br />

Tab Section of Network <strong>Discovery</strong> GUI<br />

<strong>Discovery</strong> <strong>Configuration</strong> Click here to configure a discovery in one of the following ways:<br />

<strong>Discovery</strong> <strong>Configuration</strong> Tab<br />

Configure a custom discovery as described in Configuring a <strong>Discovery</strong> on<br />

page 96.<br />

Use the wizard to help you choose configuration settings based on typical<br />

discovery scenarios as described in Using the <strong>Discovery</strong> Wizard on page 143.<br />

This section of the Network <strong>Discovery</strong> GUI is described in <strong>Discovery</strong> <strong>Configuration</strong><br />

Tab on page 88.<br />

<strong>Discovery</strong> Status Click here to start and monitor a discovery. This section of the Network<br />

<strong>Discovery</strong> GUI is described in <strong>Discovery</strong> Status Tab on page 91.<br />

OQL Workbench Click here to access the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> databases using OQL commands.<br />

For more information, see Accessing the <strong>Precision</strong> Server Databases on page 166.<br />

Database <strong>Configuration</strong> Click here to configure access settings for the MySQL database . These settings<br />

apply both to Topoviz and to the Network <strong>Discovery</strong> GUI.<br />

A toolbar appears at the top of the <strong>Discovery</strong> <strong>Configuration</strong> section of the Network <strong>Discovery</strong> GUI. The<br />

items on this toolbar enable you to call up the <strong>Discovery</strong> Wizard and control the saving of data. The buttons<br />

are shown in Figure 16 and described in Table 19.<br />

Figure 16: Network <strong>Discovery</strong> GUI Toolbar<br />

Table 19: Description of Toolbar<br />

Item Description<br />

Domain<br />

drop-down<br />

list box<br />

Enables you to select a domain in which to configure and run your discovery.<br />

Calls the <strong>Discovery</strong> Wizard, which guides you through the discovery configuration process using the<br />

discovery configuration windows in series.<br />

Saves all changes on screen.<br />

Resets any unsaved changes and displays original configuration.<br />

Calls online help on the Network <strong>Discovery</strong> GUI.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Introducing Methods for Configuring Network <strong>Discovery</strong><br />

The Network <strong>Discovery</strong> GUI uses a series of tabs to help you step through the configuration of a discovery.<br />

Figure 17 shows these tabs. Table 20 describes the features you can find under each tab.<br />

Figure 17: Tabs In The <strong>Configuration</strong> Section of the Network <strong>Discovery</strong> GUI<br />

Table 20: Description of Tabs<br />

Tab Description<br />

Scope Define zones in the network to be included in or excluded from discovery. For more information, see<br />

Scoping the <strong>Discovery</strong> on page 97.<br />

Seed Define the starting points from which to look for devices. For more information, see Seeding the <strong>Discovery</strong><br />

on page 100.<br />

Sniffer and<br />

Trap<br />

Define dynamic finders that provide alternative starting points for the discovery by identifying <strong>IP</strong><br />

addresses embedded within data traffic. For more information, see Configuring the Dynamic Finders on<br />

page 106<br />

Passwords SNMP and Telnet communication protocol parameters that enable <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> to investigate<br />

devices that use these communication protocols. For more information, see Setting SNMP and Telnet<br />

Passwords on page 111.<br />

Device<br />

Support<br />

Define the discovery agents to be used to investigate device connectivity. For more information, see<br />

Enabling and Disabling <strong>Discovery</strong> Agents on page 118.<br />

Filters Define filters that enable you to filter out devices either prior to discovery or following discovery. For more<br />

information, see Setting <strong>Discovery</strong> Filters on page 120.<br />

DNS Specify access to DNS services that enable the discovery to perform domain name lookups. For more<br />

information, see Configuring DNS Helpers on page 127.<br />

NAT Specify Network Address Translation (NAT) data. NAT data provides discovery mappings between address<br />

space data and real device <strong>IP</strong> addresses and thereby facilitates further discovery. For more information,<br />

see Configuring NAT Support on page 130.<br />

Advanced Define advanced settings that govern features of the discovery such as concurrent processes and<br />

time-outs. For more information, see Setting Advanced <strong>Discovery</strong> Parameters on page 133.<br />

89


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

90<br />

Much of the configuration data in the Network <strong>Discovery</strong> GUI is presented in tables. An example, the<br />

Scoping Table, is shown in Figure 18. In these cases, a set of buttons appears above the table. These buttons<br />

enable you to enter data into the table, edit and delete data. These buttons are described in Table 21 Buttons<br />

For Manipulating Data in the Table on page 90.<br />

Figure 18: Table From the Network <strong>Discovery</strong> GUI<br />

Table 21: Buttons For Manipulating Data in the Table<br />

Button or<br />

Check Box<br />

Description<br />

Select All button. Selects all the rows in the table and displays a check in each of the Select check boxes.<br />

Deselect All button. Deselects any selected rows and removes the check from each of the Select check<br />

boxes.<br />

Delete button. Deletes the selected rows.<br />

New button. Calls up a window where you can specify values for the new row to add to the table.<br />

Select check box. Click this check box to select the corresponding row. Click a selected check box to<br />

deselect the corresponding row.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Discovery</strong> Status Tab<br />

Figure 19 shows the <strong>Precision</strong> Admin page with the <strong>Discovery</strong> Status tab open.<br />

Figure 19: <strong>Precision</strong> Admin Page Showing <strong>Discovery</strong> Status Information<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Introducing Methods for Configuring Network <strong>Discovery</strong><br />

A set of buttons appears at the top of the Status and Control section. These buttons enable you to start and<br />

stop a discovery or force a rediscovery, either full or partial. You can also refresh the data on discovered<br />

devices. The buttons are shown in Figure 20 and described in Table 22.<br />

Figure 20: Main Button Bar – <strong>Discovery</strong> Status<br />

91


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

92<br />

Table 22: Description of Main Button Bar – <strong>Discovery</strong> Status<br />

Button or Widget Description<br />

Domain drop-down<br />

list box<br />

Enables you to select a domain in which to run your discovery.<br />

Start <strong>Discovery</strong> button: starts the discovery (or rediscovery) of the type specified in the<br />

<strong>Discovery</strong> Type drop-down list box. Uses the values specified in the <strong>Configuration</strong> section of<br />

the Network <strong>Discovery</strong> GUI to perform this discovery. This button may be active (green) or<br />

inactive (gray).<br />

If the button is active, then no discovery is currently running. You can click the button to<br />

start a discovery.<br />

If the button is inactive (gray), then a discovery is currently running.<br />

If the CTRL process is not running in the domain you selected, then clicking on this button<br />

generates a warning that prompts you to check that CTRL is running in this domain.<br />

Stop <strong>Discovery</strong> button: stops a currently running discovery (or rediscovery). This button may be<br />

active (red) or inactive (gray).<br />

If the button is active, then a discovery is currently running. You can click the button to stop<br />

the discovery.<br />

If the button is inactive (gray), then no discovery is currently running.<br />

<strong>Discovery</strong> Type buttons: select the type of discovery to run using the following buttons:<br />

Full Rediscovery (left button)<br />

Partial Rediscovery (right button)<br />

For more information on these options, see Starting and Monitoring a <strong>Discovery</strong> on page 138.<br />

These buttons are inactive if no discovery is currently running.<br />

<strong>Discovery</strong> Settings button: click here to change the runtime settings for the DISCO and the<br />

Helper Server processes. Clicking this button calls up the <strong>Discovery</strong> Settings window, as shown in<br />

<strong>Discovery</strong> Settings Window on page 93.<br />

Note: These settings are of interest only if you are troubleshooting the DISCO or Helper Server<br />

processes.<br />

Refresh button: works in conjunction with the Discovered Devices tab. Refreshes the list of<br />

discovered devices so that the display area lists the latest devices discovered. Also refreshes the<br />

status data under the other tabs.<br />

This button is inactive if no discovery is currently running.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Discovery</strong> Settings Window<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Introducing Methods for Configuring Network <strong>Discovery</strong><br />

You access this window by clicking the <strong>Discovery</strong> Settings button in the <strong>Discovery</strong> Status button bar. Use<br />

this window to change the runtime settings for the DISCO and the Helper Server processes, as shown in<br />

Figure 21. Table 23 describes each of the fields in this window. These settings are saved to the<br />

ncp.ctrlServiceData table in the MySQL database. This table is created the first time that you press<br />

the Save button within this window.<br />

Note: These settings are of interest only if you are troubleshooting the DISCO or Helper Server processes.<br />

Figure 21: <strong>Discovery</strong> Settings Window<br />

Table 23: <strong>Discovery</strong> Settings<br />

Property Meaning<br />

Debug Level Specify a debugging level for troubleshooting this process (Helper Server or<br />

DISCO).<br />

Latency The maximum time in milliseconds (ms) that this process waits to connect to<br />

another <strong>Precision</strong> Server process using the messaging bus. This option is useful<br />

for large and busy networks where the default settings can cause processes to<br />

assume that there is a problem when in fact the communication delay is a result<br />

of network traffic.<br />

Retry Count The number of times that CTRL tries to restart this process before giving up.<br />

Log Filename Name of the log file to which to write messages from this process.<br />

93


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

94<br />

The <strong>Discovery</strong> Status pane contains a series of tabs to group the different types of information you can<br />

monitor. Figure 22 shows these tabs. Table 24 describes the features you can find under each tab.<br />

Figure 22: Tabs In The Status and Control Section of the Network <strong>Discovery</strong> GUI<br />

Table 24: Description of Status Tabs (1 of 2)<br />

Tab Description<br />

<strong>Discovery</strong><br />

Details<br />

<strong>Discovery</strong><br />

Details:<br />

Overview<br />

section<br />

<strong>Discovery</strong><br />

Details: Ping<br />

Finder<br />

Progress<br />

section<br />

Displays two sections that provide information on an overview of the progress of the discovery,<br />

containing the following information:<br />

The Overview section contains the following information:<br />

<strong>Discovery</strong> Phase: Indicates the phase of discovery currently in progress. For more information on the<br />

discovery phases, see <strong>Discovery</strong> Stages and Phases on page 35.<br />

Processed <strong>IP</strong> Addresses: Indicates how many <strong>IP</strong> addresses have been discovered to this point.<br />

Processed Names: Indicates how many domain names have been discovered to this point.<br />

Processed Sub-Nets: Indicates how many subnets have been discovered to this point.<br />

VLANs: Indicates how many VLANs have been discovered to this point.<br />

Cisco Frame Relay: Indicates how many Cisco Frame Relay devices have been discovered to this<br />

point.<br />

Frame Relay: Indicates how many Frame Relay devices have been discovered to this point.<br />

PNNI Peer Group: Indicates how many Private Network Node Interface (PNNI) devices have been<br />

discovered to this point.<br />

HSRP: Indicates how many Hot Standby Router Protocol (HSRP) devices have been discovered to this<br />

point.<br />

FDDI: Indicates how many Fibre Distributed Data Interface (FDDI) nodes have been discovered to this<br />

point.<br />

The Ping Finder Progress section contains the following information:<br />

<strong>IP</strong>/Subnet: A list of <strong>IP</strong>s and subnets discovered to this point.<br />

Netmask: For each subnet, this column indicates the netmask value.<br />

Current Address: The current address being processed.<br />

Status: Indicates whether the Ping finder is still pinging this device or subnet or whether it has<br />

completed pinging.<br />

These values are automatically refreshed every 10 seconds.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 24: Description of Status Tabs (2 of 2)<br />

Tab Description<br />

<strong>Discovery</strong><br />

Tables<br />

Discovered<br />

Devices<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

The following information is displayed for each discovery agent:<br />

Agent: The agents running in the current discovery.<br />

Queue: Indicates the current status of each discovery agent.<br />

These values are automatically refreshed every 10 seconds.<br />

Introducing Methods for Configuring Network <strong>Discovery</strong><br />

This is a list of all devices discovered to this point. The following information is displayed for each device:<br />

Entity Name: The unique name of this entity on the network.<br />

<strong>IP</strong> Address: The unique <strong>IP</strong> address of this network entity.<br />

Once the discovery has reached an advanced stage, this window displays a large number of devices. You<br />

can filter these devices by creating and applying a filter, using the Filter option.<br />

This information is not automatically refreshed, as this would take up a lot of system memory resources.<br />

To refresh this information, click the Refresh button.<br />

The Refresh button appears in the main button bar at the top of the <strong>Discovery</strong> Status Details area.<br />

For more information on the Refresh button, see Table 22 Description of Main Button Bar – <strong>Discovery</strong><br />

Status on page 92.<br />

95


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

4.2 Configuring a <strong>Discovery</strong><br />

96<br />

Configuring a discovery using the Network <strong>Discovery</strong> GUI provides the ability to set a base set of parameters<br />

that govern how the discovery is performed. These parameters are the following:<br />

The areas of the network to be included in or excluded from the discovery process. This definition of<br />

network space is known as the scope of the discovery. For more information on how to scope the<br />

discovery using the Network <strong>Discovery</strong> GUI, see Scoping the <strong>Discovery</strong> on page 97.<br />

The location from which to begin discovering devices. This may be one or more <strong>IP</strong> or subnet<br />

addresses. This starting point is known as the seed of the discovery. For more information on how to<br />

seed the discovery using the Network <strong>Discovery</strong> GUI, see Seeding the <strong>Discovery</strong> on page 100.<br />

Dynamic finders, such as the Sniffer and Trap finders, which provide alternative starting points for<br />

the discovery by identifying <strong>IP</strong> addresses embedded within data traffic. For more information on<br />

configuring dynamic finders using the Network <strong>Discovery</strong> GUI, see Configuring the Dynamic Finders<br />

on page 106.<br />

SNMP and Telnet communication protocol parameters that enable <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> to<br />

interrogate devices that use these communication protocols. For more information on setting SNMP<br />

and Telnet parameters using the Network <strong>Discovery</strong> GUI, see Setting SNMP and Telnet Passwords on<br />

page 111.<br />

The discovery agents to be used to investigate device connectivity. Depending on the type of<br />

discovery that you are performing (for example, Layer 2 or Layer 3), the Network <strong>Discovery</strong> GUI<br />

assists you in choosing the discovery agents you need. These agents vary because connectivity<br />

information varies with the technology of the hardware in the network. For more information on<br />

setting discovery agents using the Network <strong>Discovery</strong> GUI, see Enabling and Disabling <strong>Discovery</strong><br />

Agents on page 118.<br />

Filters that enable you to filter out devices either prior to discovery or following discovery.<br />

Pre-discovery filters prevent discovered devices from being polled for connectivity information. Post<br />

discovery devices prevent discovered devices from being passed to MODEL. You may filter out<br />

devices based on a variety of criteria, including location, technology, and manufacturer. For more<br />

information on setting pre- and post-discovery filters using the Network <strong>Discovery</strong> GUI, see Setting<br />

<strong>Discovery</strong> Filters on page 120.<br />

Access to DNS services that enable the discovery to perform domain name lookups. For information<br />

on configuring DNS services for the discovery, see Configuring DNS Helpers on page 127.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

Network Address Translation (NAT) data provides the discovery mappings between address space<br />

data and real device <strong>IP</strong> addresses and thereby facilitates further discovery. For information on<br />

configuring NAT support for the discovery, see Configuring NAT Support on page 130.<br />

Advanced settings that govern features of the discovery such as concurrent processes and time-outs.<br />

You can use these parameters to increase the speed of the discovery but you need to balance this with<br />

the load on the server. Generally a faster discovery involves a heavier load on the server in terms of<br />

memory usage. You should only modify the advanced settings if you are an advanced<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> user. For information on configuring advanced settings for the discovery, see<br />

Setting Advanced <strong>Discovery</strong> Parameters on page 133.<br />

To configure a discovery, you complete a series of tabbed forms with values for some or all of these<br />

parameters. You may find data in some of these tabbed screens. This is data specified in earlier configurations<br />

and held in the relevant discovery configuration file.<br />

Note: When you configure a discovery using the Network <strong>Discovery</strong> GUI, the minimum amount of<br />

information that you must specify is one seed device and the correct SNMP community strings for the<br />

network to be discovered.<br />

Scoping the <strong>Discovery</strong><br />

You can use the Scope tab within the Network <strong>Discovery</strong> GUI to to define zones of the network (that is,<br />

subnet ranges) that are to be included in or excluded from the discovery. You can define as many zones as<br />

necessary.<br />

97


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

98<br />

Adding a New Scope Zone<br />

To add a new zone:<br />

1. In the Network <strong>Discovery</strong> GUI, ensure that the Scope tab is selected within the <strong>Configuration</strong><br />

option.<br />

Figure 23: Scope Tab<br />

The information that you specify in the form under the Scope tab is saved to the<br />

DiscoScope.DOMAIN_NAME.cfg schema file, where DOMAIN_NAME is the name of the<br />

discovery domain, for example NCOMS. You can find more information on the purpose and function<br />

of the DiscoScope.cfg schema file in Introduction to Scope on page 208.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

2. Click the New button.<br />

The Scope window appears where you can enter the subnet and netmask bits (if applicable) for the<br />

zone in the relevant fields. You also have the option of entering a subnet using a wildcard. The Scope<br />

window is shown in Figure 24.<br />

Figure 24: Scope Window With Sample Zone Data<br />

3. Indicate whether the zone is to be included or excluded from the discovery by selecting the Include or<br />

the Exclude check box. If the zone is an inclusion zone, you can also indicate whether you wish to<br />

ping the zone during the discovery. By checking the box Add to ping seed list you add the entity or<br />

subnet to the ping seed list. For more information on seeding the Ping finder, see Seeding the Ping<br />

Finder on page 100.<br />

4. If you are performing NAT address mapping, then map this scope zone to a NAT address space.<br />

Specify the NAT address space in the Address Space field. Values for NAT addresses are set in the<br />

translations.NATAddressSpaceIds table.<br />

Note: The Address Space field appears if the NAT tab has the Enable Network Address Translation<br />

(NAT) Support tab selected, as described in Activating and Deactivating Network Address Translation<br />

on page 132.<br />

5. Click OK to confirm your settings.<br />

6. Click the Save button to save your settings.<br />

99


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

100<br />

Editing an Existing Scope Zone<br />

To edit an existing scope zone:<br />

1. Click on the hyperlink row in the Scope Zones table corresponding to the scope zone that you wish to<br />

modify. The Scope dialog appears containing the data for the scope zone that you selected.<br />

2. Modify the scope zone data as desired.<br />

3. Click OK to confirm your settings.<br />

4. Click the Save button to save your settings.<br />

Deleting Scope Zones<br />

To delete one or more scope zones:<br />

1. Select one or more rows from the Scope Zones table by clicking the Select check box or check boxes<br />

in the relevant rows. Click the Select All button to select all the rows in the Scope Zones table.<br />

2. Click the Delete button to delete the row or rows that you selected.<br />

3. Click the Save button to save your settings.<br />

Seeding the <strong>Discovery</strong><br />

If you wish to run the Ping and File finders you must seed them with the starting points from which to look<br />

for devices. In the case of the Ping finder, you must specify one or more <strong>IP</strong> addresses and/or subnets to ping<br />

to determine if the devices exist. In the case of the File finder, you must specify a file that is likely to contain<br />

<strong>IP</strong> addresses for your network. You would usually parse a structured system file such as /etc/hosts.<br />

You can seed a discovery using both the Ping finder and the File finder simultaneously. In addition to these<br />

two finders that require you to provide the seed addresses, you can also seed the discovery using two dynamic<br />

finders, the Sniffer and Trap finders, which provide alternative starting points for the discovery by<br />

identifying <strong>IP</strong> addresses embedded within data traffic. For more information on the Sniffer and Trap<br />

finders, see Configuring the Dynamic Finders on page 106.<br />

Seeding the Ping Finder<br />

You seed the Ping finder with a device or subnet address at which the finder begins looking for devices. You<br />

can specify seeds for the Ping finder and save these seeds. You can separately decide whether or not to activate<br />

the Ping finder for the discovery.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


To seed the Ping finder:<br />

1. In the Network <strong>Discovery</strong> GUI, select the Seed tab within the <strong>Configuration</strong> option.<br />

Figure 25: Seed Tab<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

The information that you specify in the Ping finder form under the Seed tab is saved to the<br />

DiscoPingFinderSeeds.DOMAIN_NAME.cfg schema file, where DOMAIN_NAME is the<br />

name of the discovery domain, for example NCOMS. You can find more information on the purpose<br />

and function of the DiscoPingFinderSeeds.cfg schema file in Configuring the Ping Finder<br />

on page 221.<br />

101


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

102<br />

2. Click the New button above the Ping finder table.<br />

The Ping Seed window appears where you can enter an <strong>IP</strong> address or a subnet and netmask bits (if<br />

applicable) for the ping seed in the relevant fields. The Ping Seed window is shown in Figure 26.<br />

Figure 26: Ping Seed Window With Sample Ping Seed Data<br />

3. In the Timeout field, specify the maximum time to wait for a reply from a pinged address.<br />

4. In the Retries field, specify the number of times a device is to be repinged.<br />

5. Click OK to confirm your settings. The new ping seed you defined appears as a hyperlink in the Ping<br />

finder table.<br />

6. Click the New button to define more seeds for the Ping finder.<br />

7. Click the Save button to save your settings.<br />

Activating and Deactivating the Ping Finder<br />

To activate the Ping finder:<br />

1. Select the Use Ping Finder in <strong>Discovery</strong> check box.<br />

Figure 27: Use Ping Finder in <strong>Discovery</strong> Check Box (Selected)<br />

2. Click the Save button to save your settings.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


To deactivate the Ping finder:<br />

1. Deselect the Use Ping Finder in <strong>Discovery</strong> check box.<br />

Figure 28: Use Ping Finder in <strong>Discovery</strong> Check Box (Deselected)<br />

2. Click the Save button to save your settings.<br />

Seeding the File Finder<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

You seed the File finder with a text file on the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine to which you have read<br />

access. This file must be a structured text file that contains the seeds in the form of <strong>IP</strong> addresses and device<br />

names in columns. For more information on the structure of this seed file, see Files to Parse and Rules for<br />

Parsing on page 229.<br />

Note: You usually use a file that already exists on the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine. However, if you<br />

wish to create a new file to hold the seeds then you need to have write permissions for the directory where<br />

you wish to write the file.<br />

You can specify files containing seeds for the File finder and save these file settings. You can separately decide<br />

whether or not to activate the File finder for the discovery.<br />

103


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

104<br />

To seed the File finder:<br />

1. In the Network <strong>Discovery</strong> GUI, select the Seed tab within the <strong>Configuration</strong> option.<br />

Figure 29: Seed Tab<br />

The information that you specify in the File finder form under the Seed tab is saved to the<br />

DiscoFileFinderParseRules.DOMAIN_NAME.cfg schema file, where DOMAIN_NAME<br />

is the name of the discovery domain, for example NCOMS. You can find more information on the<br />

purpose and function of the DiscoFileFinderParseRules.cfg schema file in Configuring<br />

the File Finder on page 228.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

2. Click the New button above the File finder table.<br />

The File Seed window appears where you can enter the path to a file containing seeds. The File Seed<br />

window is shown in Figure 30.<br />

Figure 30: File Seed Window With Sample File Seed Data<br />

3. In the Filename field, specify the path to the file on the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine that<br />

contains seed data. This file must be a structured text file that contains the seeds in the form of <strong>IP</strong><br />

addresses and device names in columns.<br />

4. Specify the column delimiter in this file by typing the the delimiter in the Delimiter field. You can<br />

use regular expressions to complete this field. For example, if the Name and <strong>IP</strong> columns are separated<br />

by one or more tabs, then insert [ tab_space ]+, where tab_space is an actual tab character.<br />

To produce this tab character, create a tab in a text editor, copy the tab and paste it into the<br />

Delimiter field.<br />

5. In the Name Column field, specify the column within this file that contains the device names of seed<br />

devices. Note that a default value of 0 appears in this field. You must change this to the non-zero<br />

value corresponding to the column number within this file that contains the device names.<br />

6. In the <strong>IP</strong> Column field, specify the column within this file that contains the <strong>IP</strong> addresses of seed<br />

devices. Note that a default value of 0 appears in this field. You must change this to the non-zero<br />

value corresponding to the column number within this file that contains the <strong>IP</strong> addresses.<br />

7. Click OK to confirm your settings. The new file seed you defined appears as a hyperlink in the File<br />

finder table.<br />

8. Click the New button to define more seeds for the File finder.<br />

9. Click the Save button to save your settings.<br />

105


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

106<br />

Activating and Deactivating the File Finder<br />

To activate the File finder:<br />

1. Select the Use File Finder in <strong>Discovery</strong> check box.<br />

Figure 31: Use File Finder in <strong>Discovery</strong> Check Box (Selected)<br />

2. Click the Save button to save your settings.<br />

To deactivate the File finder:<br />

1. Deselect the Use File Finder in <strong>Discovery</strong> check box.<br />

Figure 32: Use File Finder in <strong>Discovery</strong> Check Box (Deselected)<br />

2. Click the Save button to save your settings.<br />

Configuring the Dynamic Finders<br />

Sniffer and Trap finders are the dynamic finders, which you can configure. These finders provide alternative<br />

starting points for the discovery by identifying <strong>IP</strong> addresses embedded within data traffic. You can configure<br />

multiple Sniffer finders and multiple Trap finders.<br />

Configuring the Sniffer Finder<br />

The Sniffer finder listens to interfaces on the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine. You can specify which<br />

interfaces the Sniffer finder should listen to. The Sniffer finder captures and analyses packets sent and<br />

received on these interfaces and extracts the <strong>IP</strong> addresses of the receiving devices (if the packet is being sent)<br />

or the <strong>IP</strong> addresses of the sending devices (if the packet is being received). The discovery process then uses<br />

these <strong>IP</strong> addresses as seed devices.<br />

The Sniffer finder captures a fixed number of packets before control is passed back to the discovery program.<br />

You can define the number of packets to be captured.<br />

Once you have saved your Sniffer finder settings, you can decide separately whether or not to activate the<br />

Sniffer finder for the discovery.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


To configure the Sniffer finder:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

1. In the Network <strong>Discovery</strong> GUI, select the Sniffer & Trap tab within the <strong>Configuration</strong> option.<br />

Figure 33: Sniffer and Trap Tab<br />

The information that you specify under the Sniffer & Trap tab is saved to the<br />

DiscoSnifferFinderSchema.DOMAIN_NAME.cfg schema file, where DOMAIN_NAME is<br />

the name of the discovery domain, for example NCOMS. You can find more information on the<br />

purpose and function of the DiscoSnifferFinderSchema.cfg schema file in Configuring<br />

the Sniffer Finder on page 234.<br />

107


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

108<br />

2. Click the New... button to the right of the Interfaces: list box. The New Interface window appears<br />

where you can enter the name of an interface on the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine that the<br />

Sniffer finder should listen to for packets. The New Interface window is shown in Figure 34.<br />

Figure 34: New Interface Window<br />

3. In the Interface field, specify the path to the name of an interface on the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host<br />

machine that the Sniffer finder should listen to for packets.<br />

4. Click OK to confirm your settings. The interface you defined appears in the Interfaces: field.<br />

5. Specify a value for Loop Times. This value specifies the number of packets to be captured per cycle<br />

before passing control back to the discovery program.<br />

Note: Although capturing more packets may be desirable, it impairs the system response time. This<br />

manifests itself as a small delay when the process is terminated. The larger the number of packets, the<br />

longer this delay.<br />

6. Click the Save button to save your settings.<br />

Activating and Deactivating the Sniffer Finder<br />

To activate the Sniffer finder:<br />

1. Select the Use Sniffer Finder in <strong>Discovery</strong> check box.<br />

Figure 35: Use Sniffer Finder in <strong>Discovery</strong> Check Box (Selected)<br />

2. Click the Save button to save your settings.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


To deactivate the Sniffer finder:<br />

1. Deselect the Use Sniffer Finder in <strong>Discovery</strong> check box.<br />

Figure 36: Use Sniffer Finder in <strong>Discovery</strong> Check Box (Deselected)<br />

2. Click the Save button to save your settings.<br />

Configuring the Trap Finder<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

The Trap finder listens to SNMP traps received or sent through a specific port on the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

host machine. You can specify the port that the Trap finder should listen on. The Trap finder captures and<br />

analyses traps on this port and extracts <strong>IP</strong> addresses either from the <strong>IP</strong> header of the trap or from the payload.<br />

Once you have saved your Trap finder settings, you can decide separately whether or not to activate the Trap<br />

finder for the discovery.<br />

109


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

110<br />

To configure the Trap finder:<br />

1. In the Network <strong>Discovery</strong> GUI, select the Sniffer & Trap tab within the <strong>Configuration</strong> option.<br />

Figure 37: Sniffer and Trap Tab<br />

The information that you specify in the Trap finder form under the Sniffer & Trap tab is saved to<br />

the DiscoTrapFinderSchema.DOMAIN_NAME.cfg schema file, where DOMAIN_NAME is<br />

the name of the discovery domain, for example NCOMS. You can find more information on the<br />

purpose and function of the DiscoTrapFinderSchema.cfg schema file in Configuring the<br />

Trap Finder on page 236.<br />

2. Select whether to retrieve <strong>IP</strong> address from the payload or from the trap packet header.<br />

– Select Payload if the <strong>IP</strong> address in the trap packet header is not the actual <strong>IP</strong> address.<br />

– Select Trap Packet Header ifthe <strong>IP</strong> address is defined directly in the header.<br />

3. Specify the Trap Port. By default this is port 162.<br />

4. Click the Save button to save your settings.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Activating and Deactivating the Trap Finder<br />

To activate the Trap finder:<br />

1. Select the Use Trap Finder in <strong>Discovery</strong> check box.<br />

Figure 38: Use Trap Finder in <strong>Discovery</strong> Check Box (Selected)<br />

2. Click the Save button to save your settings.<br />

To deactivate the Trap finder:<br />

1. Deselect the Use Trap Finder in <strong>Discovery</strong> check box.<br />

Figure 39: Use Trap Finder in <strong>Discovery</strong> Check Box (Deselected)<br />

2. Click the Save button to save your settings.<br />

Setting SNMP and Telnet Passwords<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

You need to specify SNMP and Telnet access information in order to enable helpers and polling agents to<br />

access devices on your network. In order for the SNMP helper and Polling agents to be able to access devices<br />

on your network you must specify SNMP passwords as part of the discovery configuration. In order for the<br />

Telnet helper and the discovery agents that use Telnet to be able to access devices on your network and<br />

maintain a dialog with those devices, you must enter the relevant device prompts, login ID and password as<br />

part of the discovery configuration.<br />

Setting SNMP Passwords<br />

You use the Passwords tab within the Network <strong>Discovery</strong> GUI to define different SNMP communities and<br />

passwords for each of those communities. By storing the community strings and passwords for these<br />

communities, you allow discovery to proceed faster as the SNMP access parameters are already known.<br />

111


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

112<br />

To Set SNMP Passwords:<br />

1. In the Network <strong>Discovery</strong> GUI, ensure that the Passwords tab is selected within the <strong>Configuration</strong><br />

option.<br />

Figure 40: Passwords Tab<br />

The SNMP information that you specify under the Passwords tab is saved to the<br />

SnmpStackSecurityInfo.cfg schema file. You can find more information on the purpose<br />

and function of the SnmpStackSecurityInfo.cfg schema file in Configuring the Device<br />

SNMP Access Parameters on page 187.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

2. Click the New button above the SNMP Passwords table. The SNMP Password window appears<br />

where you can specify address-specific, network-specific or global SNMP community strings, and<br />

supply passwords for these community strings. The SNMP Password window is shown in Figure 41.<br />

Figure 41: SNMP Password Window With Sample Community String Data<br />

3. Specify a name for the SNMP community string in the Community String field.<br />

4. Specify whether the community string is address specific, subnet specific or global.<br />

– If the string is global, then select the Globally (applies to all devices) check box.<br />

– If the string is subnet specific, then select the Subnet check box and specify a subnet in the<br />

appropriate fields.<br />

– If the string is address-specific, then select the <strong>IP</strong> Address check box and specify an <strong>IP</strong> address.<br />

113


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

114<br />

5. Specify the SNMP version for this SNMP community. Select V1, V2 or V3. If the SNMP<br />

community uses SNMP V3, then enter the Security Name and click in the drop-down list box to<br />

select one of the following options:<br />

– noAuthNoPriv–for SNMP communities that have no authentication or private key. In this case<br />

there is no need to specify any passwords.<br />

– AuthNoPriv–for SNMP communities that have an authentication key but no private key. Now<br />

specify a password in the Auth Password field.<br />

– AuthPriv–for SNMP communities that have both an authentication and a private key. Now<br />

specify passwords in the Auth Password and Private Password fields.<br />

6. Click OK to confirm your settings. The community string you defined appears as a hyperlink in the<br />

SNMP Passwords table.<br />

7. Click the Save button to save your settings.<br />

Setting Telnet Access Information<br />

Under the Passwords tab you can also define the relevant device prompts, login ID and password to enable<br />

the Telnet helper and the discovery agents that use Telnet to be able to access devices on your network and<br />

maintain a dialog with those devices.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


To Set Telnet Access Information:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

1. In the Network <strong>Discovery</strong> GUI, ensure that the Passwords tab is selected within the <strong>Configuration</strong><br />

option.<br />

Figure 42: Passwords Tab<br />

The Telnet password information that you specify under the Passwords tab is saved to the<br />

TelnetStackPasswords.cfg schema file. You can find more information on the purpose<br />

and function of the TelnetStackPasswords.cfg schema file in Configuring Telnet Device<br />

Access on page 303.<br />

115


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

116<br />

2. Click the New button above the Telnet Passwords table. The Telnet Password window appears where<br />

you can specify prompts, login ID and password for a set of Telnet-accessible devices. You can specify<br />

these prompts, login ID and passwords for a single device, for all devices on a subnet or globally for all<br />

Telnet-accessible devices. The Telnet Password window, with default settings, is shown in Figure 43.<br />

Figure 43: Telnet Password Window With Sample Data<br />

3. Specify whether the prompt. login ID and password data is address specific, network specific or<br />

global.<br />

– If the data applies globally, then select the Globally (applies to all devices) check box.<br />

– If the string applies to a single device, then select the <strong>IP</strong> Address check box and specify an <strong>IP</strong><br />

address.<br />

– If the string applies to all devices on a given subnet, then select the Subnet check box and<br />

specify a subnet in the appropriate fields.<br />

4. Type the prompt that the system presents at login in the Username Prompt field. You can use a<br />

regular expression here if you do not know the exact format of the prompt. A default value is<br />

provided.<br />

5. Type the login ID in the Username field.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

6. Type the prompt that the system presents when it requests the password at login in the Password<br />

Prompt field. You can use a regular expression here if you do not know the exact format of the<br />

prompt. A default value is provided.<br />

7. Type the password in the Password field.<br />

8. Type the prompt that the system presents once you have logged in in the Console Prompt field. You<br />

can use a regular expression here if you do not know the exact format of the prompt. A default value<br />

is provided.<br />

9. Specify a timeout in seconds in the Timeout field. This is the amount of time that the discovery waits<br />

for a response from the device before registering a timeout against this attempted Telnet access. If the<br />

Telnet access data is set against a subnet or globally, then this timeout applies to every attempt at<br />

access on the specified network.<br />

10. Set Use SSH to configure the Telnet Helper to use the Secure Shell (SSH) program. SSH enables<br />

authentication and provides more secure communications over the network. For more information,<br />

see Configuring Telnet Device Access on page 303.<br />

11. Click Advanced if you wish to set Telnet privileged access mode properties. The privileged access<br />

mode allows commands to be run that might change the configuration of the device. By default,<br />

when the discovery accesses the device using Telnet, access is granted in user mode. This mode only<br />

allows execution of basic commands, such as those that show the status of the system. This is a safety<br />

feature to prevent the discovery making any device configuration modifications without an explicit<br />

change to privileged mode.<br />

If you click Advanced, the Telnet Privileged Access Mode Properties window appears.<br />

Figure 44: Telnet Privileged Access Mode Properties Window<br />

117


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

118<br />

12. In the Command field, specify the command to enter privileged access mode. This is usually<br />

enable.<br />

13. Type the prompt that the system presents when it requests the password at login in the Password<br />

Prompt field. You can use a regular expression here if you do not know the exact format of the<br />

prompt. A default value is provided.<br />

14. Type the privileged mode password in the Password field.<br />

15. Type the prompt that the system presents once you have logged in in the Console Prompt field. You<br />

can use a regular expression here if you do not know the exact format of the prompt. A default value<br />

is provided.<br />

16. In the Commands requiring mode list, specify the commands that you wish to make accessible from<br />

privileged mode. Click the New… button to specify new commands.<br />

The commands that <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> uses that require enable mode are:<br />

– show run<br />

– show mac-address-table<br />

– show ip nat translation<br />

None of these commands actually change the configuration of the device; however, these commands<br />

only work in enable mode.<br />

17. Click OK to confirm your settings. You return to the Telnet Password window.<br />

18. In the Telnet Password window, click OK to confirm your settings. The Telnet access data you<br />

defined appears as a hyperlink in the SNMP Passwords table.<br />

19. Click the Save button to save your settings.<br />

Enabling and Disabling <strong>Discovery</strong> Agents<br />

You must enable the appropriate agents for the discovery you wish to perform. You use the Device Support<br />

tab within the Network <strong>Discovery</strong> GUI to define the agents to run during the discovery. This section of the<br />

GUI shows all the agents that are available for a discovery and provides a succinct description of each agent.<br />

For more information about the agents that must be run for a specific type of discovery, see Selecting Agents<br />

To Run on page 267.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Enabling <strong>Discovery</strong> Agents<br />

To enable discovery agents:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

1. In the Network <strong>Discovery</strong> GUI, select the Device Support tab within the <strong>Configuration</strong> option.<br />

Figure 45: Device Support Tab<br />

The Agents list shows all the discovery agents that are available for your discovery. If you highlight an<br />

agent by clicking on it, a description of the function of that agent appears in the box to the right.<br />

The information that you specify in the form under the Device Support tab is saved to the<br />

DiscoAgents.DOMAIN_NAME.cfg schema file, where DOMAIN_NAME is the name of the<br />

discovery domain, for example NCOMS. You can find more information on the purpose and function<br />

of the DiscoAgents.cfg schema file in Activating the <strong>Discovery</strong> Agents on page 184.<br />

119


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

120<br />

2. Choose agents for your discovery by selecting the appropriate check boxes.<br />

– Select Full Layer 2 and Layer 3 <strong>Discovery</strong> to select all the agents necessary for a full layer 2 and<br />

layer 3 discovery.<br />

– Select an agent type check box to enable a group of agents for a specific type of discovery.<br />

Individual agents may be disabled individually.<br />

– Select a single agent to activate that agent for the discovery.<br />

3. Click the Save button to save your settings.<br />

If you choose a combination of agents that is not advised or that may result in an inefficient discovery, a<br />

warning box is displayed giving you the opportunity to alter your configuration before proceeding. The<br />

options provided in this window vary as follows:<br />

If you select an agent that should be run in conjunction with another agent(s), a warning box is<br />

displayed indicating that these other agent(s) will be selected as applicable. Click OK to select the<br />

recommended agent(s). Click Cancel to cancel the selection of these agents.<br />

Alternatively, if you select an agent that should not be run in conjunction with another agent(s), a<br />

warning box is displayed indicating that these other agent(s) will be automatically deselected. Click<br />

OK to deselect the recommended agent(s). Click Cancel to cancel the deselection of these agents.<br />

Figure 46 provides an example of a window with a warning about an inadvisable combination of agents.<br />

Figure 46: Warning About Poor Combination of Agents<br />

Setting <strong>Discovery</strong> Filters<br />

Once you have defined the scope of your discovery using the Scope tab, it is possible to restrict the scope<br />

using filters. For example, you may wish to maintain the scope zones that you defined earlier but restrict the<br />

scope based on location (for example, New York hardware only) or based on hardware supplier (for example,<br />

Cisco devices only). You can define a pre-discovery or post-discovery filter. For more information on<br />

defining the scope of a discovery, see Scoping the <strong>Discovery</strong> on page 97.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

By default, the discovery filters do not filter out the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine. This is because this<br />

machine usually also serves as the polling station for root cause analysis. In order for root cause analysis to<br />

work correctly, the polling station, and hence the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine, must be part of the<br />

topology. For more information on root cause analysis, see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Monitoring and RCA<br />

<strong>Guide</strong>.<br />

If you do need to filter out the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine, then you need to modify the following<br />

stitchers and remove the sections of code indicated by comments that prevent the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host<br />

machine from being filtered. The stitchers are DetectionFilter.stch and<br />

InstantiationFilter.stch. For more information on these stitchers, see Appendix C: Stitchers<br />

and Stitcher Language on page 517.<br />

Pre-<strong>Discovery</strong> Filter<br />

A pre-discovery filter restricts device discovery. If this type of filter is defined as part of the discovery<br />

configuration, then only devices matching this filter are fully discovered. If no pre-discovery filter is defined<br />

then all devices within the scope are discovered.<br />

The test defined by the pre-discovery filter uses the columns of the Details.returns database table.<br />

For details of the discovery databases, see The <strong>Discovery</strong> Databases on page 423.<br />

Although you can configure the filter condition to test against any of the columns in the<br />

Details.returns table, you may need to use the <strong>IP</strong> address (m_UniqueAddress) as the basis for<br />

the filter if you need to restrict the detection of a particular device. If the device does not grant SNMP access<br />

to the Details agent, the Details agent may not be able to retrieve MIB variables such as the Object ID.<br />

However, you are guaranteed the return of at least the <strong>IP</strong> address when the device is detected.<br />

You can define multiple pre-discovery filters. Filters are combined automatically using a Boolean AND<br />

expression. All criteria defined in all filters must be matched. For more information on defining a filter, see<br />

Creating and Editing Filters on page 123.<br />

Post-<strong>Discovery</strong> Filter<br />

A post-discovery filter restricts device instantiation. If a post-discovery filter is defined for the discovery, only<br />

devices that pass the criteria are instantiated, that is, sent to MODEL. If no post-discovery filter is defined,<br />

then all discovered devices are sent to MODEL. For more information on the steps involved in the creation<br />

of the full topology and the transfer of this topology to MODEL, see Creating the Topology on page 31.<br />

You can define multiple post-discovery filters. Filters are combined automatically using a Boolean AND<br />

expression. All criteria defined in all filters must be matched. For more information on defining a filter, see<br />

Creating and Editing Filters on page 123.<br />

121


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

122<br />

The post-discovery filter operates on the scratchTopology.entityByName table. This means that<br />

the fields available in this filter are different from those available to the pre-discovery filter. The<br />

post-discovery filter operates on topology fields as opposed to basic device information. For more<br />

information on the the topology fields in the scratchTopology database, see The scratchTopology<br />

Database Schema on page 471.<br />

Selecting Pre-<strong>Discovery</strong> Filters<br />

To select a pre-discovery filter for use in your discovery:<br />

1. In the Network <strong>Discovery</strong> GUI, select the Filters tab within the <strong>Configuration</strong> option.<br />

Figure 47: Filters Tab<br />

2. In the Pre-<strong>Discovery</strong> Filter section of the window, select a filter from the Available Filters list box.<br />

3. Click the Add >> button.<br />

4. Click the Save button to save your settings.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Selecting Post-<strong>Discovery</strong> Filters<br />

To select a post-discovery filter for use in your discovery:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

1. In the Post-<strong>Discovery</strong> Filter section of the window, select a filter from the Available Filters list box.<br />

2. Click the Add Filter button.<br />

3. Click the Save button to save your settings.<br />

Creating and Editing Filters<br />

The procedure for creating and editing filters is very similar. The fields available for pre-discovery and<br />

post-discovery filters vary. To create a new filter or edit an existing filter:<br />

1. Click the Filter Library button either within the Pre-<strong>Discovery</strong> Filter section or the Post-<strong>Discovery</strong><br />

Filter section of the window. The Filter Library window appears.<br />

2. Click Add Filter to create a new filter. Alternatively, select a filter from the list on the left to edit it. A<br />

filter definition area appears where you can define a new filter or edit an existing filter, as shown in<br />

Figure 48.<br />

Figure 48: Editing a Filter<br />

3. Click the Add Filter... button to create a new filter or select an existing filter from the list to edit the<br />

filter.<br />

1<br />

2<br />

4. If you are creating a new filter then specify the name of the new filter in the Name field.<br />

123


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

124<br />

5. A filter is made up of one or more filter conditions. An example of a filter condition for a<br />

pre-discovery filter is:<br />

m_ObjectId not like 1\.3\.6\.1\.4\.1\.2\.3\.1\.<br />

Add or delete filter conditions as follows:<br />

– To add a new row for a filter condition, click the New button, labeled item 1 in Figure 48 on<br />

page 123.<br />

– To delete an existing filter condition row, click the Delete button, labeled item 2 in Figure 48<br />

on page 123.<br />

You can link these filter conditions to create a filter using an AND (All) or an OR (Any) Boolean<br />

operator.<br />

– Click the Basic tab to construct the filter using drop-down list boxes. Once you have saved the<br />

filter using the Save button under the Basic tab, you can see what the filter looks like in OQL<br />

by clicking on the Advanced tab. For more information on OQL syntax, see Appendix B: The<br />

Object Query Language on page 479.<br />

– Advanced users should click the Advanced tab and write the filter directly in the text box<br />

provided using OQL. Figure 49 shows an example of a filter defined using OQL under the<br />

Advanced tab.<br />

Figure 49: Filter Defined in OQL Under the Advanced Tab<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


6. Specify whether to apply an All or Any relationship to the filter conditions:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

– Click All to specify that only devices that match all of the filter conditions should pass the filter.<br />

– Click Any to specify that devices that match any one of the filter conditions should pass the<br />

filter.<br />

7. Construct or modify a filter condition for your filter using the Field, Comparator and Value fields, as<br />

described in the following steps.<br />

8. Click on the Field drop-down list box and select a field to filter by.<br />

When constructing a pre-discovery filter, you can filter based on any of the fields in the<br />

Details.returns table. These fields are as follows:<br />

– m_Name<br />

– m_UniqueAddress<br />

– m_Protocol<br />

– m_ObjectId<br />

– m_Description<br />

– m_HaveAccess<br />

– m_UpdAgent<br />

– m_AddressSpace<br />

In addition, using the Advanced tab, you can construct filter rows using any of the fields from within<br />

the m_ExtraInfo field.<br />

For more information on the Details.returns table, see The returns Table on page 458.<br />

When constucting a post-discovery filter, you can filter based on any of the fields in the<br />

scratchTopology.entityByName table. These fields are as follows:<br />

– m_Name<br />

– m_Description<br />

– m_Type<br />

– m_ObjectId<br />

125


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

126<br />

– m_State<br />

– m_HaveAccess<br />

In addition, using the Advanced tab, you can construct filter rows using m_Addresses,<br />

m_Contains, m_UpwardConnections, m_RelatedTo, and any of the fields from within<br />

the m_ExtraInfo field.<br />

For more information on the scratchTopology.entityByName table, see The<br />

entityByName Table on page 471.<br />

9. Click on the Comparator drop-down list box and select an operator for your filter from the list box.<br />

For all fields, whether of type Text or Numerical, you can select any of the following operators:<br />

– =<br />

– <br />

– ><br />

– >=<br />

– <<br />


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

12. When you have defined all the lines of your filter, click Save. If a new filter has been created, the<br />

name of the filter you defined now appears in the list box on the left.<br />

13. Click Close to close the window. The filter you defined appears in the Available Filters list boxes for<br />

either the Pre-<strong>Discovery</strong> Filter or the Post-<strong>Discovery</strong> Filter sections of the window.<br />

Deleting a Filter<br />

To delete a filter:<br />

1. In the Filter Library window, select a filter from the list of filters on the left.<br />

2. Click the Delete button and confirm your choice. The filter you selected is removed from the list.<br />

Note: Some of the filters supplied with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> cannot be deleted. These include the end node<br />

and SNMP acccess pre-discovery filters. For these filters, the Delete button is disabled.<br />

Configuring DNS Helpers<br />

Helpers are specialized applications that retrieve information from and about network devices for the<br />

discovery agents. The DNS Helpers perform domain name resolution. You can specify one of the following<br />

three types of DNS Helper:<br />

DNS Server: a server on the network that is dedicated to performing domain name resolution.<br />

File: the name of a file held on the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine that contains <strong>IP</strong> addresses and<br />

hostnames in lookup table format.<br />

System: the local DNS system on the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine.<br />

You can find more information on DNS Helpers in Configuring the DNS Helper on page 290.<br />

Tip: You can define as many methods as is necessary. You can change the order in which these methods are<br />

retrieved by the DNS Helper. This enables you to ensure that the most commonly accessed method is<br />

retrieved first. This enables a more effective use of resources during the discovery.<br />

Specifying DNS Helper Methods<br />

You can specify a number of methods to enable the DNS Helpers to perform domain name lookups. Each<br />

of these methods makes use of one of the three domain methods described above: DNS Server, File or<br />

System.<br />

127


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

128<br />

To specify DNS Helper methods:<br />

1. In the Network <strong>Discovery</strong> GUI, select the DNS tab within the <strong>Configuration</strong> option.<br />

Figure 50: DNS Tab<br />

2. Click the New button. The DNS Service Properties window appears where you can specify the details<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


of the DNS Helper method. The DNS Service Properties window is shown in Figure 51.<br />

Figure 51: DNS Service Properties Window<br />

3. Specify a name for this method in the Service Name field.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

4. Indicate the type of method by selecting DNS Server, File, or System. Depending on the type of<br />

method you select, the parameters you need to specify vary.<br />

– If you selected DNS Server, then specify the <strong>IP</strong> address of this DNS server in the <strong>IP</strong> Address<br />

field. You also need to set a timeout for receving a response from the DNS server, using the<br />

Timeout field.<br />

– If you selected File, then type the name of the file that holds the domain lookup information in<br />

the Filename field. Specify the order in which this information appears in the lookup table,<br />

either Name then <strong>IP</strong> or <strong>IP</strong> then Name.<br />

– If you selected System, then in the Domain Suffix field, specify the suffix to append to each<br />

device name after the name is looked up.<br />

5. Click OK to confirm your settings. The method you specified appears as a hyperlink row within the<br />

DNS Helper <strong>Configuration</strong> table.<br />

6. Click the New button to define more methods for DNS Helpers. If you wish to change the order by<br />

which these methods are retrieved by the DNS Helper, then see Setting the Order of Methods for Name<br />

Retrieval in this section.<br />

7. Click the Save button to save your settings.<br />

129


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

130<br />

Setting the Order of Methods for Name Retrieval<br />

You can change the order in which the methods are retrieved by the DNS Helper. This enables you to ensure<br />

that the most commonly accessed method is retrieved first. This enables a more effective use of resources<br />

during the discovery.<br />

To set the order of DNS Helper methods, click on the Up or Down arrow button in the row corresponding<br />

to the method you wish to move up or down.<br />

Configuring NAT Support<br />

You can configure NAT translation for your discovery. You do this by mapping the address space identifier<br />

for a NAT domain to the <strong>IP</strong> address of the associated NAT gateway device. You can separately decide<br />

whether or not to activate NAT translation for the discovery. For more information on Network Address<br />

Translation, see Chapter 12: Managing NAT Environments on page 341.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Configuring NAT Gateways<br />

To configure NAT gateways:<br />

1. In the Network <strong>Discovery</strong> GUI, select the NAT tab within the <strong>Configuration</strong> option.<br />

Figure 52: Network Address Translation Tab<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

2. Click the New button. The NAT Gateway window appears where you can map the address space<br />

identifier for a NAT domain to the <strong>IP</strong> address of the associated NAT gateway device. The NAT<br />

131


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

132<br />

Gateway window is shown in Figure 53.<br />

Figure 53: NAT Gateway Window With Sample Data<br />

3. Specify the public <strong>IP</strong> address of the NAT gateway device in the <strong>IP</strong> Address field.<br />

4. Specify the address space identifier you wish to use for the associated NAT domain in the Address<br />

Space ID field.<br />

5. Click OK to confirm your settings. The gateway you specified appears as a hyperlink row within the<br />

NAT Support table.<br />

6. Click the New button to define more NAT gateway mappings.<br />

7. Click the Save button to save your settings.<br />

Activating and Deactivating Network Address Translation<br />

To activate Network Address Translation for your discovery:<br />

1. Select the Enable Network Address Translation (NAT) Support check box.<br />

Figure 54: Enable Network Address Translation (NAT) Support Check Box (Selected)<br />

2. Click the Save button to save your settings.<br />

After activating NAT, you must map the discovery scope zones to NAT address spaces, as described<br />

in Adding a New Scope Zone on page 98. Values for NAT addresses are set in the<br />

translations.NATAddressSpaceIds table.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


To deactivate Network Address Translation for your discovery:<br />

1. Deselect the Enable Network Address Translation (NAT) Support check box.<br />

2. Click the Save button to save your settings.<br />

Setting Advanced <strong>Discovery</strong> Parameters<br />

!<br />

Figure 55: Enable Network Address Translation (NAT) Support Check Box (Deselected)<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

You can set advanced features for your discovery. The parameters you set here govern features such as<br />

concurrent processes and timeouts. You can use these parameters to increase the speed of your discovery but<br />

you need to balance speed considerations with the resultant load on the server. Generally, a faster discovery<br />

results in a heavier load on the server in terms of memory usage.<br />

Warning: You should only modify advanced settings for the discovery if you are an advanced user. If you<br />

find that your discovery does not work as expected after modifying these values then use the Reset button<br />

to put these settings back to their default values.<br />

Within the Advanced tab of the Network <strong>Discovery</strong> GUI, you configure the following advanced discovery<br />

options:<br />

Finders: you can configure advanced parameters for the File, Trap, and Sniffer Finders.<br />

Helpers: you can configure advanced parameters for the Ping, SNMP, Telnet, and DNS Helpers.<br />

Failover: you can configure failover for the discovery.<br />

133


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

!<br />

134<br />

Configuring Advanced <strong>Discovery</strong> Parameters<br />

To configure advanced discovery parameters:<br />

1. In the Network <strong>Discovery</strong> GUI, select the Advanced tab within the <strong>Configuration</strong> option.<br />

Figure 56: Advanced Tab<br />

Warning: Do not modify these values unless you understand the effect that they may have on your<br />

discovery. If you find that your discovery does not work as expected after modifying these values then<br />

use the Reset button to return these settings to their default values.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

2. To configure concurrent thread settings for the File, Trap, and Sniffer Finders, change the following<br />

settings:<br />

– Concurrent File Finders: This is the number of threads to be used by the File finder. You can<br />

find more information on this setting in 8.3 Configuring the File Finder on page 228.<br />

– Concurrent Trap Finders: This is the number of threads to be used by the Trap finder. You can<br />

find more information on this setting in 8.5 Configuring the Trap Finder on page 236<br />

– Concurrent Sniffer Finders: This is the number of threads to be used by the Sniffer finder. You<br />

can find more information on this setting in 8.4 Configuring the Sniffer Finder on page 234<br />

3. To configure advanced settings for the Ping finder, change the following settings:<br />

– Concurrent Ping Finders: This is the number of threads to be used by the Ping finder.<br />

– Default Timeout: This is the maximum time to wait for a reply from a pinged address. This<br />

value is expressed in milliseconds.<br />

– Default Number of Retries: This is the number of times a device is to be re-pinged.<br />

– Inter-Ping Time: This is the interval between pinging the addresses in a subnet or list. This<br />

value is expressed in milliseconds.<br />

– Allow Broadcast Pinging: This is a flag used to enable or disable broadcast address pinging.<br />

– Allow Multicast Pinging: This is a flag used to enable or disable multicast address pinging.<br />

You can find more information on these Ping finder settings in 8.2 Configuring the Ping Finder on<br />

page 221.<br />

4. To configure advanced settings for the Telnet Helper, change the following settings:<br />

– Concurrent Telnet Helpers: This is the number of threads to be used by the helper. If you<br />

change this value, be sure that your system is configured to allow at least this number of<br />

concurrent Telnet sessions.<br />

– Default Timeout: This is the maximum time to wait for access to a device, expressed in<br />

milliseconds.<br />

– Number of Retries: This is the number of times to retry the device.<br />

You can find more information on these settings in Configuring the Telnet Helper on page 293.<br />

5. To configure advanced settings for the SNMP Helper, change the following settings:<br />

– Concurrent SNMP Helpers: This is the number of threads to be used by the helper. If you<br />

change this value, be sure that your system is configured to allow at least this number of<br />

concurrent SNMP sessions.<br />

– Timeout: This is the maximum time to wait for access to a device, expressed in milliseconds.<br />

135


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

136<br />

– Number of Retries: This is the number of attempts to retrieve one or more SNMP variables<br />

from a device.<br />

– GetNext Slowdown: This is the delay to introduce between each SNMP GetNext request when<br />

the number of separate GetNext requests issued while retrieving a particular non-scalar SNMP<br />

variable exceeds m_GetNextBoundary. This value is expressed in milliseconds.<br />

– GetNext Boundary: When retrieving a particular non-scalar SNMP variable from a device, this<br />

is the minimum number of GetNext requests to be issued before the delay specified by<br />

m_GetNextSlowDown is introduced.<br />

You can find more information on these settings in Configuring the SNMP Helper on page 292 and in<br />

Configuring SNMP Device Access on page 298.<br />

6. To configure advanced settings for the DNS Helper, change the following settings:<br />

– Concurrent DNS Helpers: This is the number of threads to be used by the helper. If you<br />

change this value, be sure that your system is configured to allow at least this number of<br />

concurrent DNS sessions.<br />

– Default Timeout: This is the maximum time to wait for a response from a device. This value is<br />

expressed in milliseconds.<br />

You can find more information on these settings in Configuring the DNS Helper on page 290.<br />

7. To configure advanced generic discovery settings, change the following settings:<br />

– Enable VLAN Modelling: Indicate whether to model VLANs in this discovery. If you enable<br />

VLAN modelling, then you will be able to partition discovered topologies based on VLAN<br />

membership.<br />

– Enable SysName Naming: Set this option to instruct the system to name devices using the<br />

value of the SNMP sysName variable as the main source of naming information. The<br />

sysName variable must be set and must be unique within the network. You can find more<br />

information on this setting in The config Table on page 431.<br />

– Enable <strong>Discovery</strong> Failover: If you enable discovery failover, then data is cached during the<br />

discovery process to enable data recovery in the event that DISCO fails. A discovery running in<br />

failover mode is slower than a standard discovery, because failover recovery involves storing data<br />

on the disk throughout the discovery process. You can find more information on this setting in<br />

Failover Recovery on page 426.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


!<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a <strong>Discovery</strong><br />

Note: DISCO failover recovery is not to be confused with agent and finder failover recovery,<br />

which are configured directly from the disco.config database. If selected, agent and finder<br />

failover recovery operate regardless of whether DISCO failover recovery is implemented. DISCO<br />

failover is also entirely separate from <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> failover. For more information on<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> failover, see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Installation and Deployment <strong>Guide</strong>.<br />

– Enable File Finder Verification: Indicate whether you wish to use the Ping finder to verify the<br />

existence of devices specified in the file(s) used by the File finder. You may wish to do this if you<br />

have reason to doubt that the devices reported by the File finder are still connected to the<br />

network, possibly because of a rapidly changing network. For more information, see Verifying<br />

the Existence of a Device Reported by the File Finder on page 232.<br />

– Enable Rediscovery Rebuild Layers: Indicate whether you wish to rebuild the topology layers<br />

following a partial rediscovery. If you specify that topology layers should be rebuilt following<br />

partial rediscovery, the result is an accurate topology showing all connectivity. However, the<br />

process of adding new devices takes longer. For more information, see Option to Rebuild<br />

Topology Layers on page 43.<br />

– Enable RT Based MPLS VPLN <strong>Discovery</strong>: For MPLS discoveries, indicate whether you wish<br />

to display provider edge devices only (RT-based MPLS discovery) or edge devices and MPLS<br />

core devices (LSP-based MPLS discovery). For more information, see Configuring MPLS<br />

<strong>Discovery</strong> Method on page 330.<br />

– Enable ifName/ifDescr Interface Naming: Set this option if you wish to change the default<br />

naming convention for discovered interfaces. For more information, see BuildInterfaceName on<br />

page 525.<br />

Warning: If you choose to change the default naming convention for discovered interfaces, you<br />

will need to modify the BuildInterfaceName stitcher to specify your customized naming<br />

convention.<br />

8. Click the Save button to save your settings.<br />

137


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

4.3 Starting and Monitoring a <strong>Discovery</strong><br />

138<br />

Once you have configured the discovery, and provided CTRL is running, you can start, and, if necessary,<br />

stop the discovery.<br />

Note: If CTRL is not running, you must ensure that it is correctly configured, either by using the automatic<br />

configuration option from the installation process or by following the instructions in Chapter 2: Process<br />

Control with CTRL on page 47. You can start CTRL using the command:<br />

ncp_ctrl -domain NCOMS. Replace NCOMS with your domain name.<br />

You can perform a full discovery, a full rediscovery and a partial rediscovery.<br />

Full <strong>Discovery</strong>: Run a full discovery if you wish to build a topology for a network that has not been<br />

discovered before.<br />

Rediscovery: Run a rediscovery if you have already built a topology for this network but you know<br />

that there have been a number of changes to the network. These changes include addition of new<br />

devices, change in configuration of existing devices and change in connectivity relationships between<br />

devices.<br />

– Run a Full Rediscovery if you wish to rediscover your entire network.<br />

– Run a Partial Rediscovery if you know that the changes to your network are limited to small<br />

number of devices. You first need to configure scoping and seeding for the rediscovery. If the<br />

relationship of these devices with neighboring devices has changed, then these neighboring<br />

devices may also be rediscovered. If the partial rediscovery needs to discover a large amount of<br />

devices based on connectivity information, then DISCO initiates a full rediscovery. The<br />

mechanism based on which DISCO makes this decision is described in<br />

You can use the Network <strong>Discovery</strong> GUI to force an immediate rediscovery. However, by default, following<br />

discovery DISCO adopts a reactive state, ready to conduct a rediscovery when either a new device is found<br />

or an existing device changes. In order to find new devices at any point in the discovery, the finders must be<br />

active. Since the network has already been discovered, the most practical finder to deploy during rediscovery<br />

is the Trap finder, which listens for traps (messages that indicate a change in the state of the device).<br />

For more information on how to configure DISCO to adopt a reactive state following a discovery, see<br />

Finding New Devices on page 41.<br />

Note: You can also force a rediscovery by making OQL inserts into the finders.rediscovery table,<br />

specifying the <strong>IP</strong> address or subnet to be rediscovered. For more information, see Forcing Rediscoveries of<br />

Particular Devices on page 44.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Running Discoveries and Rediscoveries<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Starting and Monitoring a <strong>Discovery</strong><br />

Use the <strong>Discovery</strong> Type option menu and the Start <strong>Discovery</strong> button to launch the desired discovery or<br />

rediscovery. You can run a full discovery, a full rediscovery or a partial rediscovery:<br />

Full <strong>Discovery</strong>: Run a full discovery if you wish to build a topology for a network that has not been<br />

discovered before.<br />

Rediscovery: Run a rediscovery if you have already built a topology for this network but you know<br />

that there have been a number of changes to the network. These changes include addition of new<br />

devices, change in configuration of existing devices and change in connectivity relationships between<br />

devices.<br />

– Run a Full Rediscovery if you wish to rediscover your entire network.<br />

– Run a Partial Rediscovery if you know that the changes to your network are limited to a small<br />

number of devices.<br />

Running a Full <strong>Discovery</strong><br />

To run a full discovery:<br />

1. First configure your discovery as described in Configuring a <strong>Discovery</strong> on page 96.<br />

2. Within the <strong>Precision</strong> Admin page, click the <strong>Discovery</strong> Status tab.<br />

3. Click the Start <strong>Discovery</strong> button to launch the discovery.<br />

As the discovery runs, status information is displayed under the <strong>Discovery</strong> Details, <strong>Discovery</strong><br />

Details, and <strong>Discovery</strong> Details tabs, as described in Table 24 Description of Status Tabs on page 94.<br />

Running a Full Rediscovery<br />

To run a full rediscovery:<br />

1. First make any necessary changes to your discovery configuration, as described in Configuring a<br />

<strong>Discovery</strong> on page 96.<br />

2. Within the <strong>Precision</strong> Admin page, click the <strong>Discovery</strong> Status tab.<br />

3. Click the Start Full Rediscovery button to launch the rediscovery.<br />

As the rediscovery runs, status information is displayed under the <strong>Discovery</strong> Details, <strong>Discovery</strong><br />

Details, and <strong>Discovery</strong> Details tabs, as described in Table 24 Description of Status Tabs on page 94.<br />

139


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

140<br />

Running a Partial Rediscovery<br />

To run a partial rediscovery:<br />

1. Within the <strong>Precision</strong> Admin page, click the <strong>Discovery</strong> Status tab.<br />

2. Click the Start Partial Rediscovery button.<br />

The Partial Rediscovery window appears where you can specify <strong>IP</strong> addresses or subnets containing<br />

devices to be rediscovered. The Partial Rediscovery window is shown in Figure 57.<br />

Figure 57: Partial Rediscovery window<br />

3. To add an <strong>IP</strong> address or subnet to the list of devices to be rediscovered, click New… and type an <strong>IP</strong><br />

address or a netmask in the Partial Redsicovery Node/Subnet window, as shown in Figure 58.<br />

Figure 58: New Partial Rediscovery Node/Subnet window<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Starting and Monitoring a <strong>Discovery</strong><br />

4. Once you have specified all <strong>IP</strong> addresses and subnets to rediscover, you can modify the disovery scope<br />

to limit the scope of this rediscovery. To do this, click Scope…. The Edit Partial Rediscovery Scope<br />

window appears, showing the scope settings that you set for the discovery.<br />

Figure 59: Edit Partial Rediscovery Scope window<br />

5. To add a scope zone, click the New button and and type an <strong>IP</strong> address and a netmask in the Scope<br />

Properties window, as shown in Figure 60.<br />

Figure 60: Scope Properties window<br />

6. Once you have specified all scope zones, click OK in the Edit Partial Rediscovery Scope window.<br />

Note: If you wish to save the scope zones changes you made to the DiscoScope.cfg configuration<br />

file, then select Save changes to configuration file.<br />

141


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

142<br />

7. Click Go on the Partial Rediscovery window to launch the discovery.<br />

As the discovery runs, status information is displayed under the <strong>Discovery</strong> Details, <strong>Discovery</strong> Tables,<br />

and <strong>Discovery</strong> Devices tabs, as described in Table 24 Description of Status Tabs on page 94.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


4.4 Using the <strong>Discovery</strong> Wizard<br />

!<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Using the <strong>Discovery</strong> Wizard<br />

Note: The discovery configuration wizard does not enable you to perform complex discoveries involving<br />

NAT translations, MPLS configuration and other advanced features. To perform these complex discoveries,<br />

users should refer to information on using the Network <strong>Discovery</strong> GUI in Configuring a <strong>Discovery</strong> on<br />

page 96. Advanced users should refer to information on configuring the discovery using OQL inserts and<br />

configuration files in Configuring the <strong>Discovery</strong> on page 181.<br />

Scope: You can specify whether to run a scoped or unscoped discovery. A scoped discovery restricts<br />

the discovery to a certain part of your network and is recommended in most cases. An unscoped<br />

discovery attempts an unrestricted discovery in your entire network.<br />

Warning: If there are routes out of your network to the Internet, then an unscoped discovery is not<br />

recommended as it will find these routes and will proceed to discover parts of the Internet.<br />

SNMP and Telnet Passwords: You can specify the SNMP and Telnet passwords required by your<br />

network devices so that the discovery process can interrogate these devices to obtain data. You can<br />

specify a global password, or different passwords for each device or subnet.<br />

Type of <strong>Discovery</strong>: You can specify a Layer 3 or a Layer 2 discovery. A Layer 3 discovery is quicker<br />

and is recommended for your first discovery. However, the results of a Layer 3 discovery cannot be<br />

used for root cause analysis. A Layer 2 discovery is more detailed and the results can be used for root<br />

cause analysis. For more information on root cause analysis, see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Monitoring<br />

and RCA <strong>Guide</strong>.<br />

Modelling VLANs: You can configure the discovery to model VLANs in the resulting topology. This<br />

enables VLANs to be considered when performing root cause analysis. VLANs are a Layer 2 concept<br />

and VLAN modelling is required for Layer 2 discoveries only.<br />

Filters: You can filter out devices with no SNMP access. You can also filter out end-nodes such as<br />

workstations and printers.<br />

It is recommended that you filter out end-nodes so that your discovery runs as quickly as possible.<br />

Filtering out all end nodes in networks that have large numbers of end nodes can lead to significant<br />

speed and performance improvements in your discovery<br />

143


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

144<br />

Optimizing <strong>Discovery</strong>: You can tune the discovery so that the results match your specific needs. For<br />

example, you can specify that the discovery should find the best possible connectivity and richness of<br />

information. Alternatively, you can opt to compromise on richness of information and specify the<br />

fastest possible discovery time.<br />

Based on what you specify, the wizard will determine which agents to switch on and off. If you select<br />

best possible connectivity, then the wizard simply switches on all agents. If you are not concerned<br />

with connectivity and your network is largely made up of Cisco devices, then the wizard can use<br />

Cisco-specific protocols to greatly speed up the discovery. However, if you are an advanced user and<br />

you wish to make a more precise selection of exactly which agents are run to discover connectivity,<br />

then you should use the tabbed Network <strong>Discovery</strong> GUI to configure your discovery, as described in<br />

Configuring a <strong>Discovery</strong> on page 96.<br />

Cisco Networks: If a large proportion of your network is made up of Cisco hardware and you prefer<br />

discovery speed to accurate connectivity, then the wizard will direct you to use the Cisco <strong>Discovery</strong><br />

Protocol (CDP) and the Spanning Tree Protocol (STP) to perform the discovery. These two<br />

protocols provide fast discovery. In terms of connectivity, these protocols discover how switches are<br />

connected to each other. However, while the CDP protocol is able to discover connectivity between<br />

Cisco switches and CIsco routers, the STP protocol is not able to discover connectivity between<br />

switches and end nodes or connectivity between switches and routers.<br />

The CDP and STP protocols find Layer 2 connectivity only. For this reason they are only used, (and<br />

the wizard only asks you about them) if you select to run a Layer 2 and Layer 3 discovery.<br />

Launching the <strong>Discovery</strong> Wizard<br />

Launch the <strong>Configuration</strong> section of the Network <strong>Discovery</strong> GUI. This button is shown in Figure 61.<br />

Figure 61: Wizard button<br />

As you progress through the wizard, you step through a series of screens in which you specify values for<br />

discovery configuration parameters. You may find data in some of these tabbed screens. This is data specified<br />

in earlier configurations and held in the relevant discovery configuration file.<br />

After you launch the wizard, the Welcome window appears. Click Next to continue.<br />

Note: You can click Cancel at any point to exit the wizard, without saving any discovery settings.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Scoping and Seeding the <strong>Discovery</strong><br />

!<br />

The next window provides the option of a scoped or unscoped discovery.<br />

1. Select Scoped or Unscoped.<br />

Figure 62: Scoped or Unscoped Window<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Using the <strong>Discovery</strong> Wizard<br />

– Scoped: Scoping restricts the discovery to a certain part of your network. In order to specify a<br />

scoped discovery, you must tell the wizard which area of the network to restrict the discovery to,<br />

and you must assign <strong>IP</strong> addresses or subnets as seeds to ping in order to begin the discovery.<br />

– Unscoped: An unscoped discovery attempts to discover your entire network. However, you still<br />

need to assign <strong>IP</strong> addresses or subnets as seeds to ping in order to begin the discovery.<br />

Warning: If there are routes out of your network to the Internet, then an unscoped discovery is<br />

not recommended as it will find these routes and start to discover parts of the Internet.<br />

145


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

146<br />

2. When you have selected one of these options, click Next.<br />

– If you selected the Scoped option, then the <strong>Discovery</strong> Scope window appears, as shown in<br />

Figure 63.<br />

– If you selected the Unscoped option, then the <strong>Discovery</strong> Seed window appears, as shown in<br />

Figure 65 on page 148.<br />

3. Specify the scope of the discovery.<br />

Figure 63: <strong>Discovery</strong> Scope Window<br />

In this window, you specify the following:<br />

– Which area of the network to restrict the discovery to. You can specify one or more subnets<br />

within your network.<br />

– Which <strong>IP</strong> addresses or subnets as seeds to ping in order to begin the discovery<br />

The information that you specify in this window is saved to the<br />

DiscoScope.DOMAIN_NAME.cfg schema file, where DOMAIN_NAME is the name of the<br />

discovery domain, for example NCOMS. You can find more information on the purpose and function<br />

of the DiscoScope.cfg schema file in Introduction to Scope on page 208.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Using the <strong>Discovery</strong> Wizard<br />

4. Specify the subnet or subnets to use for both scoping and seeding by clicking the New button and<br />

typing an <strong>IP</strong> address and a netmask in the New <strong>Discovery</strong> Scope window, as shown in Figure 64.<br />

Figure 64: New <strong>Discovery</strong> Scope Window<br />

The subnets that you specify are written to two discovery database tables:<br />

– The scope.zones table that stores the subnets that define the scope of the discovery. For<br />

more advanced information on scoping within a discovery, see Defining <strong>Discovery</strong> Zones on<br />

page 209. For more information on the scope.zones table, see The zones Table on<br />

page 442.<br />

– The pingFinder.pingRules table that stores the device or subnet addresses at which the<br />

finder begins looking for devices. The subnet or subnets that you specify are added to this table<br />

and each device within these subnets are pinged by the finder. For more advanced information<br />

on configuring the Ping finder, see Configuring the Ping Finder on page 183. For more<br />

information on the pingFinder.pingRules table, see Seeding the Ping Finder on<br />

page 222.<br />

Specify one or more subnets, and then click Next to proceed to the next window, shown in Figure 67<br />

SNMP Passwords Window on page 150.<br />

147


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

148<br />

5. If you selected the Unscoped option, then the <strong>Discovery</strong> Seed window appears.<br />

Figure 65: <strong>Discovery</strong> Seed Window<br />

In this window, you specify the seeds to use for your unscoped discovery. These are <strong>IP</strong> addresses to<br />

ping in order to begin the discovery.<br />

The information that you specify in this window is saved to the<br />

DiscoPingFinderSeeds.DOMAIN_NAME.cfg schema file, where DOMAIN_NAME is the<br />

name of the discovery domain, for example NCOMS. You can find more information on the purpose<br />

and function of the DiscoPingFinderSeeds.cfg schema file in Configuring the Ping Finder<br />

on page 221.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Using the <strong>Discovery</strong> Wizard<br />

6. Specify one or more <strong>IP</strong> addresses by clicking the New… button and typing an <strong>IP</strong> address in the New<br />

<strong>Discovery</strong> Seed window, as shown in Figure 66.<br />

Figure 66: New <strong>Discovery</strong> Seed Window<br />

The seed or seeds that you specify are written to the pingFinder.PingRules table. This table<br />

stores the device addresses at which the finder begins looking for devices. The <strong>IP</strong> addresses that you<br />

specify are added to this table and are pinged by the finder. For more advanced information on<br />

configuring the Ping finder, see Configuring the Ping Finder on page 183. For more information on<br />

the pingFinder.pingRules table, see Seeding the Ping Finder on page 222. Specify one or<br />

more <strong>IP</strong> addresses as seeds and then click Next to proceed.<br />

149


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

Setting SNMP Passwords<br />

150<br />

The next window provides the option of setting SNMP passwords.<br />

1. The SNMP Passwords window appears.<br />

Figure 67: SNMP Passwords Window<br />

In this window you specify address-specific, network-specific or global community strings, and, in the<br />

case of SNMP version 3, specify passwords for these community strings.<br />

The information that you specify in this window is saved to the<br />

SnmpStackSecurityInfo.DOMAIN_NAME.cfg schema file, where DOMAIN_NAME is the<br />

name of the discovery domain, for example NCOMS. You can find more information on the purpose<br />

and function of the SnmpStackSecurityInfo.cfg schema file in Configuring the Device<br />

SNMP Access Parameters on page 187.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Using the <strong>Discovery</strong> Wizard<br />

2. For each SNMP community string and associated passwords that you wish to define, click the New<br />

button, which appears above the SNMP Passwords table. The SNMP Password window appears. In<br />

this window you can specify address-specific, network-specific or global SNMP community strings,<br />

and supply passwords for these community strings. The SNMP Password window and associated<br />

instructions for completing the fields are shown in Figure 41 SNMP Password Window With Sample<br />

Community String Data on page 113.<br />

3. Once you have finished defining SNMP community strings, click Next.<br />

Setting Telnet Access Parameters<br />

The next window provides the option of setting Telnet access parameters.<br />

1. The Telnet Paswords window appears.<br />

Figure 68: Telnet Passwords Window<br />

In this window you specify prompts, login IDs and login passwords for Telnet accessible devices.<br />

The information that you specify in this window is saved to the<br />

TelnetStackPasswords.DOMAIN_NAME.cfg schema file, where DOMAIN_NAME is the<br />

name of the discovery domain, for example NCOMS. You can find more information on the purpose<br />

and function of the TelnetStackPasswords.cfg schema file in Configuring Telnet Device<br />

Access on page 303.<br />

151


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

152<br />

2. For each set of Telnet accessible devices for which you wish to define prompts and passwords, click<br />

the New button, which appears above the Telnet Passwords table. The Telnet Password window<br />

appears. In this window you can specify a set of Telnet accessible devices (all devices, all devices<br />

within a specified subnet or a single <strong>IP</strong> address) together with prompts, login IDs and login passwords<br />

for this set of devices. The Telnet Password window and associated instructions for completing the<br />

fields are shown in Figure 43 Telnet Password Window With Sample Data on page 116.<br />

3. Once you have finished defining Telnet passwords, click Next.<br />

Specifying the Type of <strong>Discovery</strong><br />

The next window provides the option of specifying the type of discovery. You can specify either a Layer 3<br />

or a Layer 2 discovery.<br />

1. The <strong>Discovery</strong> Type window appears.<br />

Figure 69: <strong>Discovery</strong> Type Window<br />

In this window you specify whether to run a Layer 3 or a Layer 2 discovery. A Layer 3 discovery is<br />

quicker and is recommended for your first discovery. However, the results of a Layer 3 discovery<br />

cannot be used for root cause analysis. A Layer 2 discovery is more detailed and the results can be used<br />

for root cause analysis. For more information on root cause analysis, see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

Monitoring and RCA <strong>Guide</strong>.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


2. When you have specified one of these options, click Next.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Using the <strong>Discovery</strong> Wizard<br />

– If you selected Layer 3 option, then the End Node <strong>Discovery</strong> window appears, as shown in<br />

Figure 71 End Node <strong>Discovery</strong> Window on page 154.<br />

– If you selected Layer 2 and Layer 3 option, then the VLAN Modelling window appears, as<br />

shown in Figure 70.<br />

Figure 70: VLAN Modelling Window<br />

In this window, you configure the discovery to model VLANs in the resulting topology. This enables<br />

VLANs to be considered when performing root cause analysis. VLANs are a Layer 2 concept and<br />

VLAN modelling is required for Layer 2 discoveries only.<br />

153


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

154<br />

3. Specify whether you wish to model VLANs. When you have specified an option, click Next. The End<br />

Node <strong>Discovery</strong> window appears.<br />

Figure 71: End Node <strong>Discovery</strong> Window<br />

This window provides the option to filter out end node devices such as workstations and printers.<br />

This ensures that your discovery runs as quickly as possible. You can also opt to filter out devices with<br />

no SNMP access.<br />

Tip: It is recommended that you filter out end-nodes so that your discovery runs as quickly as possible.<br />

Filtering out all end nodes in networks that have large numbers of end nodes can lead to significant<br />

speed and performance improvements in your discovery.<br />

4. When you have specified one of these options, click Next.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Optimizing the <strong>Discovery</strong><br />

The next window provides the opportunity to optimize the discovery.<br />

1. The <strong>Discovery</strong> Optimization window appears.<br />

Figure 72: <strong>Discovery</strong> Optimization Window<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Using the <strong>Discovery</strong> Wizard<br />

In this window you can optimize the discovery for connectivity information, richness of information<br />

and speed.<br />

– Best possible connectivity accuracy and richness of information: This option provides<br />

comprehensive connectivity information between switches, end nodes and routers as well as<br />

detailed information on each device discovered. However, the discovery may require a<br />

significant amount of time to complete.<br />

– Best possible connectivity accuracy but prefer speed to richness of information: This option<br />

provides comprehensive connectivity information. However, the discovery provides less detailed<br />

information on each device discovered in order to provide a faster discovery.<br />

155


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

156<br />

– Rich device information but prefer speed to accurate connectivity: This option provides<br />

detailed information on each device discovered. However, the discovery provides less detailed<br />

connectivity information in order to provide a faster discovery. For example, the discovery may<br />

provide information on how switches are connected to each other, but it may not provide<br />

information on connectivity between switches and end nodes or between switches and routers.<br />

Note: This option is more suitable if you are using <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> to gather inventory data<br />

rather than for performing root cause analysis (RCA). RCA is dependent on accurate<br />

connectivity data.<br />

– Fastest discovery time: This option focuses on the speed of the discovery. However, limited<br />

connectivity information is provided as well as less detailed information on each single device.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


2. When you have specified one of these options, click Next.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Using the <strong>Discovery</strong> Wizard<br />

– If you selected either of the first two options, this means that accurate connectivity is important.<br />

The Network Reliability window appears, as shown in Figure 75 Network Reliability Window on<br />

page 159.<br />

– If you selected either of the last two options, this means that you are willing to compromise on<br />

the accuracy of connectivity information in order to ensure a faster discovery. In this case, the<br />

wizard asks how much of your network is made up of Cisco devices. If a large proportion of the<br />

network is made up of Cisco devices, then the wizard can switch off agents that discover<br />

connectivity for non-Cisco devices, thereby speeding up the discovery significantly. The Cisco<br />

Hardware window appears, as shown in Figure 73.<br />

Figure 73: Cisco Hardware Window<br />

Specify how much of your network is made up of Cisco hardware.<br />

– All of it: By selecting this option you direct the wizard to run the Cisco <strong>Discovery</strong> Protocol<br />

(CDP).<br />

– Most of it, Some of it, Don’t know: By selecting these options you direct the wizard to run the<br />

Cisco <strong>Discovery</strong> Protocol (CDP). If you chose a Layer 2 and Layer 3 discovery (Figure 69<br />

<strong>Discovery</strong> Type Window on page 152) or if you indicated that you wished to exclude end nodes<br />

from the discovery (Figure 71 End Node <strong>Discovery</strong> Window on page 154) then this option<br />

157


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

158<br />

invokes the Spanning Tree Protocol (STP) as well as CDP.<br />

– None of it: If you select this option then neither the CDP nor the STP protocol is used.<br />

3. When you have selected one of these options, click Next.<br />

– If your response to the Cisco hardware question was All of it or None of it, then the Network<br />

Reliability window appears, as shown in Figure 75 Network Reliability Window on page 159.<br />

– If your response to the Cisco hardware question was Most of it, Some of it, or Don’t know,<br />

then the Spanning Tree Protocol window appears, as shown in Figure 74.<br />

Figure 74: Spanning Tree Protocol Window<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Using the <strong>Discovery</strong> Wizard<br />

4. When you have specified one of these options, click Next. The Network Reliability window appears,<br />

as shown in Figure 75.<br />

Figure 75: Network Reliability Window<br />

Choose an option corresponding to the reliability of your network when responding to ping and<br />

SNMP requests:<br />

– Very reliable: This option directs the wizard to apply very short timeouts, without any retries.<br />

This is appropriate for a very reliable network and results in fast discoveries. If, in the <strong>Discovery</strong><br />

Optimization window (Figure 72 <strong>Discovery</strong> Optimization Window on page 155), you requested<br />

fastest possible discovery time at the expense of both connectivity information and richness of<br />

information, then the timeouts set by this option are even shorter.<br />

– Quite reliable: This option directs the wizard to apply slightly longer timeouts, with a single<br />

retry for both SNMP and ping requests.<br />

159


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

160<br />

– Not very reliable: This option directs the wizard to apply longer timeouts, two retries for<br />

SNMP requests and one retry for ping requests. These longer times are suitable for less reliable<br />

networks.<br />

– Don’t know: If you select this option then the wizard applies the same timeouts and retries as<br />

used for the Quite reliable option.<br />

5. When you have specified one of these options, click Next.<br />

Completing the <strong>Configuration</strong><br />

The next window provides the option to review any of your settings. You can also save the settings here, and,<br />

optionally, start the discovery with the settings that you configured.<br />

1. The <strong>Configuration</strong> Summary window appears, as shown in Figure 76.<br />

Figure 76: <strong>Configuration</strong> Summary Window<br />

This window summarizes the discovery configuration settings that you specified using the wizard.<br />

– Click on any of the hyperlinks to go back to the relevant window. You can then modify the<br />

settings as appropriate.<br />

– Select Start <strong>Discovery</strong> to specify that you wish to run the discovery with these settings.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


2. When you are content with the discovery settings, click Finish:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Using the <strong>Discovery</strong> Wizard<br />

– If you selected Start <strong>Discovery</strong> then the discovery starts, using the discovery configuration<br />

settings that you specified using the wizard.<br />

– If you did not select Start <strong>Discovery</strong> then the discovery settings are saved.<br />

161


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

4.5 Reading and Writing <strong>Configuration</strong> Files<br />

162<br />

The binary named ncp_config acts as a configuration file server. It provides a means for the<br />

configuration GUIs to read from and write to schema files. It is started, and later stopped, automatically by<br />

the shell scripts that launch the GUIs and so in general need not be manually started.<br />

You can also start CONFIG manually with the following command line—optional arguments are shown<br />

enclosed in square brackets.<br />

ncp_config –domain DOMAIN_NAME [ -debug DEBUG ] [ -latency LATENCY ]<br />

[ -read_schemas_from DIRECTORY_NAME ] [ -write_schemas_to DIRECTORY_NAME ] [ -help ]<br />

[ -version ]<br />

The -read_schemas_from and -write_schemas_to command line options can only be used<br />

when starting ncp_config manually.<br />

Table 25: Explanation of Command Line Options (1 of 2)<br />

Option Explanation<br />

-domain DOMAIN_NAME The name of the domain under which to run CONFIG. Data saved in<br />

the Network <strong>Discovery</strong> GUI is saved to the domain name that you<br />

specify here.<br />

-debug DEBUG The level of debugging output (1-4, where 4 represents the most<br />

detailed output).<br />

-latency LATENCY The maximum time in milliseconds (ms) that CONFIG waits to connect<br />

to another <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> process using the messaging bus. This<br />

option is useful for large and busy networks where the default settings<br />

can cause processes to assume that there is a problem when in fact<br />

the communication delay is a result of network traffic.<br />

-read_schemas_from DIRECTORY_NAME The full path of the directory from which CONFIG reads the schema<br />

files.<br />

If this option is not specified, NCHOME/etc/precision is used as a<br />

default.<br />

Note: NCHOME is the environment variable that contains the path to<br />

the <strong>Netcool</strong> Suite home directory. For information on how this<br />

environment variable varies with platform, see Operating System<br />

Considerations on page 10.<br />

-write_schemas_to DIRECTORY_NAME The full path to which CONFIG writes the schema files.<br />

If no path is specified, CONFIG updates the files in the source directory,<br />

saving a backup of the existing schema.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 25: Explanation of Command Line Options (2 of 2)<br />

Option Explanation<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Reading and Writing <strong>Configuration</strong> Files<br />

-help Displays the command line options. Does not start the component<br />

even if used in conjunction with other arguments.<br />

-version Displays the version number of the component. Does not start the<br />

component even if used in conjunction with other arguments.<br />

163


Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI<br />

164<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


5. Querying_Databases.fm July 5, 2005<br />

Chapter 5: Querying <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

Databases<br />

This chapter describes the methods you can use to query the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> databases, the GUI-based<br />

OQL workbench and the OQL Service Provider, a command line interface.<br />

This chapter contains the following sections:<br />

Accessing the <strong>Precision</strong> Server Databases on page 166<br />

The OQL Workbench on page 167<br />

The OQL Service Provider on page 169<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 165


Chapter 5: Querying <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Databases<br />

5.1 Accessing the <strong>Precision</strong> Server Databases<br />

166<br />

The Object Query Language (OQL) is used by all the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> processes to interact with their<br />

databases. This chapter introduces the two methods available for issuing OQL commands to access the<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> databases:<br />

The GUI-based OQL Workbench. This is described in The OQL Workbench on page 167.<br />

The OQL Service Provider, a command line interface. This is described in The OQL Service Provider<br />

on page 169.<br />

This chapter includes example OQL statements. Refer to Appendix B: The Object Query Language on<br />

page 479 for full details of the language syntax.<br />

Using either the GUI-based OQL workbench or the OQL Service Provider, you can access the databases of<br />

any process. Here are some of the activities that you can perform on the databases:<br />

Insert data into tables, for example, to cause CTRL to launch a managed process or to start or stop<br />

the discovery.<br />

Create new databases or tables.<br />

Delete existing databases, tables, or records.<br />

Interrogate existing databases or tables, for example, to identify the current status of the discovery.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


5.2 The OQL Workbench<br />

The OQL Workbench provides GUI-driven access to the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> databases.<br />

Accessing the OQL Workbench<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

The OQL Workbench<br />

To access the OQL Workbench, log into the <strong>Netcool</strong> GUI Foundation, as described in the <strong>Netcool</strong>/<strong>Precision</strong><br />

<strong>IP</strong> Topology Visualization <strong>Guide</strong>. The <strong>Netcool</strong> GUI Foundation is installed as part of the <strong>Netcool</strong>/<strong>Precision</strong><br />

<strong>IP</strong> installation, and is the framework within which all <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> web interfaces appear.<br />

Once you have logged into the <strong>Netcool</strong> GUI Foundation, select the <strong>Precision</strong> Admin page. This page<br />

provides access to the OQL Workbench, as well as the Network <strong>Discovery</strong> GUI and MySQL database<br />

settings, as shown in Figure 77. This figure shows the <strong>Precision</strong> Admin page with the OQL Workbench tab<br />

open.<br />

Figure 77: OQL Workbench<br />

167


Chapter 5: Querying <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Databases<br />

Using the OQL Workbench<br />

168<br />

You can use the OQL Workbench to perform queries on <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> component databases.<br />

Using the OQL Workbench you can perform all of the operations that you perform with the OQL Service<br />

Provider. This section shows you the steps to perform database operations using the OQL Workbench. For<br />

examples of database operations, see Using the OQL Service Provider on page 170.<br />

To issue a database command using the OQL Workbench:<br />

1. Access the OQL workbench as described in Accessing the OQL Workbench on page 167.<br />

2. Click the Domain drop-down list box and select the domain in which to issue the OQL commands.<br />

3. Click the Service drop-down list box and select the service that you wish to interrogate. See Table 28<br />

on page 171 for a full list of OQL service names.<br />

4. Click in the Query field and type an OQL command. If your query requires multiple lines, then click<br />

the Advanced OQL Query button, shown in Table 26, and type the query in the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

OQL Workbench window. Click OK.<br />

5. Click the Go button, shown in Table 26, to issue the OQL command. The results appear in the main<br />

browser window.<br />

Table 26: Icons in the OQL Workbench<br />

Item Name Description<br />

Advanced<br />

OQL Query<br />

Enables you to specify a multiple line OQL command.<br />

Go Click here to issue your OQL command.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


5.3 The OQL Service Provider<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

The OQL Service Provider<br />

You can use the OQL Service Provider to perform queries on <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> component databases.<br />

Starting the OQL Service Provider<br />

To launch the OQL Service Provider and log into the databases of a given <strong>Precision</strong> Server component, use<br />

the following command line; optional arguments are shown enclosed in square brackets.<br />

ncp_oql [ -agent AGENT_NAME.KEY ] [ -debug DEBUG ] –domain DOMAIN_NAME [ -help ]<br />

[ -history HISTORY_SIZE ] [ -latency LATENCY ] [ -oqldump ] [ -password PASSWORD ]<br />

[ -query QUERY ] -service SERVICE_NAME -username USERNAME<br />

Table 27: Explanation of Command Line Options (1 of 2)<br />

Option Explanation<br />

-agent AGENT_NAME.KEY Used in conjunction with the MonitorAgent service to log into a<br />

Polling agent.<br />

AGENT_NAME is the name of the executable that is running the<br />

poll.<br />

KEY is the key under which the agent is running, as specified in<br />

the poll definition.<br />

The following example command could be used to log into the Ping<br />

Polling agent running in the NCOMS domain:<br />

ncp_oql -domain NCOMS -username admin -service<br />

MonitorAgent -agent ncp_m_timedstitcher.PING<br />

-debug DEBUG The level of debugging output (1-4, where 4 represents the most<br />

detailed output).<br />

-domain DOMAIN_NAME The name of the relevant domain. Ensure that the process whose<br />

databases you wish to query is running.<br />

-help<br />

All <strong>Precision</strong> Server components have a special -help option that<br />

displays the command line options. The component is not started<br />

even if –help is used in conjunction with other arguments.<br />

-history HISTORY_SIZE The size of the command line history.<br />

-latency LATENCY The maximum time in milliseconds (ms) that the service provider waits<br />

to connect to another <strong>Precision</strong> Server process using the messaging<br />

bus. This option is useful for large and busy networks where the<br />

default settings can cause processes to assume that there is a problem<br />

when in fact the communication delay is a result of network traffic.<br />

-oqldump Using this argument results in the databases from the application<br />

being converted into OQL create and insert statements. This can be a<br />

useful means of recording the internal state of a component for<br />

debugging or analysis at a later date.<br />

169


Chapter 5: Querying <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Databases<br />

170<br />

Table 27: Explanation of Command Line Options (2 of 2)<br />

Option Explanation<br />

-password PASSWORD The password to access the OQL Service Provider.<br />

Note: In order to log into the OQL Service Provider, AUTH must be running in the same domain as the<br />

service that you are logging into.<br />

Using the OQL Service Provider<br />

This feature is provided for use in conjunction with the -query<br />

option, to enable OQL queries to be placed in scripts.<br />

For security reasons you must use this option carefully, as other users<br />

may be able to see your password. Micromuse recommend that you<br />

enter your password when prompted rather than at the command<br />

line.<br />

-query QUERY A query to pass to the OQL Service Provider, designed to allow OQL<br />

statements in scripts (used in conjunction with -password).<br />

-service SERVICE_NAME The service you wish to interrogate. See Table 28 on page 171 for a full<br />

list of OQL service names.<br />

-username USERNAME The username to use to log into the service provider.<br />

-version<br />

All <strong>Precision</strong> Server components have a special -version option<br />

that displays the version number of the component. The component is<br />

not started even if –version is used in conjunction with other<br />

arguments.<br />

Once you have logged into the service provider, you can issue OQL statements to act on the databases of<br />

the service that you are logged into. You must terminate statements with a semi-colon (;) and the go<br />

keyword. You can also use the send keyword instead of go.<br />

The following example shows a user logging into the DISCO databases and querying the disco.status<br />

table. In this example (and throughout this chapter) OQL keywords have been shown in bold for clarity.<br />

ncp_oql -domain NCOMS -service Disco -username admin<br />

ncp_oql ( <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> OQL Interface )<br />

Copyright (C) Micromuse Ltd., 1997-2003. All Rights Reserved.<br />

Password:<br />

|phoenix:1.> select * from disco.status;<br />

|phoenix:2.> go<br />

.<br />

{<br />

m_<strong>Discovery</strong>Mode=0;<br />

m_Phase=1;<br />

m_BlackoutState=0;<br />

m_CycleCount=0;<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


m_ProcessingNeeded=0;<br />

m_Full<strong>Discovery</strong>=0;<br />

}<br />

( 1 record(s) : Transaction complete )<br />

|phoenix:1.><br />

Component Service Names<br />

The following table lists the OQL service name for each <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> component.<br />

Table 28: Components and Their OQL Service Names<br />

Component OQL service name<br />

AMOS Amos<br />

AUTH Auth<br />

CLASS Class<br />

CONFIG Config<br />

CTRL Ctrl<br />

Desktop Desktop<br />

DISCO Disco<br />

DIST Dist<br />

EXEC Exec<br />

Helper Server Helper<br />

MODEL Model<br />

MONITOR Monitor<br />

Ping finder DiscoPingFinder<br />

Polling agent MonitorAgent<br />

Sequential ID Trap DIST Adaptor SidTrap<br />

SNMP Helper SnmpHelper<br />

STORE Store<br />

TrapMux TrapMux<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

The OQL Service Provider<br />

171


Chapter 5: Querying <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Databases<br />

172<br />

The Command Line History<br />

There is a history function available at the OQL command prompt. The hist keyword displays a list of<br />

previously executed commands, which can be executed by typing ! followed by the number of the command<br />

you wish to repeat. An example of the hist function is shown below.<br />

|phoenix:1.> hist<br />

1: select * from disco.status<br />

2: select * from disco.managedProcesses<br />

3: select * from disco.config<br />

|phoenix:1.> !2<br />

select * from disco.managedProcesses<br />

..............................................<br />

You can also type !! at any time to repeat the previous command.<br />

Specifying a Query Using the -query Option<br />

If necessary, you can launch the service provider in a special mode that executes a single specified query and<br />

disconnects from the service provider. This allows OQL queries to be put into scripts.<br />

The following example shows the -query option in use.<br />

ncp_oql -domain NCOMS -service Disco -username admin -password "password" -query "select<br />

* from disco.status;"<br />

ncp_oql ( <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> OQL Interface )<br />

Copyright (C) Micromuse Ltd., 1997-2003. All Rights Reserved.<br />

Executing query:<br />

select * from disco.status;<br />

.<br />

{<br />

m_<strong>Discovery</strong>Mode=0;<br />

m_Phase=1;<br />

m_BlackoutState=0;<br />

m_CycleCount=0;<br />

m_ProcessingNeeded=0;<br />

m_Full<strong>Discovery</strong>=0;<br />

}<br />

( 1 record(s) : Transaction complete )<br />

The above example performs a single query on the disco.status database table and disconnects from<br />

the OQL Service Provider. In order to perform this query, DISCO and AUTH would have to be running<br />

in the NCOMS domain, and the specified username and password combination would have to be valid.<br />

Any acceptable OQL query can be specified with the -query option. The query must be terminated with<br />

a semi-colon but not the go keyword.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Listing the Databases and Tables of the Current Service<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

The OQL Service Provider<br />

The show databases command displays a list of the databases of the service you are logged into. The<br />

following example can be used by a user logged into the MODEL databases.<br />

|phoenix:1.> show databases;<br />

|phoenix:2.> go<br />

{<br />

databases = [ 'master', 'translations' ]<br />

}<br />

( 1 Record(s) : Transaction complete )<br />

|phoenix:1.><br />

The show tables from command displays a list of the tables within a database, as shown below.<br />

|phoenix:1.> show tables from master;<br />

|phoenix:2.> go<br />

{<br />

tables = [ 'entityByName', 'entityByNeighbor', 'containers' ]<br />

}<br />

( 1 Record(s) : Transaction complete )<br />

|phoenix:1.><br />

The show table command displays the columns within a table, as shown below.<br />

|phoenix:1.> show table<br />

master.entityByName;<br />

|phoenix:2.> go<br />

{<br />

schema = {<br />

ObjectID = {<br />

DataType = 'long';<br />

NotNull = 'Y';<br />

PrimaryKey = 'Y';<br />

Indexed = 'N';<br />

Unique = 'Y';<br />

}<br />

EntityName = {<br />

Datatype = 'text';<br />

NotNull = 'Y';<br />

PrimaryKey = 'Y';<br />

Indexed = 'N';<br />

Unique = 'Y';<br />

};<br />

.....<br />

.....<br />

};<br />

}<br />

( 17 Record(s) : Transaction complete )<br />

|phoenix:1.><br />

173


Chapter 5: Querying <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Databases<br />

174<br />

Exiting the OQL Service Provider<br />

Type quit to exit the service provider, as shown in the following example.<br />

|phoenix:1.> quit;<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


6. Running_tracking_discovery.fm July 5, 2005<br />

Chapter 6: Network <strong>Discovery</strong> from the<br />

Command Line<br />

This chapter explains how to configure, run, and track a network discovery from the command line.<br />

This chapter contains the following sections:<br />

Introduction on page 176<br />

Preparing for <strong>Discovery</strong> on page 177<br />

Starting DISCO on page 178<br />

Configuring the <strong>Discovery</strong> on page 181<br />

Running the <strong>Discovery</strong> on page 190<br />

Tracking the Progress of the <strong>Discovery</strong> on page 191<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 175


Chapter 6: Network <strong>Discovery</strong> from the Command Line<br />

6.1 Introduction<br />

176<br />

This chapter focuses on manual configuration of the discovery process. Altering configuration files is for<br />

advanced users only. You should be familiar with using OQL (see Chapter 5: Querying <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

Databases on page 165) and with the discovery process (see An Overview of the <strong>Discovery</strong> Process on page 25).<br />

For reference, the databases of DISCO are described in Appendix A: The <strong>Discovery</strong> Databases on page 423.<br />

If this is the first time you have run a discovery, Micromuse recommends using the <strong>Discovery</strong> <strong>Configuration</strong><br />

Tool, described in Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI on page 85.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


6.2 Preparing for <strong>Discovery</strong><br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Preparing for <strong>Discovery</strong><br />

Operating System: if you are running under Solaris, then ensure that the host on which<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> is running is fully patched with the latest Solaris patches. Linux does not require<br />

any Solaris patches.<br />

Scope of <strong>Discovery</strong>: you should consider the positioning of the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine<br />

within the network. Is it positioned to be able to interrogate all devices that you wish to include in<br />

your discovery? Consider also all necessary networks, sub-networks and determine the associated<br />

netmasks. Are there any parts of the network that you wish to exclude? Gather also all relevant SNMP<br />

community strings for the devices within the scope.<br />

Routing: ensure that each of the networks and sub-networks to be discovered is reachable using the<br />

ICMP process. If necessary add routes to <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine using the route add<br />

command.<br />

Access Control Lists: <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> uses five protocols that may need to pass through firewalls.<br />

These protocols are ICMP, SNMP, DNS, ARP and TELNET. In order to ensure that<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> is able to access devices behind these firewalls you need to advise the relevant<br />

firewall administrators to prepare the firewalls.<br />

Root Cause Analysis: To perform root cause analysis on devices within a topology, the discovery<br />

must identify all the devices on which you might wish to perform root cause analysis. In addition, the<br />

discovery must identify the relevant polling agent host. For more information on root cause analysis,<br />

see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Monitoring and RCA <strong>Guide</strong>.<br />

177


Chapter 6: Network <strong>Discovery</strong> from the Command Line<br />

6.3 Starting DISCO<br />

178<br />

Micromuse recommends that CTRL, the domain process controller, is configured to start DISCO<br />

automatically at the appropriate time.<br />

DISCO can be started manually with the following command line, but CTRL must be running in order for<br />

DISCO to launch and manage its subprocesses.<br />

ncp_disco [ -cachesize SIZE_IN_MB ] [ -cachepercent PERCENTAGE_OF_CACHE_IN_MEMORY ]<br />

–domain DOMAIN_NAME [ -debug DEBUG ] [ -help ] [ -latency LATENCY ] [ -version ]<br />

Table 29: Explanation of Command Line Options<br />

Option Explanation<br />

-cachesize SIZE_IN_MB Specifies the size of the cache in megabytes (MB).<br />

-cachepercent<br />

PERCENTAGE_OF_CACHE_IN_MEMORY<br />

Enables you to specify the ratio of the cache that is resident in memory<br />

to the cache that is resident on the hard disk.<br />

The ratio that you specify depends on the amount of memory that<br />

exists on the host machine and the number of processes it is running.<br />

The default value is 100% cache.<br />

-domain DOMAIN_NAME The name of the domain under which to run DISCO.<br />

-debug DEBUG The level of debugging output (1-4, where 4 represents the most<br />

detailed output).<br />

-help All <strong>Precision</strong> Server components have a special -help option that<br />

displays the command line options. The component is not started<br />

even if –help is used in conjunction with other arguments.<br />

-latency LATENCY The maximum time in milliseconds (ms) that DISCO waits to connect<br />

to another <strong>Precision</strong> Server process using the messaging bus. This<br />

option is useful for large and busy networks where the default settings<br />

can cause processes to assume that there is a problem when in fact<br />

the communication delay is a result of network traffic.<br />

-version<br />

All <strong>Precision</strong> Server components have a special -version option<br />

that displays the version number of the component. The component is<br />

not started even if –version is used in conjunction with other<br />

arguments.<br />

The -cachesize and -cachepercent options can be used to reduce the memory required when the<br />

process responds to OQL queries that result in large numbers of records being returned.<br />

When a value for -cachesize is specified, a fixed size of records is cached in core memory with the<br />

remaining records being flushed to disk. When a value for -cachepercent is specified, that percentage<br />

of the data is cached in core memory with the remainder being flushed to disk. These command line options<br />

are not intended to be used for permanent data storage as the cache is cleared when the process exits.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Prerequisites for Running DISCO<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Starting DISCO<br />

CTRL must be running. Although it is possible to start DISCO manually from the command line, unless<br />

CTRL is running DISCO cannot launch and manage its subprocesses.<br />

The recommended additional components are:<br />

STORE, in order to store the discovered network topology<br />

CLASS, in order to provide the Active Object Class definitions<br />

MODEL, in order to receive the deduced network topology<br />

Although it is possible to run a full discovery without STORE, CLASS and MODEL, the topology is not<br />

passed to MODEL, the discovered devices are not instantiated to AOCs and the topology is not stored on<br />

disk. If necessary, STORE, CLASS and MODEL can be started after DISCO has completed the discovery<br />

and the topology can then be activated by manually invoking the SendTopologyToModel.stch<br />

Stitcher. You invoke this stitcher manually by inserting it into the stitchers.actions table. For<br />

more information on manually invoking a stitcher, see On-Demand Stitchers on page 32.<br />

DISCO Memory Requirements<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> processes, including DISCO, are 32-bit processes and therefore have access to up to 4<br />

GB of memory.<br />

DISCO is the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> process that uses most memory. Occasionally you may encounter<br />

problems with DISCO (or other processes) running out of memory.<br />

This is unlikely to be a problem on Solaris or Linux, as these platforms to up to the maximum of 4 GB of<br />

memory.<br />

Problems with process memory may occur if you are running on AIX. On this platform, DISCO and other<br />

processes can automatically access up to 2 GB of memory only. This enables them to work out-of-the-box<br />

on both 32-bit and 64-bit kernels.<br />

179


Chapter 6: Network <strong>Discovery</strong> from the Command Line<br />

180<br />

In order to enable a specific <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> process to access up to 3.25 GB of memory on an AIX<br />

64-bit kernel, do the following:<br />

1. Ensure that you are running the 64-bit kernel.<br />

2. Go to the bin directory.<br />

cd NCHOME/precision/platform/aix5/bin<br />

Note: NCHOME is the environment variable that contains the path to the <strong>Netcool</strong> Suite home<br />

directory. For information on how this environment variable varies with platform, see Operating System<br />

Considerations on page 10.<br />

3. Issue the command to alter the memory model used by a specific <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> process.<br />

ldedit -bmaxdata:0xD0000000/dsa precision_process<br />

In this command, precision_process is the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> process whose memory<br />

access you wish to increase on AIX. For example, if you wish to increase the memory access for<br />

DISCO, then issue the following command:<br />

ldedit -bmaxdata:0xD0000000/dsa ncp_disco<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


6.4 Configuring the <strong>Discovery</strong><br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the <strong>Discovery</strong><br />

DISCO has three configuration files, which are stored in the NCHOME/etc/precision directory:<br />

The DiscoSchema.cfg file defines the databases used during the discovery process.<br />

The DiscoAgents.cfg file contains insert statements to the disco.agents table that tell<br />

DISCO which <strong>Discovery</strong> agents to start.<br />

The DiscoScope.cfg file contains inserts to the scope.zones table that define the scope of<br />

the discovery.<br />

Some example OQL inserts that configure the behavior of DISCO are included in this chapter. For more<br />

information about the syntax of OQL, see Appendix B: The Object Query Language on page 479.<br />

A layer 3 (<strong>IP</strong> layer) discovery involves discovering the connectivity between routers and other devices, but<br />

does not discover the true connectivity between switches and other complex technologies such as ATM.<br />

There are extra prerequisites for running a discovery involving NAT domains. See Chapter 12: Managing<br />

NAT Environments on page 341 for more details.<br />

For more information on discovering non-<strong>IP</strong> technologies, see Discovering Device Protocols on page 271 and<br />

Chapter 11: Configuring an MPLS <strong>Discovery</strong> on page 325.<br />

The following section explains how to configure a basic <strong>IP</strong> layer (layer 3) discovery from the command line.<br />

Required and common configuration steps are described, and cross-references are given to more advanced<br />

configurations.<br />

<strong>Configuration</strong> Task List<br />

The following list details some of the configuration adjustments that must be made before DISCO is<br />

launched:<br />

Task one: Specify the scope of the discovery by appending the necessary OQL inserts to the<br />

scope.zones table within the DISCO configuration file, DiscoScope.cfg. The example<br />

discovery in this chapter discovers the 10.10.2.* subnet.<br />

Task two: Configure the general operation of DISCO (if necessary) by modifying the<br />

disco.config table.<br />

181


Chapter 6: Network <strong>Discovery</strong> from the Command Line<br />

182<br />

Task three: Configure the finders, specifying how many are to be run and the location from which<br />

they are to begin discovering devices. The configuration of all the finders is not essential, as using the<br />

Ping finder on its own is enough to begin the discovery process. If necessary, you should:<br />

– Specify the file(s) to be parsed by the File finder by editing the<br />

DiscoFileFinderSchema.cfg file.<br />

– Specify the <strong>IP</strong> or Subnet address (or addresses) to be used as a seed (or seeds) for the Ping finder<br />

by editing the DiscoPingFinderSeeds.cfg file.<br />

– Configure the Trap finder to listen to specific traps by editing the<br />

DiscoTrapFinderSchema.cfg file.<br />

– Specify the interface and the number of network packets to be captured and analyzed by the<br />

Sniffer finder by editing the DiscoSnifferFinderSchema.cfg file.<br />

Task four: Configure the set of agents that are to be started by DISCO (provided that CTRL is<br />

running) by modifying the disco.agents table. This layer 3 discovery uses the following agents:<br />

– Details.agnt<br />

– AssocAddress.agnt<br />

– IpRoutingTable.agnt<br />

– IpForwardingTable.agnt<br />

Task five: Configure the helpers. Specify a host name and <strong>IP</strong> address range within the Helper Server<br />

configuration file, DiscoHelperServerSchema.cfg. This step is not essential. If a host name<br />

is not specified, CTRL starts the helpers on the same machine as the Helper Server. When the<br />

discovery process begins, the helpers respond automatically when instructed.<br />

Task six: Configure the device access variables and parameters for the Telnet helper, such as the<br />

username and password, as defined by the Telnet passwords file,<br />

TelnetStackPasswords.cfg.<br />

Task seven: Configure the SNMP access strings, for example, community strings, private and public<br />

passwords within the SNMP device access configuration file, SnmpStackSecurityInfo.cfg.<br />

The example discovery in this chapter uses the community strings "public" and "crims0n".<br />

Task eight: Configure the discovery process data flow by editing the definitions sections of each<br />

stitcher and <strong>Discovery</strong> agent. This step must only be undertaken by advanced users for whom the<br />

defaults are not suitable.<br />

If necessary, the OQL Service Provider can be launched in order to track the discovery by querying the<br />

DISCO databases as the discovery proceeds.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Scoping the <strong>Discovery</strong><br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the <strong>Discovery</strong><br />

You must scope the discovery to restrict the area of the network that is to be discovered. You can configure<br />

the scope by configuring an insert into the DISCO scope.zones table.<br />

The following insert can be appended to the DiscoScope.cfg configuration file to restrict the discovery<br />

to the 10.10.2.* subnet.<br />

insert into scope.zones<br />

(<br />

m_Protocol,<br />

m_Action,<br />

m_Zones<br />

)<br />

values<br />

(<br />

1,<br />

1,<br />

[<br />

{<br />

m_Subnet="10.10.2.*"<br />

}<br />

]<br />

);<br />

Devices that are not within the specified subnet are not discovered, so any device found by the finders that<br />

is outside the 10.10.2.* subnet is not passed to the Details agent and therefore no further information<br />

about the device is discovered.<br />

Detailed information about scope can be found in Chapter 7: Scoping a <strong>Discovery</strong> on page 207.<br />

Configuring DISCO<br />

The general operation of DISCO can be configured, if necessary, through inserts into the disco.config<br />

database table. For more information, see Example <strong>Configuration</strong> of the disco.config Table on page 439.<br />

Configuring the Ping Finder<br />

You must seed the Ping finder with a device or subnet address at which the finder begins looking for devices.<br />

You seed the Ping finder by appending an insert into the pingFinder.pingRules table to the<br />

DiscoPingFinderSeeds.cfg configuration file. You can seed the Ping finder with as many <strong>IP</strong><br />

addresses as necessary.<br />

For more information on configuring the finders, see Chapter 8: Using Finders to Seed a <strong>Discovery</strong> on<br />

page 219.<br />

183


Chapter 6: Network <strong>Discovery</strong> from the Command Line<br />

184<br />

Example Subnet Seed<br />

The following insert seeds the Ping finder with a device with a subnet address of 172.16.25.0, and<br />

supplies the netmask of the device.<br />

insert into pingFinder.pingRules<br />

(<br />

m_Address,<br />

m_RequestType,<br />

m_NetMask<br />

)<br />

values<br />

(<br />

"172.16.25.0",<br />

2,<br />

"255.255.255.0"<br />

);<br />

Example <strong>IP</strong> Seed<br />

The following insert seeds the Ping finder with the 172.16.25.5 <strong>IP</strong> address. Note that there is no need<br />

to specify the netmask.<br />

insert into pingFinder.pingRules<br />

(<br />

m_Address,<br />

m_RequestType<br />

)<br />

values<br />

(<br />

"172.16.25.5",<br />

1<br />

);<br />

Activating the <strong>Discovery</strong> Agents<br />

Provided CTRL is running, the <strong>Discovery</strong> agents that have been activated are started automatically at the<br />

appropriate time.<br />

There is an insert into the disco.agents table in the DiscoAgents.cfg configuration file for every<br />

installed <strong>Discovery</strong> agent. In order to activate an agent, you must alter the insert so that the m_Valid<br />

column for that agent is set to 1. In order to deactivate an agent, ensure that m_Valid=0. You can also<br />

activate and deactivate the agents using the <strong>Discovery</strong> <strong>Configuration</strong> Tool, as described in<br />

Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI on page 85.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the <strong>Discovery</strong><br />

In order to activate or deactivate the agents you must alter the existing inserts within the schema file. Do not<br />

append new inserts into disco.agents as there is an insert for every supplied agent in the schema by<br />

default.<br />

For further details on configuring the <strong>Discovery</strong> agents, see Chapter 9: <strong>Discovery</strong> Agents on page 239.<br />

The following example inserts activate the appropriate agents.<br />

Example: Activating the Details Agent<br />

You can use the following insert to activate the Details agent.<br />

insert into disco.agents<br />

(<br />

m_AgentName, m_Valid, m_AgentClass, m_IsIndirect, m_Precedence<br />

)<br />

values<br />

(<br />

'Details', 1, 0, 0, 1<br />

);<br />

Example: Activating the AssocAddress Agent<br />

You can use the following insert to activate the AssocAddress agent.<br />

insert into disco.agents<br />

(<br />

m_AgentName, m_Valid, m_AgentClass, m_IsIndirect, m_Precedence<br />

)<br />

values<br />

(<br />

'AssocAddress', 1, 2, 0, 2<br />

);<br />

Example: Activating the IpRoutingTable Agent<br />

You can use the following insert to activate the IpRoutingTable agent.<br />

insert into disco.agents<br />

(<br />

m_AgentName, m_Valid, m_AgentClass, m_IsIndirect, m_Precedence<br />

)<br />

values<br />

(<br />

'IpRoutingTable', 1, 0, 0, 2<br />

);<br />

185


Chapter 6: Network <strong>Discovery</strong> from the Command Line<br />

186<br />

Example: Activating the IpForwardingTable Agent<br />

You can activate the IpForwardingTable agent using the following insert.<br />

insert into disco.agents<br />

(<br />

m_AgentName, m_Valid, m_AgentClass, m_IsIndirect, m_Precedence<br />

)<br />

values<br />

(<br />

'IpForwardingTable', 1, 0, 0, 2<br />

);<br />

Deactivating the <strong>Discovery</strong> Agents<br />

You can disable all unnecessary <strong>Discovery</strong> agents by locating the insertions for the agents that are not to be<br />

run and ensuring that the m_Valid column is set to 0. The following example deactivates the<br />

SuperStack3ComSwitch agent.<br />

insert into disco.agents<br />

(<br />

m_AgentName, m_Valid, m_AgentClass, m_IsIndirect, m_Precedence<br />

)<br />

values<br />

(<br />

'SuperStack3ComSwitch', 0, 1, 1, 3<br />

);<br />

The Helper Server<br />

You must configure the Helper Server as a managed process of CTRL by appending an insert into the CTRL<br />

services.inTray table within the CtrlSchema.cfg configuration file, as shown by the following<br />

example.<br />

insert into services.inTray<br />

(<br />

serviceName,<br />

servicePath,<br />

domainName,<br />

argList,<br />

retryCount<br />

)<br />

values<br />

(<br />

"ncp_d_helpserv",<br />

"$NCHOME/precision/bin",<br />

"NCOMS",<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


);<br />

[ "-domain", "NCOMS" ],<br />

5<br />

This insert instructs CTRL to:<br />

Launch ncp_d_helpserv from $NCHOME/precision/bin.<br />

Launch the Helper Server in the domain NCOMS.<br />

Pass the argument -domain NCOMS to the Helper Server.<br />

Restart the Helper Server a maximum of 5 times.<br />

Managing the Helpers<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the <strong>Discovery</strong><br />

It is not necessary to configure the individual helpers as managed processes. Provided that the Helper Server<br />

is configured as a managed process of CTRL, the individual helpers are launched and managed<br />

automatically.<br />

The only situation in which you might need to configure an insert for an individual helper would be in order<br />

to start that helper on a remote machine (that is, a machine other than the one that is running the Helper<br />

Server). In this situation you would explicitly insert the required helper into the<br />

disco.managedProcesses table within the DiscoAgents.cfg configuration file, specifying the<br />

appropriate remote host in the m_Host column.<br />

Configuring the Device SNMP Access Parameters<br />

One of the prerequisites to discovering connectivity is that the discovery processes must have SNMP access<br />

to the routers and other devices that support SNMP on the network. You must therefore specify the<br />

community strings by altering the SNMP device access configuration file,<br />

SnmpStackSecurityInfo.cfg, which is used by the SNMP helper to enable device access.<br />

The following inserts configure the discovery subprocesses to use the community strings public and<br />

crims0n to access SNMP devices.<br />

insert into snmpStack.verSecurityTable<br />

(<br />

m_SNMPVersion,<br />

m_Password,<br />

m_SNMPVer3Level,<br />

m_SNMPVer3Details,<br />

m_SecurityName<br />

)<br />

values<br />

(<br />

0,<br />

'public',<br />

187


Chapter 6: Network <strong>Discovery</strong> from the Command Line<br />

188<br />

);<br />

2,<br />

{<br />

m_AuthPswd="authpassword",<br />

m_PrivPswd="privpassword"<br />

},<br />

'authPriv'<br />

insert into snmpStack.verSecurityTable<br />

(<br />

)<br />

values<br />

(<br />

);<br />

m_IpOrSubNetVer,<br />

m_NetMaskBitsVer,<br />

m_SNMPVersion,<br />

m_Password,<br />

m_SNMPVer3Level,<br />

m_SNMPVer3Details,<br />

m_SecurityName<br />

"10.10.2.0",<br />

24,<br />

0,<br />

'crims0n',<br />

2,<br />

{<br />

m_AuthPswd="authpassword",<br />

m_PrivPswd="privpassword"<br />

},<br />

'authPriv'<br />

You can append as many inserts as there are passwords to the SnmpStackSecurityInfo.cfg<br />

configuration file. The SNMP helper cycles through all password and subnet configurations until a match<br />

is found.<br />

Note: Only one SNMP community string, the public community string, is set up in the out-of-the-box<br />

configuration.<br />

Configuring Telnet Device Access Parameters<br />

If there are devices on your network to which you do not have SNMP access, or if there is information you<br />

need to discover that is not available through SNMP, you can use the Telnet helper. For details on<br />

configuring the Telnet helper, see Configuring the Telnet Helper on page 293.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Editing Stitcher and Agent Definition Files<br />

!<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the <strong>Discovery</strong><br />

You can change almost any aspect of the discovery process by editing the stitcher and agent definition files.<br />

It is possible to change such things as what data the <strong>Discovery</strong> agents retrieve from devices, and how data is<br />

transferred between database tables. For more information on the <strong>Discovery</strong> stitchers, see Introduction to<br />

<strong>Discovery</strong> Stitchers on page 518. For more information on the <strong>Discovery</strong> agents, see Chapter 9: <strong>Discovery</strong><br />

Agents on page 239.<br />

Warning: Editing the stitcher and agent definition files should only be undertaken by advanced users who<br />

have a detailed knowledge of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> and the discovery process.<br />

Altering agent definition files can introduce parse errors. To check your agent for parse errors, you can run<br />

the agent in debug mode and examine the debug output. The following example shows one way to do this.<br />

Example: Running a <strong>Discovery</strong> Agent in Debug Mode<br />

If you have altered the MyAgent definition file, you can use the following command to run the agent in full<br />

debug mode and pipe the output to a file named mydebug.out:<br />

NCHOME/precision/bin/ncp_agent -agent MyAgent -domain TEST -debug 4 >&mydebug.out&<br />

Note that this command uses csh under UNIX. You should use the appropriate equivalent for your system.<br />

Altering stitcher files can also introduce parse errors. On startup ncp_disco parses all the discovery<br />

stitchers and checks that they have no errors. If there is a problem then the discovery will exit and an error<br />

message will be displayed. To check a stitcher for parse errors, you can run ncp_disco in debug mode<br />

and examine the debug output. The following example shows one way to do this.<br />

Example: Running ncp_disco in Debug Mode<br />

You can use the following command to run ncp_disco in full debug mode and pipe the output to a file<br />

named mydebug.out:<br />

NCHOME/precision/bin/ncp_disco -domain TEST -debug 4 >&mydebug.out &<br />

189


Chapter 6: Network <strong>Discovery</strong> from the Command Line<br />

6.5 Running the <strong>Discovery</strong><br />

190<br />

Once you have made the appropriate configuration adjustments to DISCO, you can run the discovery. It is<br />

good practice to ensure that CTRL is configured to launch and manage the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> processes<br />

at the appropriate time. The basic configuration of CTRL is described in Chapter 2: Process Control with<br />

CTRL on page 47.<br />

Provided CTRL has been configured correctly, you can start the discovery by running CTRL using the<br />

following command:<br />

ncp_ctrl -domain NCOMS<br />

[1] 25142<br />

ncp_ctrl ( <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Process Control Engine )<br />

Copyright (C) Micromuse Ltd., 1997-2003. All Rights Reserved.<br />

Consuming schemas.....done.<br />

Becoming Primary for tier 1<br />

This example assumes that CTRL has been configured to launch and manage the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

processes in the domain NCOMS. If you have configured CTRL to use another domain name, you must<br />

substitute the appropriate domain name in the command line.<br />

Once CTRL has started, it launches the other components one at a time according to their configured<br />

dependencies. You can check which processes have been launched using the ps command as shown below.<br />

ps -ef | grep NCOMS<br />

nmos_user 25831 1 0 12:56:41 ? 0:00 ncp_df_ping -domain NCOMS<br />

nmos_user 25736 25714 0 12:47:39 ? 0:00 ncp_dh_dns -domain NCOMS<br />

nmos_user 25905 25834 0 13:02:58 pts/7 0:00 ncp_agent -domain NCOMS -agent Details<br />

nmos_user 26153 26101 0 13:26:56 pts/9 0:00 grep NCOMS<br />

nmos_user 25716 25714 0 12:47:00 ? 0:00 ncp_auth -domain NCOMS<br />

nmos_user 25735 25714 0 12:47:39 ? 0:00 ncp_d_helpserv -domain NCOMS<br />

nmos_user 25714 1 0 12:46:50 ? 0:00 ncp_ctrl -domain NCOMS<br />

nmos_user 25729 25714 0 12:47:27 ? 0:18 ncp_disco -domain NCOMS<br />

nmos_user 25717 25714 0 12:47:00 ? 0:00 ncp_store -domain NCOMS<br />

If you have not configured CTRL, you can start DISCO manually by using the following command;<br />

however CTRL must also be running in order to launch the Helper Server and the DISCO managed<br />

processes.<br />

ncp_disco -domain NCOMS<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


6.6 Tracking the Progress of the <strong>Discovery</strong><br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Tracking the Progress of the <strong>Discovery</strong><br />

As soon as you have the discovery process running, you can monitor the progress of the discovery by using<br />

the OQL Service Provider, ncp_oql, to query the DISCO databases to determine what is being done at<br />

any point in time.<br />

The queries demonstrated in the subsequent sections of this chapter have been generalized for all discovery<br />

scenarios and are not limited to the layer 3 discovery shown earlier in this chapter.<br />

The examples in this chapter are given only to demonstrate the amount of flexibility you have when<br />

retrieving information from databases using OQL. Using the schematic definitions of all the databases and<br />

knowledge of OQL syntax, you should be able to construct queries that answer any questions you have<br />

regarding the current status of the discovery process.<br />

The OQL Service Provider is a command line interface and interpreter into the Object Query Language.<br />

For information on starting the OQL Service Provider, including prerequisites, see Chapter 5: Querying<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Databases on page 165.<br />

Simple Queries<br />

The following are some examples of simple queries you might wish to make on the progress of the discovery:<br />

Complex Queries<br />

What is DISCO doing at present?<br />

How many devices have been discovered in the network?<br />

How many devices have been found by the finders?<br />

Which devices are currently being processed by the finders?<br />

Which agents have discovered devices?<br />

What is the current phase of the discovery?<br />

What is the NAT status of the discovery?<br />

What is the current status of any of the <strong>Discovery</strong> agents?<br />

What is the current operational status of the stitchers?<br />

The following are examples of some more complex queries you might wish to make:<br />

Which devices have been discovered by a specific <strong>Discovery</strong> agent?<br />

Which <strong>Discovery</strong> agents have interrogated a specific device?<br />

191


Chapter 6: Network <strong>Discovery</strong> from the Command Line<br />

Other Queries<br />

192<br />

Has the discovery reported any specific devices?<br />

What types of device have been discovered?<br />

The type of information you can retrieve about the discovery is almost unlimited. The more complex your<br />

queries, the more complex the information you can retrieve. For example:<br />

You can retrieve information from multiple tables by performing table joins.<br />

You can perform subqueries (a query within a query).<br />

Identifying the Status of the Ping Finder<br />

You can query the pingFinder.status database table of the Ping finder to identify which of the<br />

devices and subnets in scope have been pinged so far, and which address is currently being pinged.<br />

In order to start the OQL Service Provider to query the Ping finder databases, use a command similar to the<br />

following:<br />

ncp_oql -domain NCOMS -service DiscoPingFinder -username admin<br />

The pingFinder.status database table schema is given in The Status Database on page 227. The<br />

following example returns the current address being pinged by the Ping finder:<br />

|phoenix:1.> select m_CurrentAddress from pingFinder.status;<br />

|phoenix:2.> go<br />

.<br />

{<br />

m_CurrentAddress=192.168.0.1;<br />

}<br />

( 1 record(s) : Transaction complete )<br />

|phoenix:1.><br />

Interrogating the Databases of DISCO: Simple Database Queries<br />

This section contains example queries on the databases of DISCO. Definitions of all the databases in this<br />

section, unless specified otherwise, can be found in Appendix A: The <strong>Discovery</strong> Databases on page 423.<br />

Identifying the Current Status of DISCO<br />

To identify the current operational status of the discovery process, query the disco.status table as<br />

shown below.<br />

|phoenix:1.> select * from disco.status;<br />

|phoenix:2.> go<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


.<br />

{<br />

m_<strong>Discovery</strong>Mode=0;<br />

m_Phase=1;<br />

m_BlackoutState=0;<br />

m_CycleCount=0;<br />

m_ProcessingNeeded=0;<br />

m_Full<strong>Discovery</strong>=0;<br />

}<br />

( 1 record(s) : Transaction complete )<br />

|phoenix:1.><br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Tracking the Progress of the <strong>Discovery</strong><br />

The results of the above query show that the discovery process is still in data collection phase 1. The phases<br />

of the discovery process are described in detail in <strong>Discovery</strong> Stages and Phases on page 35.<br />

Identifying the Status of the NAT <strong>Discovery</strong><br />

To identify the current NAT status of the discovery process, query the disco.NATStatus table as<br />

shown below.<br />

|phoenix:1.> select m_NATStatus from disco.NATStatus;<br />

|phoenix:2.> go<br />

.<br />

{<br />

m_NATStatus=3;<br />

}<br />

( 1 record(s) : Transaction complete )<br />

|phoenix:1.><br />

The results of the above query shows that the discovery process is still processing returned NAT translation<br />

data. For more information on the disco.NATStatus table and NAT discovery, see<br />

Chapter 12: Managing NAT Environments on page 341.<br />

Identifying Which Agents Are Enabled<br />

To identify whether you have correctly enabled the right <strong>Discovery</strong> agents to run during the discovery<br />

process, query the disco.agents table as shown below.<br />

|phoenix:1.> select m_AgentName, m_Valid from disco.agents<br />

|phoenix:2.> where m_Valid = 1;<br />

|phoenix:3.> go<br />

...<br />

{<br />

m_AgentName='Details';<br />

m_Valid=1;<br />

}<br />

{<br />

m_AgentName='AssocAddress';<br />

m_Valid=1;<br />

193


Chapter 6: Network <strong>Discovery</strong> from the Command Line<br />

194<br />

}<br />

{<br />

m_AgentName='IpRoutingTable';<br />

m_Valid=1;<br />

}<br />

{<br />

m_AgentName='IpForwardingTable';<br />

m_Valid=1;<br />

}<br />

( 5 record(s) : Transaction complete )<br />

|phoenix:1.><br />

The above query returns only the names of the <strong>Discovery</strong> agents that have been activated.<br />

Identifying the Status of the Stitchers<br />

To identify the operational status of the stitchers, query the stitchers.status table as shown below.<br />

|phoenix:1.> select * from stitchers.status<br />

|phoenix:2.> where m_State > 0 ;<br />

|phoenix:3.> go<br />

.........<br />

{<br />

m_Name='AgentRetToInstrumentationSubnet';<br />

m_State=3;<br />

}<br />

{<br />

m_Name='DetailsRetProcessing';<br />

m_State=3;<br />

}<br />

.....<br />

.....<br />

{<br />

m_Name='DetectionFilter';<br />

m_State=3;<br />

}<br />

{<br />

m_Name='FnderProcToDetailsDesp';<br />

m_State=3;<br />

}<br />

{<br />

m_Name='FnderRetProcessing';<br />

m_State=3;<br />

}<br />

( 9 record(s) : Transaction complete )<br />

|phoenix:1.><br />

The results from the query show the current status of all stitchers that have been called by the discovery<br />

process so far. Note that the results shown above have been abbreviated.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Identifying the Status of the Agents<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Tracking the Progress of the <strong>Discovery</strong><br />

To identify the operational status of the <strong>Discovery</strong> agents, query the agents database as shown below.<br />

|phoenix:1.> select * from agents.status<br />

|phoenix:2.> where m_State > 0 ;<br />

|phoenix:3.> go<br />

..<br />

{<br />

m_Name='Details';<br />

m_State=3;<br />

m_NumConnects=1;<br />

}<br />

{<br />

m_Name='IpRoutingTable';<br />

m_State=3;<br />

m_NumConnects=1;<br />

}<br />

( 2 record(s) : Transaction complete )<br />

|phoenix:1.><br />

The results of the above query show that only the Details agent and the IpRoutingTable agent are active<br />

(that is, they have a state greater than zero).<br />

Identifying Which Devices Have Been Found by the Finders<br />

To learn what devices the finders have found on the network, query the tables of the finders database, for<br />

example, the finders.returns table, as shown below.<br />

|phoenix:1.> select * from finders.returns;<br />

|phoenix:2.> go<br />

....<br />

{<br />

m_UniqueAddress='172.20.12.253';<br />

m_Protocol=1;<br />

m_Creator='IpRoutingTable';<br />

}<br />

{<br />

m_UniqueAddress='172.20.22.61';<br />

m_Protocol=1;<br />

m_Creator='IpRoutingTable';<br />

}<br />

{<br />

m_UniqueAddress='172.20.0.221';<br />

m_Protocol=1;<br />

m_Creator='IpRoutingTable';<br />

}<br />

{<br />

m_UniqueAddress='10.10.35.17';<br />

m_Creator='PingFinder';<br />

195


Chapter 6: Network <strong>Discovery</strong> from the Command Line<br />

196<br />

}<br />

( 4 record(s) : Transaction complete )<br />

|phoenix:1.><br />

The above query shows the devices discovered by the Ping finder as well as devices reported as a result of<br />

connections discovered by the IpRoutingTable <strong>Discovery</strong> agent.<br />

Identifying Which Devices Have Been Sent to and Returned by the Details<br />

Agent<br />

To identify which network entities have been sent to the Details agent for processing, query the<br />

Details.despatch table as shown below.<br />

|phoenix:1.> select * from Details.despatch;<br />

|phoenix:2.> go<br />

.................................................................<br />

................................<br />

{<br />

m_UniqueAddress='10.10.38.82';<br />

}<br />

{<br />

m_UniqueAddress='10.10.38.83';<br />

}<br />

.....<br />

.....<br />

{<br />

m_UniqueAddress='10.10.38.84';<br />

}<br />

{<br />

m_UniqueAddress='10.10.38.87';<br />

}<br />

{<br />

m_UniqueAddress='10.10.38.88';<br />

}<br />

{<br />

m_UniqueAddress='10.10.38.89';<br />

}<br />

{<br />

m_UniqueAddress='10.10.38.90';<br />

}<br />

( 2312 record(s) : Transaction complete )<br />

To identify which devices have returned from the Details agent, query the returns table of the Details<br />

agent, as shown below.<br />

|phoenix:1.> select * from Details.returns;<br />

|phoenix:2.> go<br />

.................................................................<br />

................................<br />

{<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


m_UniqueAddress='10.10.8.255';<br />

m_UpdAgent='Details';<br />

m_HaveAccess=1;<br />

m_Description='Ascend Max-HP T1/PRI S/N;<br />

m_ObjectId='1.<strong>3.6</strong>.1.4.1.529.1.2.6';<br />

m_LastRecord=1;<br />

}<br />

{<br />

m_UniqueAddress='10.10.9.1';<br />

m_UpdAgent='Details';<br />

m_Name='minotaur.Kazeem.San.COM';<br />

m_HaveAccess=0;<br />

m_LastRecord=1;<br />

}<br />

.....<br />

.....<br />

{<br />

m_UniqueAddress='10.10.9.2';<br />

m_UpdAgent='Details';<br />

m_Name='cyclops.Kazeem.San.COM';<br />

m_HaveAccess=0;<br />

m_LastRecord=1;<br />

}<br />

{<br />

m_UniqueAddress='10.10.9.3';<br />

m_UpdAgent='Details';<br />

m_Name='centaur.Kazeem.San.COM';<br />

m_HaveAccess=0;<br />

m_LastRecord=1;<br />

}<br />

( 382 record(s) : Transaction complete )<br />

Identifying the Number of Discovered Devices<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Tracking the Progress of the <strong>Discovery</strong><br />

To identify all network entities that are known on the system, query the workingEntities database,<br />

as shown below.<br />

|phoenix:1.> select m_Name, m_ObjectId, m_UniqueAddress<br />

|phoenix:2.> from workingEntities.finalEntity;<br />

|phoenix:3.> go<br />

..................................<br />

{<br />

m_Name='10.10.8.255';<br />

m_ObjectId='1.<strong>3.6</strong>.1.4.1.529.1.2.6';<br />

m_UniqueAddress='10.10.8.255';<br />

}<br />

{<br />

m_Name='minotaur.Kazeem.San.COM';<br />

m_UniqueAddress='10.10.9.1';<br />

}<br />

197


Chapter 6: Network <strong>Discovery</strong> from the Command Line<br />

198<br />

.....<br />

.....<br />

{<br />

m_Name='cyclops.Kazeem.San.COM';<br />

m_UniqueAddress='10.10.9.2';<br />

}<br />

|phoenix:1.> select m_Name, m_ObjectId, m_UniqueAddress<br />

|phoenix:2.> from workingEntities.finalEntity;<br />

|phoenix:3.> go<br />

..................................<br />

{<br />

m_Name='10.10.8.255';<br />

m_ObjectId='1.<strong>3.6</strong>.1.4.1.529.1.2.6';<br />

m_UniqueAddress='10.10.8.255';<br />

}<br />

{<br />

m_Name='minotaur.Kazeem.San.COM';<br />

m_UniqueAddress='10.10.9.1';<br />

}<br />

.....<br />

.....<br />

{<br />

m_Name='cyclops.Kazeem.San.COM';<br />

m_UniqueAddress='10.10.9.2';<br />

}<br />

Identifying Which Agents Have Discovered Devices<br />

To identify which agents have discovered devices on the network, you can specifically query the<br />

m_Creator column of the workingEntities database, as shown below.<br />

|phoenix:1.> select m_Name, m_Creator<br />

|phoenix:2.> from workingEntities.finalEntity;<br />

|phoenix:3.> go<br />

..................................<br />

{<br />

m_Name='b11-m1-2611.Kazeem.San.COM[ 0 [ 2 ] ]';<br />

m_Creator='IpRoutingTable';<br />

}<br />

{<br />

m_Name='b-ayo.Kazeem.San.COM';<br />

m_Creator='Details';<br />

}<br />

{<br />

m_Name='b11-m1-2611.Kazeem.San.COM[ 0 [ 1 ] ]';<br />

m_Creator='IpRoutingTable';<br />

}<br />

.....<br />

.....<br />

{<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


m_Name='b11-m1-2611.Kazeem.San.COM';<br />

|phoenix:1.> select m_Name, m_Creator<br />

|phoenix:2.> from workingEntities.finalEntity;<br />

|phoenix:3.> go<br />

..................................<br />

{<br />

m_Name='b11-m1-2611.Kazeem.San.COM[ 0 [ 2 ] ]';<br />

m_Creator='IpRoutingTable';<br />

}<br />

{<br />

m_Name='b-ayo.Kazeem.San.COM';<br />

m_Creator='Details';<br />

}<br />

{<br />

m_Name='b11-m1-2611.Kazeem.San.COM[ 0 [ 1 ] ]';<br />

m_Creator='IpRoutingTable';<br />

}<br />

.....<br />

.....<br />

{<br />

m_Name='b11-m1-2611.Kazeem.San.COM';<br />

Complex Database Queries<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Tracking the Progress of the <strong>Discovery</strong><br />

The following more complex queries combine the use of various conditional OQL clauses to narrow down<br />

the search for more specific information in the DISCO databases.<br />

Identifying Which Devices Have Been Discovered by a Specific Agent<br />

You can identify the devices that have been discovered by a specific <strong>Discovery</strong> agent by focusing on the<br />

workingEntities database, and making a conditional selection that depends on the m_Creator<br />

column, as shown below.<br />

|phoenix:1.> select m_Name, m_Creator<br />

|phoenix:2.> from workingEntities.finalEntity<br />

|phoenix:3.> where<br />

|phoenix:4.> m_Creator = 'IpRoutingTable';<br />

|phoenix:5.> go<br />

.................................<br />

{<br />

m_Name='10.10.63.194';<br />

m_Creator='IpRoutingTable';<br />

}<br />

{<br />

m_Name='b11-m1-2611.Kazeem.San.COM[ 0 [ 2 ] ]';<br />

m_Creator='IpRoutingTable';<br />

}<br />

.....<br />

.....<br />

199


Chapter 6: Network <strong>Discovery</strong> from the Command Line<br />

200<br />

{<br />

m_Name='b11-m1-2611.Kazeem.San.COM[ 0 [ 1 ] ]';<br />

m_Creator='IpRoutingTable';<br />

}<br />

{<br />

m_Name='b11-m1-2611.Kazeem.San.COM';<br />

m_Creator='IpRoutingTable';<br />

}<br />

( 178 record(s) : Transaction complete )<br />

|phoenix:1.><br />

The above query shows that the IpRoutingTable agent has discovered 178 devices.<br />

Identifying Which Devices Have Been Sent to and Returned by a Specific<br />

Agent<br />

You can identify the devices that have been discovered by a specific <strong>Discovery</strong> agent by focusing on the<br />

database of that particular <strong>Discovery</strong> agent, as shown below.<br />

|phoenix:1.> select m_Name, m_ObjectId, m_Description<br />

|phoenix:2.> from IpRoutingTable.despatch;<br />

|phoenix:3.> go<br />

.................................<br />

{<br />

m_Name='10.10.63.193';<br />

m_ObjectId='1.<strong>3.6</strong>.1.4.1.9.1.108';<br />

m_Description='Cisco Internetwork Operating System Software<br />

IOS (tm) 7200 Software (C7200-JS-M), Version 12.0(4)T, RELEASE SOFTWARE (fc1)<br />

Copyright (c) 1986-1999 by cisco Systems, Inc.<br />

Compiled Thu 29-Apr-99 06:27 by kpma';<br />

}<br />

.....<br />

.....<br />

{<br />

m_Name='10.10.71.248';<br />

m_ObjectId='1.<strong>3.6</strong>.1.4.1.9.1.258';<br />

m_Description='Cisco Internetwork Operating System Software<br />

IOS (tm) MSFC Software (C6MSFC-IS-M), Version 12.0(7)XE1, EARLY DEPLOYMENT RELEASE<br />

SOFTWARE (fc1)<br />

TAC:Home:SW:IOS:Specials b-ayo k-az-eem for info<br />

Copyright (c) 1986-2000 by cisco Systems, Inc.<br />

Compiled Fri 04-Feb-00 00:';<br />

}<br />

( 25 record(s) : Transaction complete )<br />

|phoenix:1.><br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Tracking the Progress of the <strong>Discovery</strong><br />

You can identify the devices returned by the IpRoutingTable <strong>Discovery</strong> agent, using the following<br />

command.<br />

|phoenix:1.> select m_Name from IpRoutingTable.returns;<br />

|phoenix:2.> go<br />

.................................<br />

{<br />

m_Name='10.10.71.248';<br />

}<br />

{<br />

m_Name='10.10.71.248';<br />

}<br />

.....<br />

.....<br />

{<br />

m_Name='10.10.71.248';<br />

}<br />

{<br />

m_Name='10.10.71.248';<br />

}<br />

( 575 record(s) : Transaction complete )<br />

|phoenix:1.><br />

The above query shows that the IpRoutingTable agent has discovered 575 devices.<br />

Identifying Which Additional Devices Have Been Discovered by a Specific<br />

Agent<br />

An agent can discover additional devices as a result of interrogating a device. In this situation, the additional<br />

device would be in the returns table of that agent but not the despatch table. You can identify which<br />

devices are present in the IpRoutingTable.returns table but not in the<br />

IpRoutingTable.despatch table by performing a join between the<br />

IpRoutingTable.despatch and IpRoutingTable.returns tables, as shown below.<br />

|phoenix:1.> select IpRoutingTable.returns.m_Name from<br />

|phoenix:2.> IpRoutingTable.returns, IpRoutingTable.despatch<br />

|phoenix:3.> where<br />

|phoenix:4.> IpRoutingTable.returns.m_Name <br />

|phoenix:5.> IpRoutingTable.despatch.m_Name;<br />

|phoenix:6.> go<br />

..........................................<br />

{<br />

m_Name='10.10.71.237';<br />

}<br />

{<br />

m_Name='10.10.71.247';<br />

}<br />

{<br />

m_Name='10.10.71.197';<br />

201


Chapter 6: Network <strong>Discovery</strong> from the Command Line<br />

202<br />

}<br />

.....<br />

.....<br />

{<br />

m_Name='10.10.71.55';<br />

}<br />

{<br />

m_Name='10.10.71.51';<br />

}<br />

{<br />

m_Name='10.10.71.30';<br />

}<br />

{<br />

m_Name='10.10.71.236';<br />

}<br />

( 27 record(s) : Transaction complete )<br />

|phoenix:1.><br />

Identifying Whether the <strong>Discovery</strong> Has Located a Specific Device<br />

If you are interested in knowing whether the discovery process has discovered a specific device (for example,<br />

a device with the 10.10.63.239 <strong>IP</strong> address), you can perform the following queries, which are traces<br />

through the discovery dataflow:<br />

1. First, determine if the device is present in the workingEntities database, as shown below.<br />

|phoenix:1.> select * from workingEntities.finalEntity<br />

|phoenix:2.> where m_UniqueAddress ='10.10.63.239';<br />

|phoenix:3.> go<br />

.<br />

( 0 record(s) : Transaction complete )<br />

|phoenix:1.><br />

2. If the device is not present in this database, determine if it has been returned from the AssocAddress<br />

agent, as shown below.<br />

|phoenix:1.> select * from AssocAddress.returns<br />

|phoenix:2.> where m_UniqueAddress = '10.10.63.239';<br />

|phoenix:3.> go<br />

.<br />

( 0 record(s) : Transaction complete )<br />

|phoenix:1.><br />

3. If the device is not present in this database, determine if it has been returned from the Details agent,<br />

as shown below.<br />

|phoenix:1.> select * from Details.returns<br />

|phoenix:2.> where m_UniqueAddress = '10.10.63.239';<br />

|phoenix:3.> go<br />

.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


( 0 record(s) : Transaction complete )<br />

|phoenix:1.><br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Tracking the Progress of the <strong>Discovery</strong><br />

4. If the device has not been returned from the Details agent, then check if the device has been sent to<br />

the Details agent by querying the Details.despatch table, as shown below. This result<br />

indicates that the device has been sent to the Details agent, but has not yet been processed.<br />

|phoenix:1.> select * from Details.despatch<br />

|phoenix:2.> where m_UniqueAddress='10.10.63.239';<br />

|phoenix:3.> go<br />

.<br />

{<br />

m_UniqueAddress='10.10.63.239';<br />

}<br />

( 1 record(s) : Transaction complete )<br />

|phoenix:1.><br />

5. If the device is not in the Details.despatch table, you can query the finders database, as<br />

shown below. This result shows that the device has been discovered by the finders.<br />

|phoenix:1.> select * from finders.processing<br />

|phoenix:2.> where m_UniqueAddress='10.10.63.239';<br />

|phoenix:3.> go<br />

.<br />

{<br />

m_UniqueAddress='10.10.63.239';<br />

}<br />

( 1 record(s) : Transaction complete )<br />

|phoenix:1.> select * from finders.returns<br />

|phoenix:2.> where m_UniqueAddress='10.10.63.239';<br />

|phoenix:3.> go<br />

.<br />

( 0 record(s) : Transaction complete )<br />

|phoenix:1.><br />

Failure to Locate a Specific Device<br />

If the device is not in any of the above databases, and falls within the scope of the discovery, you must wait<br />

until the discovery has located the device. If you are only interested in this device, you can set up a more<br />

restrictive scope for the discovery in order for the device to be discovered more quickly.<br />

203


Chapter 6: Network <strong>Discovery</strong> from the Command Line<br />

Identifying the Number of Discovered Devices of a Given Device Type<br />

204<br />

You can determine how many of each type of any device have been discovered on your network by querying<br />

the tables of the DISCO instrumentation database. The instrumentation database tables store<br />

a record of every device that has been discovered on the network, including:<br />

Every unique <strong>IP</strong> address discovered in the network<br />

Every device discovered in the network<br />

Every subnet address and subnet mask discovered in the network<br />

The ID of every Virtual Local Area Network (VLAN) discovered in the network<br />

Every Frame Relay device discovered in the network<br />

Every Cisco Frame Relay device discovered in the network<br />

Every Hot Standby Router Protocol (HSRP) device discovered in the network<br />

Every Private Network Node Interface (PNNI) device discovered in the network<br />

All the Fibre Distributed Data Interface (FDDI) nodes discovered on the network<br />

Identifying the Number of Discovered Subnets<br />

The following example query returns details of the discovered subnets.<br />

|phoenix:1.>select * from instrumentation.subNet;<br />

|phoenix:2.>go<br />

.......................................<br />

{<br />

m_SubNet='172.20.67.0';<br />

m_NetMask='255.255.255.0';<br />

}<br />

{<br />

m_SubNet='172.20.68.0';<br />

m_NetMask='255.255.255.0';<br />

}<br />

.....<br />

.....<br />

{<br />

m_SubNet='172.20.70.0';<br />

m_NetMask='255.255.254.0';<br />

}<br />

{<br />

m_SubNet='172.20.95.0';<br />

m_NetMask='255.255.255.0';<br />

}<br />

( 81 record(s) : Transaction complete )<br />

|phoenix:1.><br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Identifying the Number of Discovered VLANs<br />

The following example query returns details of the discovered VLAN IDs.<br />

|phoenix:1.>select * from instrumentation.vlan;<br />

|phoenix:2.>go<br />

.......................................<br />

{<br />

m_Vlan=23;<br />

}<br />

{<br />

m_Vlan=24;<br />

}<br />

{<br />

m_Vlan=61;<br />

}<br />

{<br />

m_Vlan=65;<br />

}<br />

.....<br />

.....<br />

{<br />

m_Vlan=677;<br />

}<br />

( 4826 record(s) : Transaction complete )<br />

|phoenix:1.><br />

Determining Whether the <strong>Discovery</strong> Has Completed<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Tracking the Progress of the <strong>Discovery</strong><br />

In order to determine whether the discovery process has completed, you can query the disco.status<br />

table, as shown below.<br />

|phoenix:1.> select * from disco.status;<br />

|phoenix:2.> go<br />

.<br />

{<br />

m_<strong>Discovery</strong>Mode=1;<br />

m_Phase=1;<br />

m_BlackoutState=0;<br />

m_CycleCount=0;<br />

m_ProcessingNeeded=0;<br />

m_Full<strong>Discovery</strong>=0;<br />

}<br />

( 1 record(s) : Transaction complete )<br />

|phoenix:1.><br />

205


Chapter 6: Network <strong>Discovery</strong> from the Command Line<br />

206<br />

You can infer the eventual completion of the discovery process by querying the scratchTopology<br />

database, which serves as the exit point of the network topology to MODEL. For more information, see<br />

Querying the MODEL Databases on page 363.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


7. Scoping_a_discovery.fm July 5, 2005<br />

Chapter 7: Scoping a <strong>Discovery</strong><br />

This chapter describes how to define the scope of your discovery using OQL.<br />

This chapter contains the following sections:<br />

Introduction to Scope on page 208<br />

Defining <strong>Discovery</strong> Zones on page 209<br />

Devices with Out Of Scope Interfaces on page 218<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 207


Chapter 7: Scoping a <strong>Discovery</strong><br />

7.1 Introduction to Scope<br />

208<br />

This chapter explains how to restrict the scope of a discovery by appending OQL inserts to the<br />

DiscoScope.cfg file.<br />

For full details of the databases discussed in this chapter, see Appendix A: The <strong>Discovery</strong> Databases on<br />

page 423. You can also define the scope of the discovery using the <strong>Discovery</strong> <strong>Configuration</strong> Tool, as<br />

described in Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI on page 85.<br />

Reasons for Scoping the <strong>Discovery</strong><br />

It is important to limit the scope of a discovery, as the range of <strong>IP</strong> addresses considered by the default<br />

discovery process is potentially unlimited. Without modification, the discovery process would attempt to<br />

discover every device connected to the network. By limiting the scope of the discovery you can concentrate<br />

on the important areas of your network.<br />

You might also want to restrict the scope of the discovery in order to control the discovery of sensitive devices<br />

that you do not want to poll. A given device might be considered sensitive because there is a security risk<br />

involved in polling the device, or because the act of polling itself might cause the device to overload. You<br />

can specify that particular devices are discovered but not instantiated to an AOC definition (such devices are<br />

discovered but are not represented in the network topology and their details are not sent to MODEL). You<br />

can also restrict devices from being discovered (SNMP access to any such device is not attempted).<br />

Types of Scoping<br />

The <strong>Precision</strong> Server offers the following types of scoping:<br />

You can include or exclude areas of your network (either subnet ranges or specific devices) in the<br />

discovery. Each configured area is referred to as a zone.<br />

Within a given inclusion zone, you can specify devices or subnets that are not to be detected, that is,<br />

not to be pinged by the Ping finder. These devices are not interrogated by the discovery agents.<br />

You can configure a filter to determine whether a given device, having been discovered, is to be<br />

interrogated for connectivity information.<br />

You can configure a filter that determines whether a device within a defined zone is to be instantiated,<br />

that is, displayed on the network map. Devices that are not to be displayed on the network map are<br />

not sent to MODEL.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


7.2 Defining <strong>Discovery</strong> Zones<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Defining <strong>Discovery</strong> Zones<br />

In order to restrict the discovery, you must construct zones by appending an OQL insert into the<br />

scope.zones table to the DiscoScope.cfg configuration file.<br />

For each zone you must specify the following information:<br />

The type of network protocol used by the zone, although currently only <strong>IP</strong> is supported. You can<br />

define as many zones as necessary. Multiple zones can also be defined within the same insert, as<br />

shown by the example in Defining Multiple Inclusion Zones on page 210.<br />

The action to be taken for the zone, where m_action=1 means include in the discovery, and<br />

m_action=2 means exclude. You can define both inclusion and exclusion zones, but the exclusion<br />

zones must be within the inclusion zones, otherwise they override the inclusion zones and nothing is<br />

discovered.<br />

A list of varbinds (name=value) that define the present discovery zone.<br />

The following examples demonstrate the creation of inclusion and exclusion zones.<br />

Defining a Single Inclusion Zone<br />

An inclusion zone is any zone that you want to be discovered by DISCO. The following example insert<br />

defines a single inclusion zone for the <strong>IP</strong> protocol and associates the zone with a subnet. This zone applies<br />

to every device within the specified subnet address.<br />

insert into scope.zones<br />

(<br />

m_Protocol,<br />

m_Action,<br />

m_Zones<br />

)<br />

values<br />

(<br />

1,<br />

1,<br />

[<br />

{<br />

m_Subnet="172.16.1.0",<br />

m_NetMask=24<br />

}<br />

]<br />

);<br />

The above insert defines an <strong>IP</strong> inclusion zone for the 172.16.1.0 subnet with a netmask of 24.<br />

209


Chapter 7: Scoping a <strong>Discovery</strong><br />

Defining Multiple Inclusion Zones<br />

210<br />

In the following example, three different <strong>IP</strong> inclusion zones are defined within a single insert.<br />

insert into scope.zones<br />

(<br />

m_Protocol,<br />

m_Action,<br />

m_Zones<br />

)<br />

values<br />

(<br />

1,<br />

1,<br />

[<br />

{<br />

m_Subnet="172.16.1.0",<br />

m_NetMask=24<br />

},<br />

{<br />

m_Subnet="172.16.2.*"<br />

},<br />

{<br />

m_Subnet="172.16.3.0",<br />

m_NetMask=255.255.255.0<br />

}<br />

]<br />

);<br />

The above example defines three different <strong>IP</strong> inclusion zones each using a different syntax to define the<br />

subnet mask. The <strong>Precision</strong> Server discovers:<br />

Any device that falls within the 172.16.1.0 subnet (with a subnet mask of 24, that is, 24 bits<br />

turned on and 8 bits turned off, which implies a netmask of 255.255.255.0).<br />

Any device with an <strong>IP</strong> address starting with "172.16.2", that is, in the 172.16.2.0 subnet<br />

with a mask of 255.255.255.0.<br />

Any device that falls within the 172.16.3.0 subnet with a mask of 255.255.255.0.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Defining Exclusion Zones<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Defining <strong>Discovery</strong> Zones<br />

An exclusion zone is any zone that you do not want to be discovered by DISCO. Multiple exclusion zones<br />

can be created within the same insert in the same way as inclusion zones. The following example insert<br />

defines a single exclusion zone for the <strong>IP</strong> protocol, and associates the zone with a subnet.<br />

insert into scope.zones<br />

(<br />

m_Protocol,<br />

m_Action,<br />

m_Zones<br />

)<br />

values<br />

(<br />

1,<br />

2,<br />

[<br />

{<br />

m_Subnet="172.16.1.0",<br />

m_NetMask=24<br />

]<br />

);<br />

Defining Zones for NAT Address Spaces<br />

Inclusion and exclusion zones can be customized for individual NAT domains, using the<br />

m_AddressSpace column of the scope.zones table. The following example insert defines an<br />

inclusion zone within a particular NAT domain.<br />

insert into scope.zones<br />

(<br />

m_Protocol, m_Action, m_Zones, m_AddressSpace<br />

)<br />

values<br />

(<br />

1,<br />

1,<br />

[<br />

{<br />

m_Subnet="172.16.2.*",<br />

}<br />

],<br />

"NATDomain1"<br />

);<br />

The above example defines one inclusion zone. The <strong>Precision</strong> Server discovers any device with an <strong>IP</strong> address<br />

starting with "172.16.2", that is, in the 172.16.2.0 subnet with a mask of 255.255.255.0, that<br />

also belongs to the NAT address space NATDomain1. The protocol is set to 1, that is, <strong>IP</strong>.<br />

211


Chapter 7: Scoping a <strong>Discovery</strong><br />

212<br />

For more information on managing NAT environments, see Chapter 12: Managing NAT Environments on<br />

page 341.<br />

Restricting Detection of Specific Devices<br />

You can specify individual devices or subnets that the Ping finder is not to ping. Since the Ping finder has<br />

not detected their existence, these devices or subnets are not interrogated by the discovery agents. For more<br />

details, see Configuring the Ping Finder on page 221.<br />

Restricting Interrogation of Specific Devices<br />

!<br />

You can exclude specific devices from the discovery by specifying that after their initial detection those<br />

devices are not to be interrogated further for connectivity information. In order to specify devices that must<br />

not be detected, you must append an OQL insert into the scope.detectionFilter table to the<br />

DiscoScope.cfg configuration file. There must only be one insert into the<br />

scope.detectionFilter table per protocol. Multiple conditions must be defined within a single<br />

insert.<br />

Within the detectionFilter table you must specify:<br />

The type of network protocol. Currently only <strong>IP</strong> is supported.<br />

The filter condition(s). Only devices that pass this filter, that is, for which the filter evaluates true, are<br />

further investigated. If no filter is specified, all devices are passed through the detection filter.<br />

A stitcher tests each discovered device against the filter condition in the scope.detectionFilter<br />

table, and the outcome of this test determines whether the device is discovered. Since the process flow of the<br />

discovery is fully configurable, you can configure this stitcher to act at any time during the discovery process.<br />

By default, the stitcher performs the conditional test on the device details returned by the Details agent. Your<br />

filter must therefore be based on the columns of the Details.returns table. The following examples<br />

show how you might configure the detection filter.<br />

Warning: Multiple examples are shown for illustrative purposes only. In practice you must ensure that there<br />

is only one insert into the scope.detectionFilter table per protocol. An example of combining<br />

multiple filters within a single insert is shown in Combining Multiple Filter Conditions on page 213.<br />

Preventing the Interrogation of a Device Based on the <strong>IP</strong> Address<br />

In this example only devices that do not have the <strong>IP</strong> address 10.10.63.234 are interrogated further.<br />

insert into scope.detectionFilter<br />

(<br />

m_Protocol, m_Filter<br />

)<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


values<br />

(<br />

);<br />

1,<br />

"( ( m_UniqueAddress '10.10.63.234' ) )"<br />

Interrogation Restriction Based on Object ID<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Defining <strong>Discovery</strong> Zones<br />

The following example shows how you would prevent the further interrogation of devices that match a given<br />

Object ID. The OQL not like clause indicates that only devices that pass the filter (that is, devices for<br />

which the OID is not like 1.<strong>3.6</strong>.1.4.1.*) are interrogated further.<br />

insert into scope.detectionFilter<br />

(<br />

m_Protocol,<br />

m_Filter<br />

)<br />

values<br />

(<br />

1,<br />

"(<br />

( m_ObjectId not like '1\.3\.6\.1\.4\.1\..*' )<br />

)"<br />

);<br />

The backslash must be used in the above insert to escape the ., which would otherwise be treated as a<br />

wildcard. A full explanation of the syntax of OQL can be found in Appendix B: The Object Query Language<br />

on page 479.<br />

Combining Multiple Filter Conditions<br />

The following example shows how you can combine filter conditions within a single OQL insert. This<br />

example ensures that only devices that do not have the specified OID and do not have the specified <strong>IP</strong><br />

address are detected.<br />

insert into scope.detectionFilter<br />

(<br />

m_Protocol,<br />

m_Filter<br />

)<br />

values<br />

(<br />

1,<br />

"(<br />

( m_ObjectId not like '1\.3\.6\.1\.4\.1\..*' )<br />

AND<br />

( m_UniqueAddress '10.10.63.234' )<br />

)"<br />

);<br />

213


Chapter 7: Scoping a <strong>Discovery</strong><br />

214<br />

Configuring the Filter Condition<br />

Although you can configure the filter condition to test any of the columns in the Details.returns<br />

table, you may need to use the <strong>IP</strong> address as the basis for the filter if you need to restrict the detection of a<br />

particular device. If the device does not grant SNMP access to the Details agent, the Details agent may not<br />

be able to retrieve MIB variables such as the Object ID. However, you are guaranteed the return of at least<br />

the <strong>IP</strong> address when the device is detected.<br />

Restricting Instantiation<br />

!<br />

Instantiation refers to the process of associating a device with an Active Object Class. This takes place after<br />

the network topology is passed to MODEL. It is possible to configure the discovery so that certain devices<br />

(such as core sensitive devices that you do not wish to poll) are discovered but not passed across to MODEL.<br />

These devices are not instantiated or displayed in the network topology map.<br />

In order to restrict the devices that are instantiated you must edit the DiscoScope.cfg configuration<br />

file and append an OQL insert into the scope.instantiateFilter table. There must only be one<br />

insert into the scope.instantiateFilter per protocol. The instantiateFilter table<br />

requires the following information:<br />

The type of network protocol. Currently only <strong>IP</strong> is supported.<br />

The conditional test. Only devices that pass the filter are sent to MODEL. If no filter is defined, all<br />

discovered devices are passed to MODEL.<br />

The instantiateFilter works in the same way as the detectionFilter, since a stitcher is<br />

called to compare discovered devices using the test defined in the scope.instantiateFilter table.<br />

By default the test is performed after the Scratch Topology has been generated, but before the records are<br />

sent to MODEL. The conditional test must therefore be based on the columns of the<br />

scratchTopology.entityByName table.<br />

Warning: You must ensure that there is only one insert into the scope.instantiateFilter table<br />

per protocol. Multiple filters must be combined within a single insert in the same way as is done in the<br />

detectionFilter table.<br />

The following examples demonstrate the instantiation filter in use.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Restricting Instantiation Based on Object ID<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Defining <strong>Discovery</strong> Zones<br />

The following example shows how you would prevent the instantiation of devices that match a given Object<br />

ID. The OQL not like clause indicates that only devices that pass the filter (that is, devices for which<br />

the OID is not like 1.<strong>3.6</strong>.1.4.1.*) are instantiated.<br />

insert into scope.instantiateFilter<br />

(<br />

m_Protocol,<br />

m_Filter<br />

)<br />

values<br />

(<br />

1, // The backslash is used here to escape the .<br />

"( // which would otherwise be treated<br />

// as a wildcard.<br />

( m_ObjectId not like '1\.3\.6\.1\.4\.1\..*' )<br />

)"<br />

);<br />

A full explanation of the syntax of OQL can be found in Appendix B: The Object Query Language on<br />

page 479.<br />

Restricting Instantiation Based on the <strong>IP</strong> Address<br />

The following example demonstrates how you might restrict the instantiation of devices based on the <strong>IP</strong><br />

address, by filtering against the m_Addresses column of the scratchTopology.entityByName<br />

table. The m_Addresses column is a list of the OSI model layer 1-7 addresses for the device. The<br />

following example filter tests the value of m_Addresses(2), that is, the third entry in the list of addresses<br />

(list numbering starts at 0). The third entry in the list of addresses is the layer 3 address, that is, the <strong>IP</strong> address<br />

of the device.<br />

The following insert ensures that only devices that pass the filter are instantiated, that is, devices for which<br />

the <strong>IP</strong> address is not 172.16.1.231, and is not 172.16.5.47, and does not begin 192.168.123.<br />

insert into scope.instantiateFilter<br />

(<br />

m_Protocol,<br />

m_Filter<br />

)<br />

values<br />

(<br />

1,<br />

"(<br />

( m_Addresses(2) "172.16.1.231" )<br />

AND<br />

( m_Addresses(2) "172.16.5.47")<br />

AND<br />

215


Chapter 7: Scoping a <strong>Discovery</strong><br />

216<br />

);<br />

)"<br />

( m_Addresses(2) not like "192\.168\.123\..*" )<br />

You could also restrict instantiation based on other addresses for the device stored in the<br />

scratchTopology.entityByName.m_Addresses column. For example,<br />

m_Addresses(1) contains the layer 2 address of the device, that is, the MAC address.<br />

More Complex Example<br />

The following example shows a more complex insert, which combines a number of conditions relating to<br />

different columns of the scratchTopology.entityByName table.<br />

insert into scope.instantiateFilter<br />

(<br />

m_Protocol,<br />

m_Filter<br />

)<br />

values<br />

(<br />

1,<br />

"(<br />

( m_Addresses(2) = '10.82.219.1' )<br />

OR<br />

( m_Addresses(2) = '10.82.213.5' )<br />

OR<br />

( m_Addresses(2) = '10.82.21<strong>3.6</strong>' )<br />

)<br />

OR<br />

(<br />

( m_Name LIKE '[Mm]icro[Mm]use' )<br />

AND<br />

( m_Type < 3 )<br />

)<br />

OR<br />

(<br />

( m_Type >= 3 )<br />

AND<br />

( m_Type 7 )<br />

)"<br />

);<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Defining <strong>Discovery</strong> Zones<br />

The above insert ensures that only the following devices would be sent to MODEL to be instantiated:<br />

Any device with the <strong>IP</strong> address 10.82.219.1, 10.82.213.5 or 10.82.21<strong>3.6</strong>.<br />

Any device that is not a web server whose name contains the string micromuse (where either m may<br />

be capitalized) and for which m_Type < 3, that is, an interface or a chassis.<br />

Any device of m_Type equal to 3, 4, 5, 6 or 8, i.e, a logical interface, VLAN (Virtual Local Area<br />

Network) object, card, PSU (Power Supply Unit) or module.<br />

217


Chapter 7: Scoping a <strong>Discovery</strong><br />

7.3 Devices with Out Of Scope Interfaces<br />

218<br />

Your network may contain devices that are within the discovery scope but that themselves contain interfaces<br />

that are out of scope. Since the device is in scope, the default behavior of the layer 3 discovery agents is to<br />

download the interface table of the device and discover all the interfaces of a device—even if the interfaces<br />

themselves are out of scope.<br />

If this situation applies to your network, and you wish to modify the way in which the discovery process<br />

handles devices that are partially in scope, there are several ways to modify the discovery and monitoring<br />

process to exclude these interfaces from the discovery. Possible configuration adjustments are:<br />

You can modify the insert into the scope.instantiateFilter such that the out of scope<br />

interfaces are not instantiated. This solution means that the out of scope interfaces are still discovered,<br />

but are not passed to MODEL to be instantiated to an AOC (Active Object Class); therefore the out<br />

of scope interfaces are not represented on the topology or monitored.<br />

You can create an AOC with an instantiation filter that matches the out of scope interfaces. The out<br />

of scope interfaces are therefore discovered and represented in the topology, but instantiated to this<br />

special AOC. If you configure the AOC to perform no monitoring, you can prevent all the out of<br />

scope interfaces from being monitored.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


8. Finder_configuration.fm August 16, 2006<br />

Chapter 8: Using Finders to Seed a <strong>Discovery</strong><br />

This chapter explains how to configure the finders by appending OQL inserts into the appropriate<br />

configuration files.<br />

This chapter contains the following sections:<br />

Introduction to the Finders on page 220<br />

Configuring the Ping Finder on page 221<br />

Configuring the File Finder on page 228<br />

Configuring the Sniffer Finder on page 234<br />

Configuring the Trap Finder on page 236<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 219


Chapter 8: Using Finders to Seed a <strong>Discovery</strong><br />

8.1 Introduction to the Finders<br />

220<br />

Finders are the executables responsible for determining device existence. By default there are four finders,<br />

each using a different method to find network devices. You can enable the appropriate finders for your<br />

discovery by configuring them as managed processes of DISCO. Finders configured as managed processes<br />

are automatically launched at the appropriate time, provided that CTRL is running.<br />

Each finder to be run must also be configured by editing its configuration file. The finders are described in<br />

Table 30, with their executable name and the location of their configuration file.<br />

Table 30: Description of the Finders<br />

Finder Executable <strong>Configuration</strong> file Description<br />

Ping ncp_df_ping NCHOME/etc/precision/<br />

DiscoPingFinderSchema.cfg<br />

File ncp_df_file<br />

NCHOME/etc/precision/<br />

DiscoPingFinderSeeds.cfg<br />

NCHOME/etc/precision/<br />

DiscoFileFinderSchema.cfg<br />

Note: NCHOME is the environment variable that contains the path to the <strong>Netcool</strong> Suite home directory. For<br />

information on how this environment variable varies with platform, see Operating System Considerations on<br />

page 10.<br />

Multiple Instances<br />

NCHOME/etc/precision/<br />

DiscoFileFinderParseRules.cfg<br />

Trap ncp_df_trap NCHOME/etc/precision/<br />

DiscoTrapFinderSchema.cfg<br />

Sniffer ncp_df_sniffer NCHOME/etc/precision/<br />

DiscoSnifferFinderSchema.cfg<br />

Makes a simple ICMP echo request for<br />

broadcast or multicast addresses,<br />

individual <strong>IP</strong> addresses, or all devices<br />

on a subnet.<br />

Parses a file, such as /etc/hosts, in<br />

order to find devices on the network.<br />

Listens for SNMP traps sent by devices.<br />

Extracts <strong>IP</strong> addresses and MAC<br />

addresses from network packets on<br />

the local subnet. The Sniffer finder can<br />

handle ARP packets and can be<br />

expanded to handle other packet<br />

types if the need arises.<br />

It is possible to run more than one copy of the same type of finder at the same time. However, you should<br />

only run multiple copies of the Sniffer finder to listen for packets on different subnets, and multiple copies<br />

of the File finder, to parse different file systems at the same time.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


8.2 Configuring the Ping Finder<br />

The Ping finder has two configuration files:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the Ping Finder<br />

The DiscoPingFinderSchema.cfg file defines the pingFinder database. You should not<br />

need to alter this file.<br />

The DiscoPingFinderSeeds.cfg file contains any configuration inserts into the Ping finder<br />

databases.<br />

By appending inserts into the pingFinder database to the DiscoPingFinderSeeds.cfg<br />

configuration file, you can specify the <strong>IP</strong> addresses and subnets to be pinged when the Ping finder checks<br />

for the existence of individual devices.<br />

General <strong>Configuration</strong><br />

The pingFinder.configuration table specifies the general rules of the ping methodology and<br />

must only contain one record.<br />

Table 31: pingFinder.configuration Database Table Schema<br />

Column name Constraints Data type Description<br />

m_NumThreads Integer The number of threads to be used by the Ping finder.<br />

m_TimeOut Integer The maximum time to wait for a reply from a pinged<br />

address (the timeout).<br />

m_InterPingTime Integer The interval between pinging the addresses in a subnet.<br />

m_NumRetries Integer The number of times a device is to be re-pinged.<br />

m_Broadcast Integer Flag used to enable or disable broadcast address<br />

pinging:<br />

(1) Enable<br />

(0) Disable<br />

m_Multicast Integer Flag used to enable or disable multicast address<br />

pinging:<br />

(1) Enable<br />

(0) Disable<br />

Although pinging of broadcast/multicast addresses allows devices to be discovered more quickly than other<br />

detection methods, it is sometimes less desirable to do so under certain network conditions, such as when<br />

the network is heavily congested.<br />

221


Chapter 8: Using Finders to Seed a <strong>Discovery</strong><br />

222<br />

In general, you would ping broadcast addresses on an unknown sparsely populated network. You must only<br />

ping multicast addresses where they have been set up on the network.<br />

Disabling Broadcast and Multicast Address Pinging<br />

The following example disables broadcast and multicast pinging, specifies 20 threads, a timeout of 250 ms<br />

and 5 retries.<br />

insert into pingFinder.configuration<br />

( m_NumThreads, m_TimeOut, m_NumRetries, m_Broadcast, m_Multicast )<br />

values<br />

( 20, 250, 5, 0, 0 );<br />

Enabling Broadcast and Multicast Address Pinging<br />

The following example enables broadcast and multicast pinging, specifies 20 threads, a timeout of 250 ms<br />

and 5 retries.<br />

insert into pingFinder.configuration<br />

( m_NumThreads, m_TimeOut, m_NumRetries, m_Broadcast, m_Multicast )<br />

values<br />

( 20, 250, 5, 1, 1 );<br />

Seeding the Ping Finder<br />

You must seed the Ping finder by appending OQL inserts into the pingFinder.pingRules table to<br />

the DiscoPingFinderSeeds.cfg configuration file. An <strong>IP</strong> address or subnet that you insert into<br />

the pingRules table becomes the starting point for the Ping finder.<br />

The pingFinder.pingRules table specifies the different addresses and subnets to be pinged by the<br />

finder. You can also override some of the settings in the pingFinder.configuration table for<br />

particular addresses. The pingRules table may contain multiple records. The<br />

pingFinder.pingRules table is described in Table 32.<br />

Table 32: pingFinder.pingRules Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_Address PRIMARY KEY<br />

NOT NULL<br />

Text The address to ping.<br />

m_RequestType Integer Flag denoting address type:<br />

(1) Individual<br />

(2) Subnet<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 32: pingFinder.pingRules Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the Ping Finder<br />

m_NetMask Text The subnet mask. If a value is specified for this field,<br />

it automatically implies that the address is a subnet<br />

address.<br />

m_TimeOut Integer Maximum time to wait for response. This value<br />

overrides the default timeout specified in the<br />

configuration table.<br />

m_NumRetries Integer Maximum number of times to reattempt the ping.<br />

This value overrides the default value.<br />

You can specify as many seeds for the Ping finder as necessary. The following are some common examples.<br />

Seeding Using a Single Device Address<br />

This example seeds the Ping finder with a single device address. The example does not specify values for<br />

m_NumRetries and m_TimeOut as they automatically take the default values from the<br />

configuration table.<br />

insert into pingFinder.pingRules<br />

( m_Address, m_RequestType )<br />

values<br />

( "10.10.2.224", 1 );<br />

Investigation of Class C Subnet Addresses<br />

The following examples seed the Ping finder with class C subnet addresses.<br />

insert into pingFinder.pingRules<br />

( m_Address, m_RequestType, m_NetMask )<br />

values<br />

( "10.10.2.0", 2, "255.255.255.0" );<br />

insert into pingFinder.pingRules<br />

( m_Address, m_RequestType, m_NetMask )<br />

values<br />

( "10.10.47.0", 2, "255.255.255.0" );<br />

Investigation of a Class B Subnet Address<br />

The following example seeds the Ping finder with a class B subnet address.<br />

insert into pingFinder.pingRules<br />

( m_Address, m_RequestType, m_NetMask )<br />

values<br />

( "10.10.0.0", 2, "255.255.0.0" );<br />

223


Chapter 8: Using Finders to Seed a <strong>Discovery</strong><br />

Scoping the Ping Finder<br />

224<br />

The pingFinder.scope table can be used to configure the way the Ping finder checks whether it is<br />

allowed to ping a particular device.<br />

Table 33: pingFinder.scope Database Table Schema<br />

Column name Constraints Data type Description<br />

m_UseScope Integer Flag denoting whether or not to use the entries in the<br />

scope.zones table when deciding which devices<br />

to ping:<br />

(0) The Ping finder ignores the scope.zones table<br />

when deciding which devices to ping.<br />

(1) This is the default value. The Ping finder uses the<br />

scope.zones table to check which devices can be<br />

pinged.<br />

If you are performing an unscoped discovery, that is, a<br />

discovery without any entries in the scope.zones<br />

table, then it is preferable to set m_UseScope to zero<br />

to reduce processing load.<br />

m_UsePingEntries Integer Flag denoting whether or not to use the entries in the<br />

pingFinder.pingFilter table when deciding<br />

which devices to ping:<br />

If you want to exclude particular devices or subnets from being pinged by the Ping finder, configure an insert<br />

into the pingFinder.pingFilter table.<br />

Table 34: pingFinder.pingFilter Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_Address NOT NULL<br />

PRIMARY KEY<br />

(0) This is the default value. The Ping finder ignores<br />

any entries in the pingFinder.pingFilter table<br />

when deciding which devices can be pinged.<br />

(1) The Ping finder checks the<br />

pingFinder.pingFilter table before it pings a<br />

particular device to see if the device can be pinged.<br />

Text The <strong>IP</strong> address of the device or subnet for which you<br />

want to allow or forbid pinging.<br />

m_RequestType Integer Possible values are:<br />

1 = <strong>IP</strong><br />

2 = Subnet<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 34: pingFinder.pingFilter Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

m_NetMask Text Netmask for the given subnet.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the Ping Finder<br />

m_ToPing Integer If this is set to 0, the Ping finder cannot ping this<br />

device/subnet. If this is set to 1, the Ping finder can<br />

ping this device/subnet.<br />

Note: When applying settings in the pingFinder.pingFilter table, the Ping finder gives<br />

precedence to individual <strong>IP</strong> addresses over subnets. For example, if you disable pinging of a subnet by setting<br />

m_ToPing to 0 for this subnet, but enable pinging of individual <strong>IP</strong> addressses within that subnet, then the<br />

individual <strong>IP</strong> addresses are pinged. In contrast, if you enable pinging of a subnet but disable pinging of<br />

individual <strong>IP</strong> addressses within that subnet, then all devices in that subnet are pinged except for the<br />

individual devices that you specified.<br />

No Scoping<br />

If you configure the Ping finder not to use the scope.zones table or the<br />

pingFinder.pingFilter table, the Ping finder pings all the devices it has been seeded with,<br />

regardless of whether they are in scope or not. DISCO still uses the scope.zones table to decide whether<br />

the discovery agents are allowed to interrogate each device or subnet. To configure the Ping finder not to<br />

use scoping, use the following insert.<br />

insert into pingFinder.scope<br />

( m_UseScope, m_UsePingEntries )<br />

values<br />

( 0, 0 );<br />

Using the <strong>Discovery</strong> Scope<br />

If you configure the Ping finder to use only the scope.zones table, the Ping finder does not ping devices<br />

that are out of the discovery scope. To configure the Ping finder to use the discovery scope, use the following<br />

insert.<br />

insert into pingFinder.scope<br />

( m_UseScope, m_UsePingEntries )<br />

values<br />

( 1, 0 );<br />

225


Chapter 8: Using Finders to Seed a <strong>Discovery</strong><br />

226<br />

Using a Custom Scope<br />

If you configure the Ping finder to use only the pingFinder.pingFilter table, you can specify<br />

exactly which devices and subnets the Ping finder is allowed to ping. You must ensure that the devices or<br />

subnets you allow the Ping finder to ping are within the discovery scope; otherwise the discovery agents do<br />

not discover them, and they are not instantiated to the topology. To configure the Ping finder to use only<br />

your custom scoping, use the following insert.<br />

insert into pingFinder.scope<br />

( m_UseScope, m_UsePingEntries )<br />

values<br />

( 0, 1 );<br />

Combining the <strong>Discovery</strong> and Custom Scope<br />

If you configure the Ping finder to use both the scope.zones table and the<br />

pingFinder.pingFilter table, the Ping finder pings those devices or subnets it has been seeded with<br />

if they are within either the discovery scope or the custom scope. To configure the Ping finder to use both<br />

the scope.zones table and the pingFinder.pingFilter table, use the following insert.<br />

insert into pingFinder.scope<br />

( m_UseScope, m_UsePingEntries )<br />

values<br />

( 1, 1 );<br />

Refreshing Ping Finder Scope<br />

If you configure the Ping finder to use the discovery scope defined in the scope.zones table, and you<br />

then run a discovery, the Ping finder uses the scope values that you defined. If you subsequently change the<br />

scope settings, you need to refresh the Ping finder before running any further discoveries, in order to make<br />

the Ping finder aware that the scope values have changed. There are two possible scenarios:<br />

You changed the scope settings using the Network <strong>Discovery</strong> GUI. In this case DISCO automatically<br />

refreshes the Ping finder to use the scope values that you defined.<br />

You changed the scope settings by configuring an OQL insert into the scope.zones table using<br />

the DiscoScope.cfg configuration file, as described in Scoping the <strong>Discovery</strong> on page 183. In this<br />

case, you need to manually refresh the Ping finder to use the scope values that you defined. You do<br />

this by manually invoking the PingFinderScopeRefresh.stch stitcher. This stitcher<br />

contains the single command:<br />

DiscoRefresh(’PingFinder’,’scope’);<br />

This command updates the Ping finder with the new scope, as defined in the scope.zones table.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the Ping Finder<br />

Note: To manually invoke the PingFinderScopeRefresh.stch stitcher, configure an insert<br />

into the table with the name of the PingFinderScopeRefresh.stch stitcher, as described in<br />

The actions Table on page 452.<br />

The Status Database<br />

The pingFinder.status database table is populated automatically by the Ping finder. You must not<br />

make inserts into this table.<br />

Table 35: pingFinder.status Database Table Schema<br />

Column name Constraints Data type Description<br />

m_Address NOT NULL Text The <strong>IP</strong> address of the device or subnet.<br />

m_RequestType Integer Possible values are:<br />

1 = <strong>IP</strong><br />

2 = Subnet<br />

m_NetMask Text Subnet mask (if appropriate).<br />

m_Started Boolean Integer Boolean integer indicating whether pinging has<br />

started for the given device or subnet:<br />

(1) Pinging has started.<br />

(0) Pinging has not started.<br />

m_CurrentAddress Text The current address being pinged.<br />

m_Completed Boolean Integer Boolean integer indicating whether the Ping finder<br />

has finished pinging this device or subnet:<br />

(1) Ping finder has finished pinging this device or<br />

subnet.<br />

(0) Ping finder has not finished pinging this device or<br />

subnet<br />

227


Chapter 8: Using Finders to Seed a <strong>Discovery</strong><br />

8.3 Configuring the File Finder<br />

228<br />

The File finder has two configuration files:<br />

The DiscoFileFinderSchema.cfg file defines the fileFinder database. You should not<br />

need to alter this file.<br />

The DiscoFileFinderParseRules.cfg file contains any configuration inserts into the File<br />

finder databases.<br />

The configuration Table<br />

The fileFinder.configuration table, described in Table 36, specifies the number of threads to<br />

be used by the finder.<br />

Table 36: fileFinder.configuration Database Table Schema<br />

Column name Constraints Data type Description<br />

m_NumThreads NOT NULL Integer The number of threads to be used by the File<br />

finder.<br />

The parseRules Table<br />

The fileFinder.parseRules table, described in Table 37, specifies the rules for file parsing.<br />

By configuring inserts into the fileFinder.parseRules table, you can specify the files to be parsed<br />

for a list of <strong>IP</strong> addresses of devices that exist on the network. A typical file that you would parse, for example,<br />

is the /etc/hosts file on the machine running DISCO. You can also seed the discovery by parsing the<br />

/etc/defaultrouter file.<br />

Table 37: fileFinder.parseRules Database Table Schema<br />

Column name Constraints Data type Description<br />

m_FileName NOT NULL<br />

UNIQUE<br />

Text The (unique) full path and filename of the file to be<br />

parsed, for example, /etc/hosts.<br />

m_Delimiter Text The delimiter that separates the data fields in the<br />

file. Regular pattern matching expressions are also<br />

accepted as valid delimiters.<br />

Note: \t is not supported as a valid value for the<br />

character.<br />

m_ColDefs List of atoms A list of rules that specify which variables to extract<br />

and the columns from which to get them.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Example <strong>Configuration</strong>s<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the File Finder<br />

The following examples show OQL statements you could append to the File finder configuration file.<br />

Files to Parse and Rules for Parsing<br />

You can append inserts into the fileFinder.parseRules table in order to specify the files to be<br />

parsed and the rules for parsing. The usual files you would parse are /etc/defaultrouter and<br />

/etc/hosts, although the File finder can parse any text file. You can append multiple inserts to the<br />

DiscoFileFinderParseRules.cfg configuration file to define multiple files to be parsed.<br />

Example One<br />

The following example configuration instructs the File finder to parse an example text file,<br />

logged_hosts, that has been saved in the /var/tmp directory. The contents of the example file are<br />

shown below.<br />

vi /var/tmp/logged_hosts<br />

172.16.1.21 dharma 04:02:08<br />

172.16.1.201 phoenix 19:07:08<br />

172.16.1.25 lnd-sun-micromuse 15:10:00<br />

172.16.2.33 ranger 19:07:07<br />

~<br />

"/var/tmp/logged_hosts" [Read only] 4 lines, 190 characters<br />

The three columns in this example file respectively contain an <strong>IP</strong> address, the device name and a time value.<br />

The columns are separated by white space, which may be multiple tabs, spaces or a combination of both.<br />

You could configure the File finder to parse this example text file using an insertion similar to the following:<br />

insert into fileFinder.parseRules<br />

(<br />

m_FileName, m_Delimiter, m_ColDefs<br />

)<br />

values<br />

(<br />

"/var/tmp/logged_hosts",<br />

"[ ]+",<br />

[<br />

{<br />

m_VarName="m_UniqueAddress",<br />

m_ColNum=1<br />

},<br />

{<br />

m_VarName="m_Name",<br />

m_ColNum=2<br />

}<br />

229


Chapter 8: Using Finders to Seed a <strong>Discovery</strong><br />

230<br />

);<br />

]<br />

The above insert specifies that:<br />

The full path and name of the file is /var/tmp/logged_hosts.<br />

The source file delimiter is white space. The column delimiter is indicated in the insert using a simple<br />

regular expression, [ tab space ]+ . You must explicitly press the tab and space keys rather<br />

than entering \t to represent the tab character.<br />

The first column contains <strong>IP</strong> addresses and must be mapped to the m_UniqueAddress column of<br />

the DISCO finders.returns table.<br />

The second column contains host names and must be mapped to the m_Name column of the<br />

DISCO finders.returns table.<br />

Since the third column in the example text file is not relevant, it has not been mapped to a column of<br />

finders.returns and is ignored by the File finder during the discovery.<br />

Example Two<br />

The following insert instructs the File finder to:<br />

Parse /etc/hosts.<br />

Treat white space as the data separator.<br />

Use the following column definitions:<br />

– m_UniqueAddress for the first column<br />

– m_Name for the second column<br />

insert into fileFinder.parseRules<br />

(<br />

m_FileName,<br />

m_Delimiter,<br />

m_ColDefs<br />

)<br />

values<br />

(<br />

"/etc/hosts",<br />

"[ ]",<br />

[<br />

{<br />

m_VarName="m_UniqueAddress",<br />

m_ColNum=1<br />

},<br />

{<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


);<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

]<br />

Example Three<br />

}<br />

m_VarName="m_Name",<br />

m_ColNum=2<br />

The following insert instructs the File finder to:<br />

Parse /etc/defaultrouter.<br />

Treat one or more occurrences of white space as the data separator.<br />

Use m_UniqueAddress as the column definition.<br />

insert into fileFinder.parseRules<br />

(<br />

m_FileName,<br />

m_Delimiter,<br />

m_ColDefs<br />

)<br />

values<br />

(<br />

"/etc/defaultrouter",<br />

"[ ]+",<br />

[<br />

{<br />

m_VarName="m_UniqueAddress",<br />

m_ColNum=1<br />

}<br />

]<br />

);<br />

General Operation<br />

The following example OQL insert configures the File finder to use 5 threads.<br />

insert into fileFinder.configuration<br />

( m_NumThreads )<br />

values<br />

( 5 );<br />

Configuring the File Finder<br />

231


Chapter 8: Using Finders to Seed a <strong>Discovery</strong><br />

Verifying the Existence of a Device Reported by the File Finder<br />

232<br />

Since the function of the File finder is to parse a file for <strong>IP</strong> addresses and device names, you may wish to<br />

verify that a device reported by the File finder actually exists before sending the details to the Details agent.<br />

By default, <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> does not verify the existence of the devices specified in the flat file that you<br />

supply to the File finder. This section explains how to do this.<br />

CASE 1: Well Maintained Seed File<br />

If you are sure of the integrity of the seed file, and can be sure that a device listed in the parsed file exists,<br />

you can adopt the default discovery configuration, in which any device discovered by the File finder is<br />

accepted without checking and sent to the Details agent. The default process flow is shown in Figure 78.<br />

Figure 78: The Well Maintained Seed File<br />

This default discovery configuration, by which any device discovered by the File finder is accepted without<br />

checking, is controlled by the default setting of m_CheckFileFinderReturns to 0 in the<br />

disco.config table, as described in Table A8 disco.config Database Table Schema on page 431.<br />

CASE 2: Badly Maintained Seed File<br />

If you have reason to doubt that the devices reported by the File finder are still connected to the network,<br />

possibly because of a rapidly changing network, you can configure the discovery so that any device<br />

discovered by the File finder is automatically checked by the Ping finder. If the Ping finder cannot contact<br />

the device, it is discarded, eliminating the unnecessary processing of a nonexistent device by the Details<br />

agent.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the File Finder<br />

Note: If you do not configure the Ping finder to check the existence of devices in your seed file, then when<br />

the discovery is complete, any non-existent devices listed in the seed file will appear in the topology. These<br />

non-existent devices will be monitored and will always fail attempts to ping them, because they do not exist.<br />

For this reason you should ensure that the seed file contains reliable information.<br />

Configure the discovery so that the File finder is automatically checked by the Ping finder, by setting<br />

m_CheckFileFinderReturns to 1 in the disco.config table. You can do this by appending<br />

the following insert to the DiscoSchema.cfg file:<br />

insert into disco.config<br />

(<br />

m_CheckFileFinderReturns,<br />

)<br />

values<br />

(<br />

1,<br />

);<br />

For more information , see Table A8 disco.config Database Table Schema on page 431.<br />

233


Chapter 8: Using Finders to Seed a <strong>Discovery</strong><br />

8.4 Configuring the Sniffer Finder<br />

234<br />

The Sniffer finder configuration file DiscoSnifferFinderSchema.cfg defines the<br />

snifferFinder database.<br />

The <strong>Configuration</strong> Table<br />

The snifferFinder.configuration table specifies parameters for the Sniffer finder.<br />

Table 38: snifferFinder.configuration Database Table Schema<br />

Column name Constraints Data type Description<br />

m_NumThreads Integer The number of threads to be used by the Sniffer finder.<br />

m_Looptimes Integer The number of packets to be captured per cycle before<br />

passing control back to the main program. The default<br />

value is 200.<br />

Example <strong>Configuration</strong>s<br />

The following example shows OQL insertion statements that you would append to the configuration file in<br />

order to configure the Sniffer finder.<br />

insert into snifferFinder.configuration<br />

(<br />

m_NumThreads,<br />

m_LoopTimes,<br />

m_Interfaces<br />

)<br />

values<br />

(<br />

1,<br />

200,<br />

["hme0"]<br />

);<br />

Although capturing more packets may be desirable, it<br />

impairs the system response time; a small delay occurs<br />

when the process is terminated—the larger the number of<br />

packets, the longer this delay.<br />

m_Interfaces List of text The interface to look for packets on. The default value is<br />

hme0.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The above example configures the Sniffer finder to:<br />

Use one thread.<br />

Capture a maximum of 200 packets per cycle.<br />

Listen for packets on the interface hme0.<br />

Sniffing Multiple Interfaces<br />

The following example configures the Sniffer finder to listen to multiple interfaces.<br />

insert into snifferFinder.configuration<br />

( m_NumThreads, m_LoopTimes,<br />

m_Interfaces )<br />

values<br />

( 1, 200, ["hme0", "hme1",<br />

"hme2"] );<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the Sniffer Finder<br />

235


Chapter 8: Using Finders to Seed a <strong>Discovery</strong><br />

8.5 Configuring the Trap Finder<br />

236<br />

The Trap finder discovers devices by listening for SNMP traps and extracting <strong>IP</strong> addresses from those traps.<br />

The different types of traps are described in Table 39.<br />

Table 39: Table of Traps and Their Descriptions<br />

Number Name Description<br />

0 coldStart trap A coldStart trap signifies that the sending protocol entity is<br />

reinitialising itself such that the agent's configuration or the protocol<br />

entity implementation may be altered.<br />

1 warmStart trap A warmStart trap signifies that the sending protocol entity is<br />

reinitialising itself such that neither the agent configuration nor the<br />

protocol entity implementation is altered.<br />

2 linkDown trap A linkDown trap is generated by the failure of a recognized<br />

communication link.<br />

3 linkUp trap A linkUp trap is generated when a communication link that was<br />

formerly down comes alive.<br />

4 authenticationFailure trap An authenticationFailure trap is generated by a protocol message that<br />

has not been authenticated by the recipient, for example, an incorrect<br />

password.<br />

5 egpNeighborloss trap An egpNeighborLoss trap signifies that an Exterior Gateway Protocol<br />

(EGP) neighbor for whom the sending protocol entity was an EGP peer<br />

has been marked down and the peer relationship is no longer valid.<br />

6 enterprise-specific trap An enterprise-specific trap signifies that the sending protocol entity<br />

recognizes that an enterprise-specific event has occurred.<br />

The Trap finder configuration file DiscoTrapFinderSchema.cfg defines the trapFinder<br />

database.<br />

The configuration Table<br />

The trapFinder.configuration table specifies parameters for the Trap finder.<br />

Table 40: trapFinder.configuration Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_NumThreads Integer The number of threads to be used by the Trap finder.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 40: trapFinder.configuration Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

Example <strong>Configuration</strong>s<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the Trap Finder<br />

m_TrapPort Integer The port to listen on for traps. The default value is set to<br />

port 162.<br />

m_SourceByPayload Default = 1 Integer Configures the way in which the trap source address is<br />

retrieved:<br />

The following example shows OQL statements to append to the configuration file in order to configure the<br />

Trap finder:<br />

insert into trapFinder.configuration<br />

(<br />

m_NumThreads,<br />

m_TrapPort,<br />

m_SourceByPayload<br />

)<br />

values<br />

(<br />

1,<br />

162,<br />

1<br />

);<br />

The above example configures the Trap finder to:<br />

Use 1 thread.<br />

Listen for traps on port 162.<br />

Attempt to retrieve the trap source address from the payload.<br />

(0) Retrieve the trap source address from the <strong>IP</strong> header.<br />

(1) Retrieve the trap source address from the payload, if<br />

possible, or the <strong>IP</strong> header if there is no address in the<br />

payload.<br />

237


Chapter 8: Using Finders to Seed a <strong>Discovery</strong><br />

238<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


9. <strong>Discovery</strong>_Agents.fm July 6, 2005<br />

Chapter 9: <strong>Discovery</strong> Agents<br />

This chapter describes the discovery agents, the processes that discover device connectivity information. The<br />

information in this chapter helps you choose which discovery agents to run during a discovery. This chapter<br />

also describes advanced configuration such as retrieving extra information from devices, and discovering<br />

SPVCs.<br />

This chapter contains the following sections:<br />

Introducing the Agents on page 240<br />

Types of Agent on page 242<br />

Enabling and Disabling the Agents on page 265<br />

Selecting Agents To Run on page 267<br />

Discovering Device Protocols on page 271<br />

Filtering Devices Sent to the Agents on page 272<br />

Partial Matching on page 276<br />

Retrieving Extra Information on page 278<br />

Discovering SPVCs on page 284<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 239


Chapter 9: <strong>Discovery</strong> Agents<br />

9.1 Introducing the Agents<br />

240<br />

The discovery agents retrieve information about devices on the network. They can also report the existence<br />

of new devices by finding new connections when investigating device connectivity. The discovery agents can<br />

be used for specialized tasks. For example, the ARP Cache discovery agent populates the Helper Server<br />

database with <strong>IP</strong> address to MAC address mappings.<br />

In addition to the main discovery agents, which can be enabled or disabled according to your discovery<br />

requirements, there are two special agents that must always be run: the Details agent and the Associated<br />

Address agent. These special agents are described in this section.<br />

Note: The out-of-the-box configuration sets the majority of agents to run. This is because the more agents<br />

that are run, the wider the range of networks that can be discovered. Furthermore, agents are designed to<br />

stop analyzing devices that do not provide the data they require as soon as possible. This means that running<br />

a large number of agents increases network traffic by a very small amount only.<br />

The Details Agent<br />

This agent is triggered by the entries in finders.processing. Therefore, at least one finder will be<br />

needed to activate this agent. The SNMP helper configuration for associated devices is also a prerequisite for<br />

running this agent.<br />

The Details agent retrieves basic information about devices discovered by the finders, and determines<br />

whether SNMP access to the device is available. This mandatory agent is triggered by the entries in the<br />

finders.processing table, so at least one finder is needed to activate this agent.<br />

The Details agent is triggered when device information (usually transferred from the finders by a stitcher) is<br />

placed in the Details.despatch database table.<br />

The Details agent retrieves basic information from the network and deposits this information in the<br />

Details.returns table. The basic information retrieved comprises the DNS name of the device<br />

obtained by the configured DNS helper, and the system object ID obtained by the SNMP helper.<br />

IpForwarding data is downloaded and inserted into the ExtraInfo field which is used to identify<br />

routing devices. SysName information is also downloaded for use if this optional naming scheme is<br />

required. The insertion of data into the returns table triggers a stitcher that sends this information to the<br />

Associated Address agent.<br />

See Figure 4 on page 27 for an illustration of the process flow of the Details agent.<br />

The Associated Address (AssocAddress) Agent<br />

This mandatory agent is triggered by, and is dependent upon, the output of the Details agent. The SNMP<br />

helper configuration for associated devices is a prerequisite for running this agent.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Introducing the Agents<br />

When an interface on a device has been discovered, and basic device information has been retrieved by the<br />

Details agent, a stitcher passes the discovered device information to the Associated Address agent. This agent<br />

downloads all the other <strong>IP</strong> addresses associated with the device and adds them to a central registry, held in<br />

the translations.ipToBaseName table, provided the device details are not already in the registry.<br />

Downloading all the associated <strong>IP</strong> addresses ensures that any given device is only interrogated once by the<br />

main discovery agents, thus reducing the load on the agents. Any attempt to discover a device more than<br />

once (using multiple interfaces) is blocked by the Associated Address agent as the device details are already<br />

in the translations database.<br />

Provided the device being checked has not already been discovered, a stitcher sends the device details to the<br />

appropriate discovery agent for the retrieval of device connectivity and protocol-specific information. See<br />

Figure 6 on page 29 for an illustration of the process flow of the Associated Address agent.<br />

<strong>Discovery</strong> Agent Databases<br />

Each discovery agent has its own database resident within DISCO. These databases are generically<br />

structured and based on a template called the agentTemplate database. Each discovery agent database<br />

contains the following tables:<br />

agentName.despatch<br />

agentName.returns<br />

For full details about the database tables of each discovery agent, see Subprocess Databases on page 454.<br />

241


Chapter 9: <strong>Discovery</strong> Agents<br />

9.2 Types of Agent<br />

242<br />

The agents supplied with the <strong>Precision</strong> Server can be divided into the categories listed in Table 41.<br />

Table 41: Types of Agent<br />

Type of Agent Description of Agent Type More Details<br />

Agents that discover<br />

Ethernet switch<br />

connectivity<br />

Agents that discover<br />

layer 3 connectivity<br />

Agents that discover<br />

connectivity between<br />

Asynchronous Transfer<br />

Mode (ATM) devices<br />

Agents that discover<br />

MPLS devices<br />

Agents that discover<br />

NAT Gateways<br />

Agents that discover<br />

containment<br />

information<br />

Other protocol-specific<br />

agents<br />

Agents that discover connectivity information<br />

between Ethernet switches.<br />

Agents that retrieve connectivity information from<br />

OSI model layer 3 (the Network Layer), which is<br />

responsible for routing, congestion control, and<br />

sending messages between networks.<br />

Asynchronous Transfer Mode (ATM) is an alternative<br />

switching protocol designed for mixed format data<br />

(such as pure data, voice, and video). Several types<br />

of discovery agents can be used to discover ATM<br />

devices on a network.<br />

Agents specialized to retrieve MPLS (Multiprotocol<br />

Label Switching) data from different kinds of devices<br />

using a variety of protocols.<br />

Agents that download NAT (Network Address<br />

Translation) information from known NAT gateways.<br />

An important principle used by the network model<br />

is containment. A container holds other objects,<br />

such as chassis, interfaces and cards. You can put<br />

any object within a container and even mix different<br />

objects within the same container. This section<br />

describes the Entity agent, which queries the MIB for<br />

each entity and retrieves containment information<br />

for that entity.<br />

Agents that discover devices that use other<br />

protocols.<br />

Context agents Agents that take part in a context-sensitive<br />

discovery. For information on enabling a<br />

context-sensitive discovery, see Context-Sensitive<br />

<strong>Discovery</strong> on page 33.<br />

Task-specific agents Agents that perform a specific task within a<br />

discovery.<br />

Note: This section specifies which agents are not configured to ru n out-of the-box.<br />

Discovering Connectivity between<br />

Ethernet Switches on page 243<br />

Connectivity at the Layer 3 Network Layer<br />

on page 249<br />

Discovering Connectivity between ATM<br />

Devices on page 252<br />

Discovering MPLS Devices on page 254<br />

Discovering NAT Gateways on page 256<br />

Discovering Containment Information<br />

on page 258<br />

<strong>Discovery</strong> Agents on Other Protocols on<br />

page 259<br />

Context Agents on page 261<br />

Task-specific <strong>Discovery</strong> Agents on<br />

page 261<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Before enabling these agents, it may be necessary to configure SNMP or Telnet access.<br />

Configure SNMP as follows:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Types of Agent<br />

– Configure SNMP access to devices, as described in Configuring SNMP Device Access on<br />

page 298.<br />

– Configure threads, timeout, and number of retries for the SNMP Helper, as described in<br />

Configuring the SNMP Helper on page 292.<br />

Configure Telnet as follows:<br />

– Configure Telnet access to devices, as described in Configuring Telnet Device Access on page 303.<br />

– Configure the Telnet Helper to understand device output, as described in Configuring the<br />

SNMP Helper on page 292.<br />

Discovering Connectivity between Ethernet Switches<br />

<strong>Discovery</strong> agents that discover connectivity information between Ethernet switches have three main<br />

operational stages:<br />

1. Gain access to the switch and download all the switch interfaces.<br />

2. Discover VLAN information for the switch.<br />

3. Download the forward database table for the switch.<br />

A list of the discovery agents designed to handle Ethernet switches is shown in Table 42.<br />

243


Chapter 9: <strong>Discovery</strong> Agents<br />

244<br />

Note: Before enabling these layer 2 agents, it is necessary to configure SNMP access, as described at the<br />

beginning of the section Types of Agent on page 242. Some agents also require Telnet access and Telnet<br />

Helper configuration. This is specified where required.<br />

Table 42: Ethernet Switch <strong>Discovery</strong> Agents (1 of 5)<br />

Agent name Function<br />

AccelarSwitch The AccelarSwitch agent contains the specialized methods for retrieving<br />

connectivity information from Accelar routing switches. These devices are now<br />

branded as the Nortel Passport 86xx series. This agent also discovers BayStack<br />

450 and BayStack 470 devices.<br />

This agent downloads the switch forwarding database (FDB) table and the<br />

VLAN information for the device. The switch stitcher uses this information to<br />

resolve layer 2 Ethernet connectivity.<br />

AlcatelSwitch The AlcatelSwitch agent contains the specialized methods for retrieving<br />

connectivity information from Alcatel routing switches that were formerly<br />

Xylan devices.<br />

BayEthernetHub Before enabling this agent, it is necessary to configure the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The BayEthernetHub agent discovers hub cards manufactured by Bay.<br />

Connectivity information is downloaded from the hub and the connectivity is<br />

resolved by the HubFdbToConnections stitcher.<br />

CentillionSwitch The CentillionSwitch agent contains the methods needed to retrieve and<br />

resolve information from the Centillion switching devices, in particular the<br />

enterprise-specific VLAN information.<br />

ChipcomDistributedMM The ChipcomDistributedMM agent discovers the Ethernet switch connectivity<br />

for 3Com CoreBuilder 5000 devices containing distributed management<br />

modules.<br />

ChipcomEthernetMM The ChipcomEthernetMM agent is appropriate for Chipcom online<br />

concentrators containing Ethernet Management Modules (EMMs), and<br />

discovers the Ethernet connectivity of Chipcom EMMs.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 42: Ethernet Switch <strong>Discovery</strong> Agents (2 of 5)<br />

Agent name Function<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Types of Agent<br />

CiscoSRP The CiscoSRP agent discovers the connectivity of networks using the Spatial<br />

Reuse Protocol (SRP), that is, DPT Ring topologies. SRP is a layer 2 protocol<br />

developed by Cisco that uses ‘side’ information to identify adjacent<br />

neighbours in its ring topology.<br />

The CiscoSRP agent discovers connectivity of any device that supports the<br />

CISCO-SRP-MIB. The agent definition file is configured by default to accept<br />

only Cisco devices with any IOS version, except those supported by the<br />

CiscoSRPTelnet agent. The agent only accepts devices that support the<br />

srpMacAddress MIB variable.<br />

IOS version 12.2(14)S7 and 12.2(18)S, used with NPE-G1 cards, are known to<br />

corrupt SNMP data.<br />

IOS version 12.2(15)BC1 is known to lack CISCO-SRP_MIB support.<br />

CiscoSRPTelnet Before enabling this agent, it is necessary to configure Telnet access and the<br />

Telnet Helper, as described at the beginning of the section Types of Agent on<br />

page 242.<br />

The CiscoSRPTelnet agent discovers the connectivity of networks using the<br />

Spatial Reuse Protocol (SRP), that is, DPT Ring topologies. SRP is a layer 2<br />

protocol developed by Cisco that uses ‘side’ information to identify adjacent<br />

neighbours in its ring topology.<br />

The CiscoSRPTelnet agent discovers the connectivity of any device that<br />

supports the show controllers srp command. The agent definition file<br />

is configured to only accept Cisco devices that have an IOS known not to<br />

support the CISCO-SRP-MIB and those IOS versions that have known issues<br />

with SNMP discovery.<br />

IOS version 12.2(14)S7 and 12.2(18)S, used with NPE-G1 cards, are known to<br />

corrupt SNMP data.<br />

IOS version 12.2(15)BC1 is known to lack CISCO-SRP_MIB support.<br />

CiscoSwitchSnmp The CiscoSwitchSnmp agent contains the specialized methods for retrieving<br />

information from Cisco switches using SNMP. This agent uses a variety of<br />

methods for finding VLANs and card or port to ifIndex mappings because<br />

different Cisco switches store this information in different MIB variables.<br />

245


Chapter 9: <strong>Discovery</strong> Agents<br />

246<br />

Table 42: Ethernet Switch <strong>Discovery</strong> Agents (3 of 5)<br />

Agent name Function<br />

CiscoSwitchTelnet Before enabling this agent, it is necessary to configure SNMP and Telnet access<br />

and the respective Helpers, as described at the beginning of the section Types<br />

of Agent on page 242.<br />

The CiscoSwitchTelnet agent contains specialized methods for retrieving<br />

connectivity information from Cisco switches using Telnet. This agent uses a<br />

variety of methods to find VLANs and card/port to ifIndex mappings<br />

because different Cisco switches store this information in different MIB<br />

variables. Only FDB tables are downloaded using telnet. All other information<br />

is downloaded using SNMP.<br />

The Telnet commands used to obtain the FDB table are show cam dynamic<br />

and show mac-address table.<br />

Some devices might require enable mode in order to run the show<br />

mac-address table command.<br />

Corebuilder3ComSwitch The Corebuilder3ComSwitch agent discovers links for the CoreBuilder 9000<br />

layer 3 switches manufactured by 3Com.<br />

DasanSwitchTelnet Before enabling this agent, it is necessary to configure Telnet access and the<br />

Telnet Helper, as described at the beginning of the section Types of Agent on<br />

page 242.<br />

The DasanSwitchTelnet agent is responsible for the discovery of the layer 2<br />

connectivity held in the FDB/MAC table of Dasan switches. The agent was<br />

developed against the following devices:<br />

V5208 (OS 9.07)<br />

V5224 (OS 9.10)<br />

The agent is able to discover layer 2 connectivity, VLANs and trunk ports. It is<br />

configured to only run against devices with a sysObjectID of<br />

1.<strong>3.6</strong>.1.4.1.6296.* and that support the command show vlan.<br />

DefaultEthernetHub This agent has a specialized class for dealing with semi-intelligent hubs.<br />

ExtremeSwitch The ExtremeSwitch agent obtains layer 2 connectivity information, EDP<br />

neighbours, and VLAN details from Extreme switches.<br />

The Extreme devices must be configured to enable SNMP access and<br />

dot1dFdbTable population to achieve a detailed layer 2 discovery. Send the<br />

following commands to each Extreme device:<br />

enable snmp access<br />

enable dot1dFdbTable<br />

This configuration change is only required on switches running a version of<br />

ExtremeWare® prior to 6.1.8.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 42: Ethernet Switch <strong>Discovery</strong> Agents (4 of 5)<br />

Agent name Function<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Types of Agent<br />

FoundrySwitch The FoundrySwitch agent discovers switch connectivity of any Foundry device<br />

that supports the IEEE 802.1q or IEEE 802.1d standards, as modelled in the<br />

Q-BRIDGE-MIB and BRIDGE-MIB SNMP MIBs respectively.<br />

The agent definition file is configured to accept all SNMP-enabled Foundry<br />

devices by default. The agent will only discover devices that support the<br />

Q-BRIDGE-MIB dot1qVlanVersionNumber MIB variable or the<br />

BRIDGE-MIB.<br />

The FoundrySwitch agent also obtains multislot port trunking information, but<br />

does not discover single-slot port trunking.<br />

Some Foundry devices only support IEEE 802.1d and, as a consequence, no<br />

VLAN information is discovered for these devices.<br />

HuaweiSwitchTelnet Before enabling this agent, it is necessary to configure Telnet access and the<br />

Telnet Helper, as described at the beginning of the section Types of Agent on<br />

page 242.<br />

The HuaweiSwitchTelnet agent discovers the Ethernet switch connectivity for<br />

Huawei Quidway switches.<br />

This agent is telnet-based, but also requires SNMP access to discover certain<br />

information. It requires completion of the Privileged mode (Super 3 mode)<br />

sections of the TelnetStackPasswords.cfg configuration file. Failure to<br />

complete these sections will result in the agent failing.<br />

Certain telnet commands have the side-effect of changing the command<br />

prompt of a Huawei device. For example, the command prompt:<br />

becomes<br />

[device_name] or<br />

[device_name-diag] when certain commands are issued.<br />

It is essential that the parameters m_ConPrompt and m_PrivConPrompt in<br />

TelnetStackPasswords.cfg are configured to cope with these<br />

variations.<br />

HPSwitch The HPSwitch agent contains the specialized methods for retrieving<br />

connectivity information from HP ProCurve switches, including the download<br />

of enterprise-specific VLAN information.<br />

MACFromArpCache The ArpCache agent must be enabled for this agent to run.<br />

The MACFromArpCache agent is optionally activated in phase 3 of <strong>Discovery</strong>. It<br />

uses the ArpCache information retrieved by the ArpCache agent to retrieve the<br />

MAC address of the device. The agent is useful as it does not require SNMP<br />

access to the device to obtain the MAC address.<br />

247


Chapter 9: <strong>Discovery</strong> Agents<br />

248<br />

Table 42: Ethernet Switch <strong>Discovery</strong> Agents (5 of 5)<br />

Agent name Function<br />

Marconi3810 The Marconi3810 specialised agent discovers the Ethernet connectivity of<br />

Marconi ES-3810 switches running operating system version 4.x.x and 5.x.x.<br />

This agent also removes connectivity from LANE interfaces by default - this can<br />

be configured using the GetElanData flag in the .agnt file.<br />

SecureFast The SecureFast agent contains the specialized methods for retrieving<br />

connectivity information from Enterasys/Cabletron SecureFast VLAN switches.<br />

These devices use the Cabletron <strong>Discovery</strong> Protocol to discover their<br />

neighbours and have SecureFast operating mode turned on.<br />

This agent is sent to all Cabletron and Enterasys devices, specified by<br />

1.<strong>3.6</strong>.1.4.1.52.* and 1.<strong>3.6</strong>.1.4.1.5624.* in the .agnt file, and<br />

determines whether a device is SecureFast enabled by downloading the<br />

sfpsCommonNeighborSwitchMAC MIB variable.<br />

Devices in SecureFast mode do not support the dot1dBridge MIBs.<br />

StandardSwitch The StandardSwitch generic agent provides layer 2 connectivity discovery of<br />

all switches for which a specialized agent does not exist. The agent discovers<br />

layer 2 connectivity for devices that support the IEEE 802.1q or IEEE 802.1d<br />

standards, as modelled in the Q-BRIDGE-MIB and BRIDGE-MIB SNMP MIBs<br />

respectively.<br />

Devices in SecureFast mode do not support the dot1dBridge MIBs.<br />

SuperStack3ComSwitch The SuperStack3ComSwitch agent finds the connections in stacked switches<br />

manufactured by 3Com.<br />

XyplexEthernetHub The XyplexEthernetHub agent discovers the layer 2 connectivity of intelligent<br />

hubs manufactured by Xyplex.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Connectivity at the Layer 3 Network Layer<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Types of Agent<br />

There are a number of discovery agents that are specifically designed to retrieve connectivity information<br />

from OSI model layer 3 (the Network Layer) that is responsible for routing, congestion control, and sending<br />

messages between networks. These agents are shown in Table 43.<br />

Table 43: Routing Protocol <strong>Discovery</strong> Agents (1 of 4)<br />

Agent name Function<br />

CiscoBGPTelnet Before enabling this agent, it is necessary to configure Telnet access and the Telnet<br />

Helper, as described at the beginning of the section Types of Agent on page 242.<br />

The CiscoBGPTelnet agent downloads BGP information from Cisco routers. It is not<br />

enabled in the out-of-the-box configuration because it gathers a very specific piece of<br />

information only, that is, whether devices are route reflectors.<br />

ExtremeESRP Before enabling this agent, it is necessary to configure SNMP access and the SNMP<br />

Helper, as described at the beginning of the section Types of Agent on page 242.<br />

The ExtremeESRP agent discovers Extreme Standby Routing Protocol (ESRP)<br />

information from Extreme routing switches. ESRP is a feature of ExtremeWare that<br />

allows multiple switches to provide redundant routing services to users.<br />

The agent relies on the extremeEsrpTable and extremeEsrpNeighborTable<br />

of the EXTREME-ESRP-MIB being correctly populated.<br />

Interfaces Before enabling this agent, it is necessary to configure SNMP access and the SNMP<br />

Helper, as described at the beginning of the section Types of Agent on page 242.<br />

This agent is triggered by the AssocAddress agent returns.<br />

The Interfaces agent downloads interface information primarily from the interfaces<br />

table of RFC1213.mib. The information will then be written to the m_LocalNbr<br />

field of the returned entities. The returned variables can be added to, or subtracted<br />

from, by altering the Interfaces.agnt. Any basic MIB variable (sysDescr,<br />

sysName, and so on) or MIB variable that is indexed by the ifIndex can be added to<br />

the OIDs to download in the .agnt file.<br />

IpRoutingTable Before enabling this agent, it is necessary to configure SNMP access and the SNMP<br />

Helper, as described at the beginning of the section Types of Agent on page 242.<br />

The IpRoutingTable agent retrieves generic connectivity information by looking<br />

through the router routing table, as specified in RFC1213.<br />

The agent downloads elements from the routing table based on discovery scoping. The<br />

default agent setting assumes that the SNMP agents for particular devices support<br />

partial matching. If a device cannot partial match, this should be specified in the<br />

DiscoRouterPartialMatchRestrictions section of the .agnt file.<br />

249


Chapter 9: <strong>Discovery</strong> Agents<br />

250<br />

Table 43: Routing Protocol <strong>Discovery</strong> Agents (2 of 4)<br />

Agent name Function<br />

IpForwardingTable Before enabling this agent, it is necessary to configure SNMP access and the SNMP<br />

Helper, as described at the beginning of the section Types of Agent on page 242.<br />

The IpForwardingTable agent finds links in the more recent version of the routing<br />

tables, that is, the <strong>IP</strong> Forwarding table as specified in RFC 2096. It also exploits Open<br />

Shortest Path First (OSPF) information to enhance the discovery of Juniper devices.<br />

This agent downloads elements from the routing table based on discovery scoping.<br />

The default setting assumes that the SNMP agent for a particular device supports<br />

partial matching. If the device cannot partial match, this should be specified in the<br />

DiscoRouterPartialMatchRestrictions section of the .agnt file.<br />

IpBackupRoutes Before enabling this agent, it is necessary to configure SNMP access and the SNMP<br />

Helper, as described at the beginning of the section Types of Agent on page 242.<br />

The IpBackupRoutes agent finds links by looking through the IpNetToMedia MIB table,<br />

which gives the physical and <strong>IP</strong> address of devices connected to the router.<br />

This agent is not enabled in the out-of-the-box configuration because it retrieves a<br />

large amount of information that is not essential in order to determine layer 3<br />

connections. Furthermore, this information may be obsolete because it is downloaded<br />

from a table that is not dynamic and requires manual refresh. If you are performing a<br />

layer 2 discovery, then the server connectivity that this agent discovers is often<br />

obsolete, as it may have been superseded by switch connectivity information.<br />

ISISExperimental Before enabling this agent, it is necessary to configure SNMP access and the SNMP<br />

Helper, as described at the beginning of the section Types of Agent on page 242.<br />

The ISISExperimental agent discovers connectivity between routers that support the<br />

experimental ISIS MIBs. This agent should be used when some of your routers are<br />

configured with netmasks of 255.255.255.255, making them unsuitable for<br />

standard discovery.<br />

TraceRoute Before enabling this agent, it is necessary to configure SNMP access and the SNMP<br />

Helper, as described at the beginning of the section Types of Agent on page 242.<br />

The TraceRoute agent finds links by tracing the route taken by an ICMP ping packet<br />

with a predetermined life span. If you are using this agent, you should increase the<br />

value of m_Timeout in the DiscoPingHelperSchema.cfg configuration file, as<br />

traceroute functionality takes longer than standard ICMP. This agent is not enabled in<br />

the out-of-the-box configuration as it does not only operate on SNMP-enabled devices.<br />

Therefore, if this agent were switched on by default, it would trace the route to every<br />

device on the network. The result could be incomplete connectivity in a meshed<br />

environment or inaccurate connectivity in a load-balanced environment.<br />

CiscoFrameRelay Before enabling this agent, it is necessary to configure SNMP access and the SNMP<br />

Helper, as described at the beginning of the section Types of Agent on page 242.<br />

The CiscoFrameRelay agent discovers Frame Relay interfaces and connections between<br />

two points on Frame Relay networks that incorporate Cisco devices. Frame Relay<br />

agents should be run in conjunction with the <strong>IP</strong> layer agents if you want to add DLCI<br />

information to the interfaces of Frame Relay devices.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 43: Routing Protocol <strong>Discovery</strong> Agents (3 of 4)<br />

Agent name Function<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Types of Agent<br />

HSRPSnmp Before enabling this agent, it is necessary to configure SNMP access and the SNMP<br />

Helper, as described at the beginning of the section Types of Agent on page 242.<br />

The HSRPSnmp agent retrieves connectivity information using SNMP by means of the<br />

MIB from routing devices that use the HSRP (Hot Stand-by Routing Protocol) Virtual <strong>IP</strong><br />

protocol.<br />

AlteonVRRP Before enabling this agent, it is necessary to configure SNMP access and the SNMP<br />

Helper, as described at the beginning of the section Types of Agent on page 242.<br />

VRRP is not modelled for RCA. The AlteonVRRP agent only sets tags on VRRP interfaces<br />

that show the state of Alteon routers at the time of the discovery.<br />

FoundryVRRP Before enabling this agent, it is necessary to configure SNMP access and the SNMP<br />

Helper, as described at the beginning of the section Types of Agent on page 242.<br />

VRRP is not modelled for RCA. The FoundryVRRP agent only sets tags on VRRP<br />

interfaces that show the state of Foundry routers at the time of the discovery.<br />

RFC2787VRRP Before enabling this agent, it is necessary to configure SNMP access and the SNMP<br />

Helper, as described at the beginning of the section Types of Agent on page 242.<br />

The RFC2787VRRP agent downloads VRRP information from routers running<br />

RFC2787-compliant VRRP, and supporting the RFC2787 VRRP MIB. Some Nokia firewalls<br />

support this MIB.<br />

VRRP is not modelled for RCA. This agent only sets tags on VRRP interfaces that show<br />

the state at the time of the discovery.<br />

There are two subtlety different versions of the VRRP MIB. They contain the same<br />

names but with different OIDs. If this agent does not work, try switching the VRRP MIB<br />

over to the other version. Nokia firewalls can run both versions of the MIB.<br />

251


Chapter 9: <strong>Discovery</strong> Agents<br />

252<br />

Table 43: Routing Protocol <strong>Discovery</strong> Agents (4 of 4)<br />

Agent name Function<br />

StandardBgp Before enabling this agent, it is necessary to configure SNMP access and the SNMP<br />

Helper, as described at the beginning of the section Types of Agent on page 242. It is<br />

also necessary to configure the Ping Helper as described in Configuring the PING Helper<br />

on page 291.<br />

The StandardBgp agent is responsible for discovery of networks running the Border<br />

Gateway Protocol. It supports any device that complies with the standard RFC1657<br />

(BGP4-MIB) MIB and discovers the following information:<br />

Autonomous System IDs<br />

BGP Peer connections to external peers (EBGP)<br />

BGP Peer connections to internal peers (IBGP)<br />

BGP acquired route data (not recommended)<br />

The agent definition file is configured to accept all SNMP enabled devices by default,<br />

but the agent will only accept devices that support the BGP44-MIB, bgpIdentifier<br />

MIB variable.<br />

The agent has the following additional configuration parameters in the<br />

DiscoAgent<strong>Discovery</strong>Scoping section of its .agnt file:<br />

GetPeerData – determines whether the agent should acquire BGP Peer data<br />

(activated by default).<br />

GetRouteData – determines whether the agent should acquire BGP routes<br />

(deactivated by default). This may result in a large amount of data being<br />

discovered.<br />

The StandardBgp agent does not currently support peer groups, confederations, per<br />

VRF BGP processes, or route reflection.<br />

NokiaVRRP Before enabling this agent, it is necessary to configure SNMP access and the SNMP<br />

Helper, as described at the beginning of the section Types of Agent on page 242.<br />

This agent downloads VRRP information from routers that support the Nokia<br />

interpretation of the VRRP MIB. The information retrieved includes the VRRP state, ID,<br />

primary <strong>IP</strong> and associated addresses. This information is retrieved from the following<br />

MIB variables:<br />

vrrpOperState<br />

vrrpOperMasterIpAddr<br />

vrrpAssoIpAddrRowStatus<br />

Discovering Connectivity between ATM Devices<br />

Asynchronous Transfer Mode (ATM) is an alternative switching protocol designed for mixed format data<br />

(such as pure data, voice, and video). Several types of discovery agents can be used to discover ATM devices<br />

on a network.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Types of Agent<br />

Note: Before enabling these agents, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

Table 44: ATM <strong>Discovery</strong> Agents (1 of 2)<br />

Agent name Function<br />

AtmForumPnni The AtmForumPnni agent retrieves connectivity information from ATM devices that use the<br />

Private Network-to-Network Interface (PNNI) dynamic routing protocol and the ATM Forum’s<br />

PNNI MIB. The PNNI protocol is commonly used on large networks, as it provides ATM switches<br />

with a detailed map of the network topology so that the ATM devices can make optimal routing<br />

decisions.<br />

CellPath90 The CellPath90 agent enables discovery of the ATM connection of Marconi CellPath 90 WAN<br />

(Wide Area Network) multiplexers. The CellPath 90 WAN multiplexer does not know the ATM<br />

addresses of its neighbours, so it can only be discovered when it is connected to another, more<br />

intelligent, ATM device that is certified by Micromuse.<br />

The CellPath90 discovery agent is used in the calculation of network topology. It places<br />

information about the CellPath 90 into the correct layers within the discovery database.<br />

CiscoPVC The CiscoPVC agent retrieves PVC data from Cisco devices.<br />

ILMI The ILMI agent retrieves connectivity information from devices using the Interim Local<br />

Management Interface (ILMI), an RFC standard for managing ATM and <strong>IP</strong> networks. It<br />

investigates how ATM networks are connected down to the layer 2 virtual circuit and port level.<br />

This agent also removes logical connectivity from LANE interfaces.<br />

ILMIForeSys The ILMIForeSys agent discovers physical ATM connections between devices by using the ILMI<br />

(Interim Local Management Interface) connectivity information provided by the Marconi ASX<br />

series of switches.<br />

When connectivity is deduced using ILMI information, it is usually the same as the connectivity<br />

that could have been calculated using PNNI information, as is the case with the standard<br />

AtmForumPnni and ILMI agents. However, there are some situations where the ILMI information<br />

contains details of a connection that is not in the PNNI information, and some situations where<br />

the PNNI information details a connection not in the ILMI information. The following examples<br />

detail situations where this may be the case:<br />

Connections between ASX series switches and SE420/SE440 IADs are only discovered using<br />

ILMI.<br />

Connections between Cisco routers or switches containing ATM cards and an ATM core are<br />

only discovered using ILMI.<br />

As with the PnniForeSys agent, the ILMIForeSys agent is designed to operate seamlessly in<br />

conjunction with the ILMI agent. A network containing a mixture of ASX devices and<br />

another vendor's devices (for example, Cisco 5509 switches with ATM cards) can, therefore,<br />

be accurately discovered by the <strong>Precision</strong> Server.<br />

253


Chapter 9: <strong>Discovery</strong> Agents<br />

254<br />

Table 44: ATM <strong>Discovery</strong> Agents (2 of 2)<br />

Agent name Function<br />

MariposaAtm The MariposaAtm agent discovers the ATM connectivity of the SE420 and SE440 Integrated<br />

Access Devices (IADs).<br />

Discovering MPLS Devices<br />

Note: The Ethernet switching and Frame Relay capabilities of these devices are not currently<br />

certified by Micromuse.<br />

PnniForeSys SNMP helper configuration for associated devices is a prerequisite for this agent. The<br />

AtmForumPnni agent must also be active.<br />

The PnniForeSys agent discovers physical ATM connections between devices by using the<br />

Private Network-to-Network Interface (PNNI) connectivity information provided by the Marconi<br />

ASX series switches. The PnniForeSys agent is designed to operate in conjunction with the<br />

AtmForumPnni agent.<br />

The PnniForeSys agent performs extra processing on Fore devices that do not store a logical<br />

ifIndex in their pnniLinkIfIndex variable. The information retrieved from these devices<br />

requires further processing in order to retrieve the actual ifIndex, which is held within the<br />

ifTable .<br />

The agents shown in Table 45 on page 255 are specialized to retrieve MPLS (Multiprotocol Label<br />

Switching) data from different kinds of devices using different protocols. For more details on these agents,<br />

see Chapter 11: Configuring an MPLS <strong>Discovery</strong> on page 325, which includes the following information<br />

necessary when configuring MPLS agents:<br />

Configuring SNMP and Telnet access to MPLS devices, as described in Configuring MPLS Agents and<br />

SNMP and Telnet Access on page 329<br />

Optionally specifying which VPNs and VRFs to discover, as described in Defining the Scope of an<br />

MPLS/VPN <strong>Discovery</strong> on page 333<br />

Specifying whether to perform route target-based (RT-based) or label switch path-based (LSP-based)<br />

MPLS discovery, as described in Configuring MPLS <strong>Discovery</strong> Method on page 330<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Types of Agent<br />

The agents that retrieve MPLS data use either TELNET or SNMP to retrieve the data. Before enabling the<br />

MPLS agents, ensure that you first configure Telnet and SNMP access as follows:<br />

Before enabling the MPLS agents that use TELNET, ensure that you have configured TELNET to<br />

enable the agents to access devices and to understand device output, as described in Configuring<br />

Telnet on page 331.<br />

Before enabling the MPLS agents that use SNMP, ensure that you have configured SNMP to enable<br />

the agents to access devices and to specify threads, timeouts, and number of retries, as described in<br />

Configuring SNMP on page 332.<br />

Table 45: MPLS <strong>Discovery</strong> Agents<br />

Agent name Function<br />

CiscoMPLSSnmp The CiscoMPLSSnmp agent discovers MPLS paths on Cisco devices that have the Cisco<br />

Experimental MPLS MIBs enabled.<br />

CiscoMPLSTelnet The CiscoMPLSTelnet agent discovers MPLS paths on Cisco devices.<br />

JuniperMPLSTelnet The JuniperMPLSTelnet agent discovers MPLS paths on Juniper devices.<br />

LaurelMPLSTelnet The LaurelMPLSTelnet agent discovers MPLS paths on Laurel devices. This agent is intended for<br />

route target-based discoveries only.<br />

UnisphereMPLSTelnet The UnisphereMPLSTelnet agent discovers MPLS paths on Juniper ERX routers (formerly<br />

Unisphere).<br />

Deduplicating Identical <strong>IP</strong> Addresses in Different VPNs<br />

During an MPLS discovery, <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> may discover devices in different VPNs with identical <strong>IP</strong><br />

addresses. In this case <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> is unable to differentiate between these devices and may resolve<br />

device connectivity incorrectly. The devices in question may be the CE routers at the edge of the VPNs or<br />

may be devices within the VPNs.<br />

To overcome this problem, activate the AsAgent agent and provide <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> with a mapping<br />

file, ASMap.txt. In this file provide a complete list of devices in each VPN, together with an<br />

AddressSpace tag, which defines which VPN the device belongs to. Table 46 provides a description of<br />

the AsAgent agent.<br />

Table 46: AsAgent Agent<br />

Agent name Function<br />

AsAgent Enables <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> to uniquely identify devices in different VPNs with identical <strong>IP</strong><br />

addresses, and thereby correctly resolve device connectivity. This agent works in conjunction<br />

with the ASRetprocessing.stch stitcher and with the ASMap.txt file in<br />

NCHOME/precision/etc.<br />

255


Chapter 9: <strong>Discovery</strong> Agents<br />

256<br />

Table 47 provides the format of the ASMap.txt file by showing an example of the content of this file.<br />

Fields in this text file must be separated by tabs.<br />

Table 47: Format of ASMap.txt File<br />

Base Name Address Space <strong>IP</strong> Address<br />

CERouter-1 CUSTOMER-1 192.168.2.1<br />

CEDevice-a CUSTOMER-1 192.168.2.21<br />

CEDevice-b CUSTOMER-1 192.168.2.22<br />

CEDevice-c CUSTOMER-1 192.168.2.23<br />

CERouter-2 CUSTOMER-2 192.168.2.1<br />

CEDevice-a CUSTOMER-2 192.168.2.31<br />

CEDevice-b CUSTOMER-2 192.168.2.32<br />

Discovering NAT Gateways<br />

Table 48 lists the agents that download NAT (Network Address Translation) information from known<br />

NAT gateways. For more details, see Chapter 12: Managing NAT Environments on page 341.<br />

Note: None of the agents listed in Table 48 is enabled in the out-of-the-box configuration. This is because<br />

these agents require advanced configuration and thus it is preferable not to enable it by default.<br />

Table 48: NAT Gateway Agents (1 of 2)<br />

Agent name Function<br />

CiscoNATTelnet Before enabling this agent, it is necessary to configure Telnet access and the Telnet Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The CiscoNATTelnet agent interrogates Cisco routers acting as NAT gateways. This agent<br />

downloads the static NAT translations by means of TELNET from the device. The translations<br />

are then used to identify within which part of the network a particular device exists.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 48: NAT Gateway Agents (2 of 2)<br />

Agent name Function<br />

Configuring NAT Gateway Management Interfaces<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Types of Agent<br />

NATNetScreen Before enabling this agent, it is necessary to configure Telnet access and the Telnet Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The NATNetScreen agent interrogates NetScreen® Firewalls acting as NAT gateways. This<br />

agent downloads the static NAT translations by means of TELNET from the device. The<br />

translations are then used to identify within which part of the network a particular device<br />

exists.<br />

NATTextFileAgent Before enabling this agent, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The NATTextFileAgent mimics the function of the other NAT gateway agents by reading NAT<br />

mapping information from a flat file. The translations are then used to identify within which<br />

part of the network a particular device exists.<br />

DISCO assumes that the management interface of the NAT gateway is in public address space. If this is not<br />

the case then <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> is not able to identify the address space of interfaces on the NAT gateway<br />

device. This may result in incorrect connectivity. An example of a situation where the NAT gateway<br />

management interface is not in public address space is when a VPN is used to access the management<br />

interface.<br />

To overcome this problem, activate the NATGateway agent and provide <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> with a<br />

mapping file, NATGateways.txt. In this file provide a list of all NAT gateway devices together with the<br />

interfaces on each device and a field to indicate whether the interface is on the public or private side of the<br />

NAT gateway. Table 49 provides a description of the NATGateway agent.<br />

Table 49: NATGateway Agent<br />

Agent name Function<br />

NATGateway Enables <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> to determine whether a given interface on a NAT gateway device<br />

is on the public or private side of the NAT gateway, and thereby correctly resolve device<br />

connectivity. This agent works in conjunction with the<br />

NATGatewayRetProcessing.stch stitcher and with the NATGateways.txt file in<br />

NCHOME/precision/etc.<br />

257


Chapter 9: <strong>Discovery</strong> Agents<br />

258<br />

Table 50 provides the format of the NATGateways.txt file by showing an example of the content of<br />

this file. Fields in this text file must be separated by tabs.<br />

Table 50: Format of NATGateways.txt File<br />

Base Name Inside or Outside Interface <strong>IP</strong> Address<br />

1.1.1.4 outside 172.16.4.10<br />

1.1.1.4 inside 10.52.2.10<br />

sca_T1ukP_16 outside 192.168.36.93<br />

sca_T1ukP_16 outside 192.168.36.98<br />

Discovering Containment Information<br />

An important principle used by the network model is containment. A container holds other objects. You can<br />

put any object within a container and even mix different objects within the same container.<br />

The Entity agent queries the MIB for each entity and retrieves containment information for that entity.<br />

Containment information includes a physical breakdown of all parts held within the container, as well as<br />

detailed information on each of these parts. The parts that can be held within a container are as follows:<br />

Chassis<br />

Interface<br />

Logical interface<br />

Vlan object<br />

Card<br />

PSU<br />

Logical collection, such as a VPN<br />

Module<br />

There is also an Unknown category, which covers entities for which no part type has been defined.<br />

Note: Before enabling this agent, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

Running the Entity agent during a discovery is entirely optional. Some containment information will be<br />

gathered during a discovery even if the Entity agent is not run. You should run the Entity agent if you wish<br />

to model physical containment and perform asset management. You can find more information on<br />

containment in About the Containment Model on page 359.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Types of Agent<br />

Note: During a discovery, the Entity agent retrieves a large amount of data. This slows down the discovery.<br />

You should therefore only use this agent if you need to perform asset management on the retrieved data.<br />

You can configure the Entity agent to specify how much data the agent should retrieve. You can optionally<br />

choose to download this extra information from the entity MIBs of the Sensor, Power, Asset, and Module<br />

entities. Do this by setting the following variables in the Entity.agnt file:<br />

GetSensorData<br />

GetPowerData<br />

GetModuleData<br />

GetAssetData<br />

In each case, specify that you wish to get the data by setting a value of 1. Specify that you do not wish to get<br />

the data by setting a value of 0.<br />

Note: The Entity.agnt file, together with all other agent configuration files, can be found in the<br />

NCHOME/precision/disco/agents directory. Note that NCHOME is the environment variable<br />

that contains the path to the <strong>Netcool</strong> Suite home directory. For information on how this environment<br />

variable varies with platform, see Operating System Considerations on page 10<br />

<strong>Discovery</strong> Agents on Other Protocols<br />

Table 51 lists the agents that discover devices that use other protocols to the ones described so far in this<br />

section.<br />

Table 51: <strong>Discovery</strong> Agents on Other Protocols (1 of 2)<br />

Agent name Function<br />

AlteonStp Before enabling this agent, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

This is a Spanning Tree Protocol discovery agent for Alteon switches that support the dot1dStp<br />

section of the BRIDGE-MIB.<br />

CDP Before enabling this agent, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The CDP agent understands the protocol used among Cisco communication devices. Using CDP,<br />

Cisco devices can discover their nearest neighbors and store minimal information about them.<br />

This agent begins with the address of a known Cisco device and uses CDP to find more complete<br />

information about the locations of other connected or neighboring Cisco devices.<br />

259


Chapter 9: <strong>Discovery</strong> Agents<br />

260<br />

Table 51: <strong>Discovery</strong> Agents on Other Protocols (2 of 2)<br />

Agent name Function<br />

CiscoOSPFTelnet Before enabling this agent, it is necessary to configure Telnet access and the Telnet Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The CiscoOSPFTelnet agent is responsible for discovery of Cisco devices running the Open<br />

Shortest Path First (OSPF) protocol. This agent provides complementary information to that of the<br />

StandardOSPF agent, such as what OSFP processes are running and virtual-link information.<br />

FddiDefault Before enabling this agent, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The FddiDefault agent discovers any device that supports the standard FDDI MIB. When an FDDI<br />

device is interrogated, information relating to the interfaces of that device and its upstream and<br />

downstream neighbours is returned. The FddiLayer stitcher uses this and all other FDDI agents to<br />

determine the FDDI ring topology.<br />

FddiCiscoConc Before enabling this agent, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The FddiCiscoConc agent discovers Cisco Concentrator FDDI devices. Cisco concentrators know<br />

the full connectivity of every FDDI ring that passes though them, as opposed to just their upstream<br />

and downstream neighbours. Hence the FddiLayer stitcher gives the topology information<br />

returned by this agent precedence over that found by FddiDefault.<br />

StandardOSPF Before enabling this agent, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The StandardOSPF agent is responsible for the discovery of networks running the Open Shortest<br />

Path First (OSPF) protocol. It will support any device that complies with the standard RFC1850.<br />

StandardSTP Before enabling this agent, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The StandardSTP agent discovers STP connectivity data on any STP-enabled switch that supports<br />

the dot1dSTP section of the BRIDGE-MIB. You should run this agent in addition to any other<br />

necessary switch agents in order to discover STP backup (blocking) connections.<br />

The STP switch discovery method has the following advantages over other switch-based discovery<br />

methods:<br />

Hidden Links – STP backup (blocking) connections are discovered.<br />

Speed – the agent completes in Phase 1 – no pinging is required.<br />

Note : The STP agent only shows connections between STP enabled switches, that is, it ignores<br />

connections to nodes, non-switch devices, and non-STP enabled switches.<br />

This agent will not discover multiple STP instances, VLANs, or Virtual Routers.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Context Agents<br />

!<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Types of Agent<br />

Table 52 lists the agents that take part in a context-sensitive discovery. For information on enabling a<br />

context-sensitive discovery, see Context-Sensitive <strong>Discovery</strong> on page 33.<br />

Warning: When a context-sensitive discovery is enabled, the discovery process automatically chooses the<br />

correct Context agent for any particular device. For this reason, you should not manually enable or disable<br />

Context agents, either through the configuration files or through the <strong>Discovery</strong> <strong>Configuration</strong> GUI.<br />

Note: These agents require Telnet access and the Telnet Helper, as described at the beginning of the section<br />

Types of Agent on page 242.<br />

Table 52: Context Agents<br />

Agent Name Function<br />

RedbackContext The RedbackContext agent discovers virtual router context-sensitive information for<br />

Redback® devices.<br />

UnisphereERXContext The UnisphereERXContext agent discovers virtual router and VRF context-sensitive<br />

information for Juniper ERX devices.<br />

Task-specific <strong>Discovery</strong> Agents<br />

Table 53 lists task-specific discovery agents.<br />

Table 53: Task-specific <strong>Discovery</strong> Agents (1 of 4)<br />

Agent name Function<br />

You can restrict the scope of the VRF contexts discovered by configuring the optional<br />

DiscoAgent<strong>Discovery</strong>Scoping section in the .agnt file. The configurable options<br />

are the following:<br />

IncludeVRF – allows the discovery of the named VRF.<br />

ExcludeVRF – does not discover the specified VRF.<br />

VRF names are case-sensitive. The wildcard "*" may be used in place of a VRF name to<br />

apply the filter to all VRFs. If no filters are specified, all VRFs will be discovered by default.<br />

AlliedTelesynATSwitch Before enabling this agent, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The AlliedTelesynATSwitch agent discovers Ethernet switches made by Allied Telesyn.<br />

AlteonSwitch Before enabling this agent, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

This agent retrieves layer 2 connectivity information from Alteon load balancers.<br />

261


Chapter 9: <strong>Discovery</strong> Agents<br />

262<br />

Table 53: Task-specific <strong>Discovery</strong> Agents (2 of 4)<br />

Agent name Function<br />

ARPCache Before enabling this agent, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The ARPCache agent assists in populating the Helper Server with <strong>IP</strong> to MAC address<br />

mappings in preparation for the Ethernet-based discovery agents.<br />

You must run this agent if you are running a layer 2 discovery. This agent is optional if you<br />

are running a layer 3 discovery. However, it can be more efficient to use the ARP Cache<br />

discovery agent because in most network environments the ARP helper can only run on one<br />

subnet at a time.<br />

ASM Determines whether <strong>Netcool</strong>/ASMs for the following commercial server and database<br />

products are running on a device:<br />

Oracle<br />

Apache<br />

Microsoft SQL Server<br />

Microsoft Exchange<br />

Microsoft Internet Information Server (IIS)<br />

Microsoft Active Directory<br />

IBM WebSphere<br />

BEA WebLogic<br />

SAP<br />

Sybase ASE<br />

IBM Lotus Notes/Domino Server<br />

The ASM agent determines whether an application is running by querying<br />

<strong>Netcool</strong>/ASM-specific MIBs for the device. These MIBs are installed by default when you<br />

install <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>.<br />

The ASM agent can only retrieve this information from network devices on which<br />

<strong>Netcool</strong>/ASM is deployed. Typically, you would deploy a <strong>Netcool</strong>/ASM sub-agent on each<br />

commercial server and database product which is running on a device and whose<br />

performance you wish to monitor. For more information on <strong>Netcool</strong>/ASM, see the<br />

<strong>Netcool</strong>/SSM Administration <strong>Guide</strong>.<br />

CM Retrieves data from cable modems connected to a cable modem terminating services<br />

device.<br />

Note: If activated, this agent retrieves a large amount of information. Activating this agent<br />

may therefore place a heavy load on memory. You should only activate this agent if specific<br />

cable modem information is required beyond that provided by other agents.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 53: Task-specific <strong>Discovery</strong> Agents (3 of 4)<br />

Agent name Function<br />

CMTS Discovers cable modem terminating services devices. This agent also discovers cable<br />

modem connectivity.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Types of Agent<br />

Note: If activated, this agent retrieves a large amount of information. Activating this agent<br />

may therefore place a heavy load on memory. You should only activate this agent if specific<br />

cable modem information is required beyond that provided by other agents.<br />

ExtraDetails Before enabling this agent, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The ExtraDetails agent is a text-based agent that builds on the basic SNMP information<br />

already retrieved by the Details agent.<br />

This agent retrieves the following information:<br />

sysDescr<br />

sysLocation<br />

sysUpTime<br />

sysServices<br />

ifNumber<br />

HPNetworkTeaming Before enabling this agent, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The HPNetworkTeaming agent discovers secondary NICs on HP Proliant Teamed network<br />

cards.<br />

If this agent is not enabled, only the primary NIC on an HP Proliant device will be discovered<br />

(as a local neighbour to the server) because only this NIC resides in the ifTable. This agent<br />

will create all NICs as local neighbours to the server.<br />

IfStackTable Before enabling this agent, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The IfStackTable determines the interface stacking hierarchy on devices that support<br />

the RFC 2863 MIB.<br />

JuniperERXIfStackTable Before enabling this agent, it is necessary to configure Telnet access and the Telnet Helper,<br />

as described at the beginning of the section Types of Agent on page 242.<br />

The JuniperERXIfStackTable determines the interface stacking hierarchy on Juniper ERX<br />

devices.<br />

This agent determines virtual-router and VRF context-sensitive stacking information for<br />

Juniper ERX devices. When a context-sensitive discovery is enabled this agent can be<br />

disabled, as the IfStackTable agent also determines this information. This will improve the<br />

performance of <strong>Discovery</strong>.<br />

263


Chapter 9: <strong>Discovery</strong> Agents<br />

264<br />

Table 53: Task-specific <strong>Discovery</strong> Agents (4 of 4)<br />

Agent name Function<br />

LoopbackDetails Before enabling this agent, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The LoopbackDetails agent is used to ensure that the management interface of a device is<br />

used in the topology andin subsequent monitoring as the main <strong>IP</strong>/name combination. The<br />

agent retrieves information needed to identify the management interfaces. This data is then<br />

used in the NamingFromLoopbackDetails stitcher.<br />

SSM Before enabling this agent, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The SSM agent retrieves MIB information by SNMP from devices running <strong>Netcool</strong>/SSM<br />

agents. This agent retrieves information such as the software installed on the device,<br />

running processes, CPU utilization, storage devices on this entity, free disk space, and so on.<br />

The SSM agent can only retrieve this information from network devices on which the<br />

<strong>Netcool</strong>/SSM Agent is deployed. Typically, you would deploy a <strong>Netcool</strong>/SSM Agent on<br />

devices whose performance you wish to monitor. For more information on the <strong>Netcool</strong>/SSM<br />

Agent, see the <strong>Netcool</strong>/SSM Application <strong>Guide</strong>.<br />

SSMOracle Before enabling this agent, it is necessary to configure SNMP access and the SNMP Helper, as<br />

described at the beginning of the section Types of Agent on page 242.<br />

The <strong>Netcool</strong>/SSM application and the Oracle monitoring package must also be running.<br />

The SSMOracle agent retrieves MIB information by SNMP from devices running <strong>Netcool</strong>/SSM<br />

agents. This agent retrieves information such as the Oracle database names, fields, and<br />

database sizes.<br />

The SSMOracle agent can only retrieve this information from network devices on which the<br />

<strong>Netcool</strong>/SSM Agent is deployed. Typically, you would deploy a <strong>Netcool</strong>/SSM Agent on<br />

devices whose performance you wish to monitor. For more information on the <strong>Netcool</strong>/SSM<br />

Agent, see the <strong>Netcool</strong>/SSM Application <strong>Guide</strong>.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


9.3 Enabling and Disabling the Agents<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Enabling and Disabling the Agents<br />

By specifying whether or not a given discovery agent is to run during a discovery, you can perform<br />

layer-specific, protocol-specific, and device-technology-specific discoveries. This section explains how to<br />

enable and disable the discovery agents by configuring OQL inserts into the DiscoAgents.cfg<br />

configuration file. For a quick reference guide to the agents that must be run for a given type of discovery,<br />

see Selecting Agents To Run on page 267. The discovery agents can also be enabled and disabled using the<br />

<strong>Discovery</strong> <strong>Configuration</strong> Tool, as described in Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong><br />

GUI on page 85.<br />

Enabling and Disabling the <strong>Discovery</strong> Agents Prior to a <strong>Discovery</strong><br />

The AssocAddressRetProcessing.stch stitcher determines which discovery agents are active by<br />

evaluating the records in the disco.agents table. The stitcher also ensures that only the agents for<br />

which disco.agents.m_Valid is set to 1 are allowed to run during the discovery.<br />

Setting a <strong>Discovery</strong> Agent to Be Active<br />

In order to ensure that a discovery agent is active, locate the relevant insertion in the DiscoAgents.cfg<br />

file and ensure that the m_Valid column is set to one. The following example activates the<br />

IpRoutingTable discovery agent.<br />

insert into disco.agents<br />

(<br />

m_AgentName, m_Valid, m_AgentClass, m_IsIndirect, m_Precedence<br />

)<br />

values<br />

(<br />

'IpRoutingTable', 1, 0, 0, 2<br />

);<br />

The following example OQL inserts activate the Details and Associated Address agents.<br />

insert into disco.agents<br />

(<br />

m_AgentName, m_Valid, m_AgentClass, m_IsIndirect, m_Precedence<br />

)<br />

values<br />

(<br />

'Details', 1, 0, 0, 1<br />

);<br />

insert into disco.agents<br />

(<br />

m_AgentName, m_Valid, m_AgentClass, m_IsIndirect, m_Precedence<br />

)<br />

values<br />

265


Chapter 9: <strong>Discovery</strong> Agents<br />

266<br />

(<br />

);<br />

'AssocAddress', 1, 0, 0, 2<br />

Enabling the ARP Cache Agent<br />

The ARP Cache agent is designed to assist in MAC address to <strong>IP</strong> address resolution during the discovery<br />

process. You must ensure that this agent is running during a layer 2 discovery by ensuring that the insert<br />

into the disco.agents table has its m_Valid column set to 1 before starting the discovery.<br />

insert into disco.agents<br />

(<br />

m_AgentName, m_Valid, m_AgentClass, m_IsIndirect, m_Precedence<br />

)<br />

values<br />

(<br />

'ArpCache', 1, 0, 0, 2<br />

);<br />

The ArpCache agent is optional but recommended for layer 3 discoveries. Setting the ArpCache agent status<br />

to active ensures that the DetailsRetProcessing stitcher passes entities across to the ArpCache<br />

agent, which helps to speed up the discovery process.<br />

Setting a <strong>Discovery</strong> Agent to Be Inactive<br />

In order to ensure that the discovery agents that you do not want to run are disabled, locate the insertions<br />

for these agents in the DiscoAgents.cfg file and ensure that the m_Valid column is set to 0. The<br />

following example deactivates the StandardSwitch and the SuperStack3ComSwitch discovery agents.<br />

insert into disco.agents<br />

(<br />

m_AgentName, m_Valid, m_AgentClass, m_IsIndirect, m_Precedence<br />

)<br />

values<br />

(<br />

'StandardSwitch', 0, 1, 1, 3<br />

);<br />

insert into disco.agents<br />

(<br />

m_AgentName, m_Valid, m_AgentClass, m_IsIndirect, m_Precedence<br />

)<br />

values<br />

(<br />

'SuperStack3ComSwitch', 0, 1, 1, 3<br />

);<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


9.4 Selecting Agents To Run<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Selecting Agents To Run<br />

This section provides a guide to selecting the right agents for your discovery. Criteria are given for selecting<br />

which <strong>IP</strong> layer and standard agents to run.<br />

If your network uses non-<strong>IP</strong> protocols such as CDP, ATM, or MPLS, you should also read Discovering<br />

Device Protocols on page 271 and Chapter 11: Configuring an MPLS <strong>Discovery</strong> on page 325. If you need to<br />

discover devices with virtual routers, you should also read Context-Sensitive <strong>Discovery</strong> on page 33.<br />

Which <strong>IP</strong> layer Agents to Use<br />

The <strong>IP</strong> layer agents that you need to use depend on the devices on your network:<br />

If you do not want to have your <strong>IP</strong> routing tables accessed, you must only use the IpBackupRoutes<br />

agent.<br />

This agent is not used by default as it has the following drawbacks:<br />

– It retrieves data from a table that is not dynamic. If the router has not been refreshed, then the<br />

data retrieved by this agent may be spurious.<br />

– The table is large and therefore takes a long time to download.<br />

If there are modern devices on the network, you must use the IpRoutingTable agent and the<br />

IpForwardingTable agent.<br />

These agents provide an accurate picture of <strong>IP</strong> layer connectivity and are therefore used by default.<br />

Which Standard Agents To Use<br />

The standard agents that you need to use depend on the information you require and the devices on your<br />

network:<br />

The TraceRoute agent can be used if there is a firewall on the network, since SNMP calls cannot<br />

always be made through firewalls. If you use the TraceRoute agent, you must specify, as a discovery<br />

seed, the subnet node for the subnet on the other side of the firewall.<br />

The ArpCache agent retrieves the physical address of a device, so is only required (in conjunction<br />

with the Switch agents) when performing layer 2 discoveries.<br />

Frame Relay agents should be run in conjunction with the <strong>IP</strong> layer agents if you need to add DLCI<br />

information to the interfaces of Frame Relay devices.<br />

Switch agents must be run for a layer 2 discovery.<br />

The device-specific and protocol-specific agents are only required to discover the devices or protocols<br />

to which they relate.<br />

267


Chapter 9: <strong>Discovery</strong> Agents<br />

Which Specialized Agents To Run<br />

268<br />

Several agents included with the <strong>Precision</strong> Server need only be run if you need to discover certain device<br />

types or network technologies. These agents are only available if the appropriate option was selected at install<br />

time. You can install any of the specialized agents into an existing <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> installation by<br />

running the installation script again and selecting the appropriate options. For more information, see the<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Installation and Deployment <strong>Guide</strong>.<br />

The specialized agents that you need to run depend on the devices and protocols in your network:<br />

The Extreme agent can be used to extract layer 2 connectivity information, EDP neighbors, and<br />

VLAN details from Extreme switches.<br />

The ExtremeESRP agent discovers Extreme Standby Routing Table information from Extreme<br />

routing switches.<br />

The PnniForeSys agent discovers physical ATM connections between devices by using the PNNI<br />

(Private Network-to-Network Interface) connectivity information provided by the Marconi ASX<br />

series switches.<br />

The ILMIForeSys agent discovers physical ATM connections between devices by using the ILMI<br />

(Interim Local Management Interface) connectivity information provided by the Marconi ASX series<br />

switches.<br />

The CellPath90 agent discovers the ATM connection of a CellPath 90 WAN (Wide Area Network)<br />

multiplexer.<br />

The Marconi3810 agent discovers the Ethernet connectivity of the ES-3810 switches running<br />

operating system version 4.x.x.<br />

The MariposaAtm agent discovers the ATM connectivity of the SE420 and SE440 IADs.<br />

Note: The Ethernet switching and Frame Relay capabilities of these devices are not currently certified<br />

by Micromuse.<br />

The ILMI agent discovers connectivity between ATM devices running ILMI that support the ATM<br />

Forum's ATM MIB. The CiscoPVC agent retrieves PVC data from Cisco devices.<br />

The AtmForumPnni agent discovers connectivity between devices running ATM Forum PNNI that<br />

correctly support the ATM Forum's PNNI MIB.<br />

For Cisco devices, run the CiscoMPLSSnmp agent if you have the MPLS MIBs enabled on a device,<br />

otherwise, use the CiscoMPLSTelnet agent.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Selecting Agents To Run<br />

For Juniper devices, run the JuniperMPLSTelnet agent if you wish to discover MPLS paths.<br />

For Juniper ERX devices (formerly Unisphere), the UnisphereMPLSTelnet agent must be used to<br />

discover MPLS paths, as these devices are sufficiently different to the Juniper "M" series routers that a<br />

different agent is required.<br />

Suggested List of Agents for a Layer 3 <strong>Discovery</strong><br />

This section gives you a list of which agents you should run for a layer 3 discovery. The exact choice of agents<br />

depends on your network.<br />

Tip: Some routers support layer 2 technologies. For example, when an ATM card is located in a router<br />

chassis, layer 3 discovery agents, such as the IpRoutingTable agent, only discover interfaces with an <strong>IP</strong><br />

address. Therefore, in order to fully discover all the interfaces on routers that support layer 2 technologies,<br />

you must run the appropriate agents, as listed under Suggested List of Agents for a Layer 2 <strong>Discovery</strong> below.<br />

When running a layer 3 discovery, the following agents must be run:<br />

Details and AssocAddress<br />

A combination of the following <strong>IP</strong> layer agents:<br />

– IpRoutingTable<br />

– IpBackupRoutes<br />

– IpRoutingTable and IpForwardingTable<br />

HSRP<br />

VRRP<br />

TraceRoute (if firewalls are present)<br />

Suggested List of Agents for a Layer 2 <strong>Discovery</strong><br />

This section provides a list of agents that you should run for a layer 2 discovery. The exact choice of agents<br />

depends on your network.<br />

269


Chapter 9: <strong>Discovery</strong> Agents<br />

270<br />

When running a layer 2 discovery, the following agents must be run:<br />

Details and AssocAddress<br />

A combination of the following <strong>IP</strong> layer agents:<br />

– IpRoutingTable<br />

– IpBackupRoutes<br />

– IpRoutingTable and IpForwardingTable<br />

Switch<br />

FrameRelay<br />

ArpCache<br />

ATM<br />

FDDI<br />

HSRP<br />

VRRP<br />

MPLS<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


9.5 Discovering Device Protocols<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Discovering Device Protocols<br />

In order to discover device technologies (that is, those that use protocols other than <strong>IP</strong>) on your network,<br />

you must ensure that the appropriate agents are active. Some examples of device protocols that are supported<br />

by the <strong>Precision</strong> Server are:<br />

Frame Relay<br />

Private Network-Network Interface (PNNI)<br />

Cisco <strong>Discovery</strong> Protocol (CDP)<br />

Hot Standby Routing Protocol (HSRP)<br />

Fibre Distributed Data Interface (FDDI)<br />

Asynchronous Transfer Mode (ATM)<br />

Integrated Local Management Interface (ILMI)<br />

Multiprotocol Label Switching (MPLS)<br />

Example: Discovering Devices that Use CDP<br />

The CDP discovery agent, defined in the NCHOME/precision/disco/agents/CDP.agnt agent<br />

file, must be enabled prior to beginning the discovery in order to discover devices that use CDP. You can<br />

enable the CDP agent by ensuring that the value of the m_Valid column is set to 1, as shown in the<br />

following insert.<br />

insert into disco.agents<br />

(<br />

m_AgentName, m_Valid, m_AgentClass, m_IsIndirect, m_Precedence<br />

)<br />

values<br />

(<br />

'CDP', 1, 7, 0, 3<br />

);<br />

Configuring Extreme Devices<br />

In order to achieve a detailed layer 2 discovery, ensure that your Extreme devices are configured to enable<br />

SNMP access and dot1dFdbTable population. This configuration change should only be required on<br />

switches running a version of ExtremeWare ® prior to 6.1.8. To do this, send the following commands to<br />

each Extreme device:<br />

enable snmp access<br />

enable dot1dFdbTable<br />

271


Chapter 9: <strong>Discovery</strong> Agents<br />

9.6 Filtering Devices Sent to the Agents<br />

272<br />

In the default discovery data flow, devices that have been found by the finders are sent to the Details agent,<br />

which retrieves basic device details. The device is then sent to the Associated Address agent, which checks<br />

that the device has not already been discovered using another interface, and downloads all the associated <strong>IP</strong><br />

addresses.<br />

The AssocAddressRetProcessing stitcher distributes the details of devices that have not already been<br />

discovered to the appropriate discovery agent. If an agent has no filter defined, it accepts any device that is<br />

sent to it, although you can configure the agent filters if necessary. The following reasons explain why you<br />

might want to filter the devices that a given discovery agent processes:<br />

To speed up the discovery process. By reducing the range of devices an agent has to consider, you<br />

reduce the amount of processing that agent has to perform.<br />

To avoid the processing of sensitive devices.<br />

To restrict certain devices to a particular discovery agent.<br />

Introduction to the <strong>Discovery</strong> Agent Filter<br />

You can apply a filter to a discovery agent by editing the supported devices filter within the<br />

DiscoAgentSupportedDevices( ); section of the discovery agent definition file<br />

(NCHOME/precision/disco/agents/*.agnt). All discovery agents have a definition file in this<br />

directory, regardless of whether the agent is text-based or precompiled.<br />

The Supported Devices Filter<br />

The supported devices filter is a filter against the attributes of the agentTemplate.despatch table,<br />

so you can filter against attributes such as those listed in Table 54.<br />

Table 54: Columns of the agentTemplate.despatch Table (1 of 2)<br />

Column name Description<br />

m_Name The unique name of the network entity.<br />

m_UniqueAddress The unique <strong>IP</strong> address of the network entity.<br />

m_Protocol The protocol of the discovered device.<br />

(1) <strong>IP</strong><br />

(2) <strong>IP</strong>-NAT<br />

m_ObjectId The device class (a textual representation of an ASN.1 address).<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 54: Columns of the agentTemplate.despatch Table (2 of 2)<br />

Column name Description<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Filtering Devices Sent to the Agents<br />

m_SnmpAccess<strong>IP</strong> If present, this column overrides the <strong>IP</strong> address used for SNMP access to devices using<br />

the Helper Server.<br />

m_HaveAccess A flag indicating whether SNMP access to the device is available:<br />

The DiscoAgentSupportedDevices( ); section accepts full OQL comparison tests using<br />

comparison operators such as like, < , > , = , and , as demonstrated by the examples in the following<br />

section. Detailed information about comparison tests in OQL can be found in Appendix B: The Object<br />

Query Language on page 479.<br />

As shown by the examples below, when using the like operator, backslashes must be used to escape the .<br />

character, which would otherwise be treated as a wildcard.<br />

Example Filters<br />

(1) Have Access<br />

(0) No Access<br />

The following example shows the DiscoAgentSupportedDevices(); section of the CDP.agnt<br />

agent definition file. Only network entities that match the specified Object IDs are processed by the CDP<br />

agent, that is, only devices that use the Cisco <strong>Discovery</strong> Protocol. The CDP agent does not process devices<br />

with the Object ID 1.<strong>3.6</strong>.1.4.1.9.1.226.<br />

DiscoAgentSupportedDevices<br />

(<br />

" (<br />

( m_ObjectId like '1\.3\.6\.1\.4\.1\.9\..*' )<br />

AND<br />

( m_ObjectId '1.<strong>3.6</strong>.1.4.1.9.1.226' )<br />

) "<br />

);<br />

The following example shows a configuration for the CoreBuilder3ComSwitch.agnt definition<br />

file. This agent only accepts devices with the Object ID 1.<strong>3.6</strong>.1.4.1.2272.2.<br />

DiscoAgentSupportedDevices<br />

(<br />

" ( m_ObjectId = '1.<strong>3.6</strong>.1.4.1.43.1.9.13.3.1' ) "<br />

);<br />

The following example shows the use of wild cards in the <strong>IP</strong> address column. The agent only accepts devices<br />

with an <strong>IP</strong> address beginning 10.10.2.<br />

DiscoAgentSupportedDevices<br />

(<br />

273


Chapter 9: <strong>Discovery</strong> Agents<br />

274<br />

);<br />

" ( m_UniqueAddress like '10\.10\.2\..*' ) "<br />

The following example shows the combination of multiple filter conditions. The agent only accepts devices:<br />

With the Object ID 1.<strong>3.6</strong>.1.4.1.9.5.7.<br />

With an <strong>IP</strong> Address beginning 10.10.<br />

That do not have the name clandestine.<br />

DiscoAgentSupportedDevices<br />

(<br />

"(<br />

( m_ObjectId = '1.<strong>3.6</strong>.1.4.1.9.5.7' )<br />

AND<br />

( m_UniqueAddress like '^10\.10\..*' )<br />

AND<br />

( m_Name not like '.*[cC]landestin[eE].*' )<br />

)"<br />

);<br />

Tip: Altering agent definition files can introduce parse errors.To check your agent for parse errors, you can<br />

run the agent in debug mode and examine the debug output. The following example shows one way to do<br />

this.<br />

Example: Running a discovery agent in debug mode<br />

If you have defined a poll using your stitcher with the key MYSTITCHER, you can use the following<br />

command to run ncp_timedstitcher in full debug mode and pipe the output to a file named<br />

mydebug.out:<br />

ncp_m_timedtstitcher -domain TEST -latency 100000 -service Monitor2ObjServ -debug 4<br />

-key MYSTITCHER >&mydebug.out&<br />

Note: This command uses csh under UNIX. You should use the appropriate equivalent for your system.<br />

Internal Filtering<br />

In addition to the supported devices filter, most agents perform additional internal filtering to ensure they<br />

can operate appropriately on the devices passed to them. The default supported devices filters of most agents<br />

are inclusive, sending all devices from potentially supported vendors to the agent. The agents check for the<br />

required MIB variables and do not process the device if the required information is not available.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Filtering Devices Sent to the Agents<br />

Tip: Keeping your supported devices filter reasonably inclusive helps to ensure that a particular agent can<br />

handle new devices that are not radically different but that have different OIDs with no additional<br />

configuration.<br />

275


Chapter 9: <strong>Discovery</strong> Agents<br />

9.7 Partial Matching<br />

Examples<br />

276<br />

By default, the discovery process uses partial matching, which means that the discovery agents do not need<br />

to download the full routing tables during discovery. You do not need to make any modifications to the<br />

discovery agent definition files in order to use partial matching. However, it is possible to prevent the<br />

IpForwardingTable and IpRoutingTable discovery agents from using partial matching in certain cases if you<br />

have devices on your network that do not support partial matching.<br />

In order to prevent partial matching on certain devices, you must specify the devices that do not support<br />

partial matching in the DiscoRouterPartialMatchRestrictions(); section of the<br />

IpForwardingTable.agnt definition file (for modern devices that use RFC2096) or the<br />

IpRoutingTable.agnt definition file (for older devices that use RFC1213). If a discovered device<br />

matches the filter specified in the DiscoRouterPartialMatchRestrictions(); section,<br />

partial matching is not attempted on that device.<br />

The following example could be appended to the IpForwardingTable.agnt definition file to disable<br />

partial matching on discovered devices for which m_ObjectId='1.<strong>3.6</strong>.1.4.1.9.1.209' (that is,<br />

Cisco 2600 routers).<br />

DiscoRouterPartialMatchRestrictions<br />

(<br />

"(m_ObjectId='1.<strong>3.6</strong>.1.4.1.9.1.209')"<br />

);<br />

Specifying the IOS Revision in Which Partial Matching Is Supported<br />

If necessary, you can also specify the IOS (Internetwork Operating System) revision in which partial<br />

matching is supported for a given type of router. The following example ensures that if a router with<br />

m_ObjectId='1.<strong>3.6</strong>.1.4.1.9.1.48' is discovered (that is, a Cisco 7505 router), partial<br />

matching is only attempted if the router is running IOS version 12.2 or higher. The value assigned to<br />

m_MibVar indicates the MIB variable from which the IOS revision can be determined, that is, in this case<br />

the IOS revision can be determined by retrieving the sysDescr variable from the device.<br />

DiscoRouterPartialMatchRestrictions<br />

(<br />

"(m_ObjectId='1.<strong>3.6</strong>.1.4.1.9.1.48', m_OSVersion>='12.2',<br />

m_MibVar='sysDescr')"<br />

);<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Wildcards<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Partial Matching<br />

You can use wildcards in conjunction with the like operator as shown by the following example. The<br />

following example ensures that partial matching is not used by any device for which the Object ID begins<br />

with 1.<strong>3.6</strong>.1.4.1.2773, that is, Redstone devices. When using the like operator, backslashes must<br />

be used to escape the . character.<br />

DiscoRouterPartialMatchRestrictions<br />

(<br />

"(m_ObjectId like '1\.3\.6\.1\.4\.1\.2773\..*')"<br />

);<br />

Combining Partial Match Restrictions<br />

You can combine as many partial match restrictions as necessary, separating the restrictions using commas.<br />

The following example ensures that partial matching is not used on Cisco 2600 routers, Cisco 7505 routers<br />

running an IOS revision lower than 12.2 and Redstone routers.<br />

DiscoRouterPartialMatchRestrictions<br />

(<br />

"(m_ObjectId='1.<strong>3.6</strong>.1.4.1.9.1.209'),<br />

(m_ObjectId='1.<strong>3.6</strong>.1.4.1.9.1.48', m_OSVersion>='12.2',<br />

m_MibVar='sysDescr'),<br />

(m_ObjectId like '1\.3\.6\.1\.4\.1\.2773\..*')"<br />

);<br />

277


Chapter 9: <strong>Discovery</strong> Agents<br />

9.8 Retrieving Extra Information<br />

278<br />

It is possible to configure the discovery agents to retrieve extra information from devices and store this<br />

information in the ExtraInfo column of the topology database. In order to specify that extra information<br />

be retrieved by a given discovery agent, you must modify the definition file of the agent<br />

(NCHOME/precision/disco/agents/*.agnt). All discovery agents have a definition file in the<br />

agents directory, regardless of whether the agent is text-based or precompiled.<br />

The changes that must be made to the agent definition are described in the following sections.<br />

Changing the Agent Type<br />

The start of the discovery agent definition file identifies the type of agent. This can be one of the following:<br />

DiscoCompiledAgent{}, which indicates that this is a compiled discovery agent (with a<br />

corresponding shared library in the NCHOME/precision/lib directory).<br />

DiscoDefinedAgent{}, which indicates that this is a text-based discovery agent (with no<br />

corresponding shared library).<br />

DiscoCombinedAgent{}, which indicates that this discovery agent is a combination of<br />

text-based and precompiled, where extra processing (such as the retrieval of extra information from<br />

devices) is defined in the discovery agent definition file.<br />

In order to retrieve extra information from devices, the agent type must either be<br />

DiscoDefinedAgent{} or DiscoCombinedAgent{}. Therefore, if you are modifying an<br />

existing compiled agent to retrieve extra information, the first step is to change the type of agent from<br />

DiscoCompiledAgent{} to DiscoCombinedAgent{}.<br />

The Mediation and Processing Layers<br />

The process of retrieving extra information from devices and adding the information to the entity records is<br />

conducted in two layers: the mediation and processing layers. In the mediation layer the actual SNMP<br />

requests to retrieve the variables are carried out. In the processing layer the retrieved variables are added to<br />

the appropriate entity records. There is also an optional filter on the mediation layer.<br />

The following is an overview of the structure of the mediation and processing sections of the discovery agent<br />

definition file.<br />

DiscoAgentMediationFilter<br />

{<br />

// Optional section containing filters for the mediation layer.<br />

}<br />

DiscoAgentMediationLayer<br />

{<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

}<br />

Retrieving Extra Information<br />

// Contains the SNMP Get and GetNext requests to be performed.<br />

// In addition, an ICMP trace can be performed and SNMP access<br />

// parameters can be retrieved in the mediation layer.<br />

DiscoAgentProcessingLayer<br />

{<br />

// Adds the retrieved variables to the appropriate entity<br />

// record(s).<br />

}<br />

The Mediation Layer Filter<br />

The mediation layer filter is an optional filter that restricts the SNMP requests for extra information to<br />

specific devices. If you include a condition within the DiscoMediationSnmpGetFilter{} section<br />

within the DiscoAgentMediationFilter{}, then only devices passing the filter are processed by<br />

the agent. The following example ensures that only devices with an ipForwarding value of 1 are<br />

processed.<br />

DiscoAgentMediationFilter<br />

{<br />

DiscoMediationSnmpGetFilter<br />

{<br />

"ipForwarding" = 1 ;<br />

}<br />

}<br />

The Mediation Layer<br />

The structure of the mediation layer, where the actual SNMP and ICMP requests are performed, is shown<br />

below.<br />

DiscoAgentMediationLayer<br />

{<br />

DiscoSnmpRequests<br />

{<br />

DiscoSnmpGetResponse( ARGUMENT, VARIABLE );<br />

DiscoSnmpGetNextResponse( ARGUMENT, VARIABLE, );<br />

DiscoSnmpGetAccessParameters( VARIABLE );<br />

}<br />

DiscoICMPRequests<br />

{<br />

DiscoICMPGetTrace( VARIABLE );<br />

}<br />

}<br />

279


Chapter 9: <strong>Discovery</strong> Agents<br />

280<br />

The DiscoSnmpGetResponse(); rule performs an SNMP Get request, and the<br />

DiscoSnmpGetNextResponse(); rule performs an SNMP Get Next request. You can include as<br />

many of each type of request as necessary.<br />

If necessary, you can also include the DiscoSnmpGetAccessParameters(); rule, which retrieves<br />

the SNMP access details for the device, and the DiscoICMPGetTrace(); rule, which retrieves all the<br />

<strong>IP</strong> addresses in the path to the device.<br />

DiscoSnmpGetResponse();<br />

DiscoSnmpGetResponse(); performs an SNMP Get request. The simple form of this rule takes two<br />

arguments, separated by a comma. The first is the key to assign to the response. This key is used in the<br />

processing layer. The second argument is the OID (Object ID) to retrieve from the device. The following<br />

example retrieves sysUpTime, assigning the key m_SysUpTime to the value that is returned.<br />

DiscoSnmpGetResponse( "m_SysUpTime", sysUpTime );<br />

A more complex form of DiscoSnmpGetResponse(); takes a third argument, the OID index. The<br />

following example retrieves ifDescr, assigns the key m_IfDescr to the value returned and uses the<br />

OID index 1.<br />

DiscoSnmpGetResponse( "m_IfDescr", ifDescr, "1" );<br />

DiscoSnmpGetNextResponse();<br />

DiscoSnmpGetNextResponse(); performs an SNMP GetNext request. This rule takes the same<br />

arguments as DiscoSnmpGetResponse();. The following example retrieves ipRouteIfIndex<br />

and assigns the key m_IpRouteIfIndex to the value returned.<br />

DiscoSnmpGetNextResponse( "m_IpRouteIfIndex", ipRouteIfIndex );<br />

DiscoSnmpGetAccessParameters();<br />

DiscoSnmpGetAccessParameters(); retrieves the SNMP access parameters for the device, as<br />

shown by the following example.<br />

DiscoSnmpGetAccessParameters( "m_AccessParam" );<br />

If you configure the discovery agent to retrieve the access parameters in the mediation layer, you must also<br />

configure the agent to add the information to the database record in the processing layer.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


DiscoICMPGetTrace();<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Retrieving Extra Information<br />

DiscoICMPGetTrace(); retrieves the <strong>IP</strong> addresses in the path to the device, as shown by the following<br />

example.<br />

DiscoICMPGetTrace( "m_Trace" );<br />

If you configure the discovery agent to retrieve the path to the device in the mediation layer, you must also<br />

configure the agent to add the information to the database record in the processing layer.<br />

The Processing Layer<br />

The processing layer is where the retrieved information is added to the entity records. The structure of the<br />

processing layer is shown below. Both the DiscoAgentProcLayerAddTags{} and<br />

DiscoAgentProcLayerAddLocalTags{} sections are optional (although if both are omitted, no<br />

extra information is stored in the database records).<br />

DiscoAgentProcessingLayer<br />

{<br />

DiscoAgentProcLayerAddTags<br />

{<br />

DiscoAddTagSnmpGet( KEY );<br />

DiscoAddTagSnmpGetNext( KEY );<br />

DiscoAddTagSnmpGetAccessParameters(<br />

"m_AccessParam" );<br />

DiscoAddTagTrace( "m_Trace" );<br />

}<br />

DiscoAgentProcLayerAddLocalTags<br />

{<br />

DiscoAddTagSnmpGet(<br />

TAG FROM KEY WHERE CONDITION );<br />

DiscoAddTagSnmpGetNext(<br />

TAG FROM KEY WHERE CONDITION );<br />

}<br />

}<br />

281


Chapter 9: <strong>Discovery</strong> Agents<br />

282<br />

DiscoAgentProcLayerAddTags{}<br />

Within the DiscoAgentProcLayerAddTags{} section, you can include as many<br />

DiscoAddTagSnmpGet(); or DiscoAddTagSnmpGetNext(); rules as necessary. These rules<br />

add the retrieved variable to the database record for the discovered entity. Each rule takes a single argument,<br />

which is the key assigned to the retrieved variable in the mediation layer. The following example adds the<br />

value of m_SysUpTime, retrieved in the mediation layer, to the entity record.<br />

DiscoAddTagSnmpGet( "m_SysUpTime" );<br />

If you configured the discovery agent to retrieve either the SNMP access parameters or the path to the device<br />

during the mediation layer, you must include either the<br />

DiscoAddTagSnmpGetAccessParameters(); or the DiscoAddTagTrace(); rule in the<br />

DiscoAgentProcLayerAddTags{} section to ensure that the retrieved information is added to the<br />

MODEL database.<br />

DiscoAgentProcLayerAddLocalTags{}<br />

Within the DiscoAgentProcLayerAddLocalTags{} section, you can include as many<br />

DiscoAddTagSnmpGet(); or DiscoAddTagSnmpGetNext(); rules as necessary. These rules<br />

add the retrieved variable to the database record for a local neighbor. The structure of the rules is as follows.<br />

DiscoAddTagSnmpGet( TAG FROM KEY WHERE CONDITION );<br />

DiscoAddTagSnmpGetNext( TAG FROM KEY WHERE CONDITION );<br />

The arguments that determine the local neighbor to which the tag is added are as follows:<br />

TAG specifies the field name of the tag to be added.<br />

KEY indicates the key assigned to the value returned in the mediation layer.<br />

CONDITION indicates a condition that determines whether or not the tag is added.<br />

The following example adds a field called m_IfDescr to the local neighbor object (using the value<br />

returned in the mediation layer that was assigned the key m_IfDescr) where m_IfIndex=1.<br />

DiscoAddTagSnmpGet( "m_IfDescr" FROM "m_IfDescr"<br />

WHERE ( "m_IfIndex" = "1" )<br />

);<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Retrieving Extra Information<br />

The following example adds a field called m_IfType to the local neighbor object using the list of values<br />

returned by the GetNext request performed in the mediation layer and assigned the key m_IfType. The<br />

WHERE clause indicates the particular value required from the list of data. The value is retrieved by looking<br />

for the entry where the value of the m_IfIndex field in the local neighbor object is equal to<br />

SNMPINDEX(0), that is, the first value of the SNMP table entry.<br />

DiscoAddTagSnmpGetNext( "m_IfType" FROM "m_IfType"<br />

WHERE ( "m_IfIndex" = SNMPINDEX(0) )<br />

);<br />

Special Case: Adding Information to the master.entityByNeighbor Table<br />

If you configure a discovery agent to download any of the MIB variables listed in Table 55 and add those<br />

variables to the entity under the corresponding names, then they are used to populate the corresponding<br />

columns in the MODEL master.entityByNeighbor table. These columns can only be populated<br />

for entities that contain the RelatedTo field, that is, entities that are related to other entities.<br />

Table 55: Variables Used to Populate the master.entityByNeighbor Table<br />

MIB variable Name under which variable must be configured to be added to entity Column to be populated<br />

ifSpeed m_IfSpeed Speed<br />

ifRelType m_IfRelType RelType<br />

ifProtocol m_IfProtocol Protocol<br />

ifDuplex m_IfDuplex Duplex<br />

283


Chapter 9: <strong>Discovery</strong> Agents<br />

9.9 Discovering SPVCs<br />

284<br />

The spvc.pl script can be used to trace SPVCs on your network. To use this script you must also have<br />

the Perl API component ncp_perl installed.<br />

Once you have run a discovery, you can run the SPVC script using the following command, substituting<br />

your domain name where <strong>Precision</strong> is specified:<br />

ncp_perl NCHOME/precision/scripts/perl/scripts/spvc.pl -domain<br />

<strong>Precision</strong><br />

SPVC Script Process Flow<br />

Once started, the SPVC script runs through the following steps:<br />

1. The script begins by loading ATM-specific MIB information from the<br />

NCHOME/precision/mibs directory.<br />

2. When prompted, enter the name of a discovered ATM device from which you want to start tracing<br />

an SPVC. If you enter an invalid name, or the name of a device that has not been discovered, the<br />

script exits.<br />

3. The script retrieves and displays the interface details for the specified device. When prompted, enter<br />

the number of the interface that you are interested in.<br />

4. The script retrieves and displays details of the VPI (Virtual Path Identifier) and VCI (Virtual Channel<br />

Identifier) pairs for the specified interface.<br />

5. When prompted, enter the details of the pair of interest in the following format: VPI.VCI. For<br />

example, to trace the path of VPI 0 and VCI 37, enter 0.37.<br />

6. The script now traces the path of the SPVC. When the script has completed tracing the SPVC, the<br />

connections on the path in both directions are listed on the screen. The script also populates the Path<br />

Tool in ncp_desktop with the SPVC information. For information on using the <strong>Precision</strong><br />

Desktop to view SPVC paths, see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Desktop <strong>Guide</strong>.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


10. Helper_system.fm July 6, 2005<br />

Chapter 10: The <strong>Discovery</strong> Helper System<br />

This chapter introduces the Helper System, a subsystem of DISCO that is used to retrieve device<br />

information from the network.<br />

This chapter contains the following sections:<br />

Introduction to the Helper System on page 286<br />

Starting the Helper Server on page 288<br />

Configuring the Helpers on page 289<br />

SNMP and Telnet Device Access <strong>Configuration</strong> on page 298<br />

The Helper Databases on page 307<br />

Connecting to Helpers on Different Subnets on page 319<br />

Communication Between DISCO and the Helper Server on page 321<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 285


Chapter 10: The <strong>Discovery</strong> Helper System<br />

10.1 Introduction to the Helper System<br />

The Helpers<br />

286<br />

This chapter describes the Helper System and the configuration adjustments you might want to make to it.<br />

Configuring the Helper System can help to speed up network discovery, and is for advanced users only.<br />

Although the discovery agents are responsible for retrieving connectivity information they do not have any<br />

direct interaction with the network. Instead, they retrieve connectivity information through the Helper<br />

System, which consists of a Helper Server and various helpers.<br />

The helpers are specialized applications that retrieve information from the network on demand. They have<br />

no understanding of the retrieved information.<br />

The helpers retrieve information from devices and deposit the information in the Helper Server for retrieval<br />

by the agents. By default there are five helpers, which are described in Table 56.<br />

Table 56: Helpers Available with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

Helper Executable <strong>Configuration</strong> file Description<br />

ARP ncp_dh_arp NCHOME/etc/precision/<br />

DiscoARPHelperSchema.cfg<br />

DNS ncp_dh_dns NCHOME/etc/precision/<br />

DiscoDNSHelperSchema.cfg<br />

PING ncp_dh_ping NCHOME/etc/precision/<br />

DiscoPingHelperSchema.cfg<br />

SNMP ncp_dh_snmp NCHOME/etc/precision/<br />

DiscoSnmpHelperSchema.cfg<br />

NCHOME/etc/precision/<br />

SnmpStackSchema.cfg<br />

NCHOME/etc/precision/<br />

SnmpStackSecurityInfo.cfg<br />

TELNET ncp_dh_telnet NCHOME/etc/precision/<br />

DiscoTelnetHelperSchema.cfg<br />

NCHOME/etc/precision/<br />

TelnetStackPasswords.cfg<br />

NCHOME/etc/precision/<br />

TelnetStackSchema.cfg<br />

Performs <strong>IP</strong> address to MAC address<br />

resolution.<br />

Performs <strong>IP</strong> address to device name<br />

resolution.<br />

Either pings each device in a subnet, an<br />

individual <strong>IP</strong> address or a broadcast or<br />

multicast address. The result of the ping<br />

could be used to populate the MIB of the<br />

device.<br />

Returns results of an SNMP request such<br />

as Get, GetNext and GetBulk.<br />

Returns the results of a Telnet operation<br />

into a specified device.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Introduction to the Helper System<br />

Note: NCHOME is the environment variable that contains the path to the <strong>Netcool</strong> Suite home directory. For<br />

information on how this environment variable varies with platform, see Operating System Considerations on<br />

page 10.<br />

Helper System Operation<br />

At startup, the Helper Server loads up the Helper Server schema from the<br />

DiscoHelperServerSchema.cfg configuration file and creates the appropriate helper databases.<br />

The Helper Server also creates a Helper Manager for every helper database.<br />

The Helper Manager is responsible for managing the way in which the helper handles requests from the<br />

Helper Server to retrieve network device data. The Helper Manager specifies:<br />

The request timeout<br />

The time to live for the returned variables<br />

Whether multiple requests are to be processed in serial or parallel<br />

When the Helper Manager detects a request for network data from the Helper Server, it instructs the<br />

associated helper to retrieve the data from the network.<br />

Dynamic Timeouts<br />

The Helper System uses dynamic timeouts to handle network requests. For example, if the SNMP helper<br />

has been asked to perform a long list of SNMP Get requests, the helper might begin to slow down and<br />

therefore exceed the timeout. A static timeout would cause the retrieval of data to terminate (with data lost)<br />

despite the fact that the device is still responding with data. To prevent this situation, the helpers incorporate<br />

a dynamic timeout system in which they take note of long SNMP Get requests and recalculate and update<br />

the timeout as the SNMP daemons of the device begin to slow down.<br />

287


Chapter 10: The <strong>Discovery</strong> Helper System<br />

10.2 Starting the Helper Server<br />

288<br />

It is good practice to configure the Helper Server to be started automatically by CTRL at the appropriate<br />

time, by making the appropriate OQL insertion into the services.inTray table of CTRL.<br />

Alternatively, you can start the Helper Server manually using the following command line. Optional<br />

arguments are shown enclosed in square brackets:<br />

ncp_d_helpserv –domain DOMAIN_NAME [ -debug DEBUG ] [ -help ] [ -version ]<br />

Table 57: Explanation of Command Line Options<br />

Option Explanation<br />

-domain DOMAIN_NAME The name of the domain under which to run the Helper Server.<br />

-debug DEBUG The level of debugging output (1-4, where 4 represents the most detailed<br />

output).<br />

-help Displays the command line options. Does not start the component even if used<br />

in conjunction with other arguments.<br />

-version Displays the version number of the component. Does not start the component<br />

even if used in conjunction with other arguments.<br />

Starting the Helpers<br />

Provided that the Helper Server is launched by CTRL, the individual helpers are automatically started as<br />

and when they are required. For more information about CTRL, see Chapter 2: Process Control with CTRL<br />

on page 47.<br />

The only situation in which you might need to configure an insert for an individual helper into the<br />

disco.managedProcesses table would be if you wanted to start that helper on a remote machine<br />

(that is, a machine other than the one that is running the Helper Server). In this situation you would<br />

explicitly insert the required helper into the disco.managedProcesses table, specifying the<br />

appropriate remote host in the m_Host field.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


10.3 Configuring the Helpers<br />

The default configuration is sufficient for most networks. However, you may decide to alter the<br />

configuration for the following reasons:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the Helpers<br />

In order to speed up the discovery process, you could reduce the helper timeouts and number of<br />

retries.<br />

If you have a very reliable network in which devices respond quickly, you can specify a small default<br />

timeout.<br />

You may want to change the default timeouts for the SNMP and Telnet helpers if you have many<br />

devices that either do not respond to SNMP and Telnet or that are set up not to respond to Telnet or<br />

SNMP access. A large default timeout would therefore mean that the helpers wait for a long time for<br />

responses they never receive.<br />

In order to reduce the amount of network traffic caused by a discovery, you could increase the<br />

timeout and disable broadcast and multicast pinging.<br />

Configuring the ARP Helper<br />

You can configure the ARP helper by appending OQL inserts to the DiscoARPHelperSchema.cfg<br />

configuration file. The ARPHelper database consists of the configuration table, described in<br />

Table 58.<br />

Table 58: ARPHelper.configuration Database Table Schema<br />

Column Name Constraints Data type Description<br />

m_NumThreads None Integer The number of threads to be used by the helper.<br />

Example <strong>Configuration</strong> of the ARP Helper<br />

The following example insert configures the ARP helper to use one thread.<br />

insert into ARPHelper.configuration<br />

(<br />

m_NumThreads<br />

)<br />

values<br />

(<br />

1<br />

);<br />

289


Chapter 10: The <strong>Discovery</strong> Helper System<br />

Configuring the DNS Helper<br />

290<br />

You can configure the DNS helper by appending OQL inserts to the DiscoDNSHelperSchema.cfg<br />

configuration file. The DNSHelper database consists of the configuration table, described in<br />

Table 59, which must only contain one record, and the methods table, described in Table 60.<br />

Table 59: DNSHelper.configuration Database Table Schema<br />

Column name Constraints Data type Description<br />

m_NumThreads Integer The number of threads to be used by the helper.<br />

m_MethodList List of text An ordered list of the methods for name retrieval.<br />

m_TimeOut Integer The maximum time to wait for a response from a device<br />

(seconds).<br />

Table 60: DNShelper.methods Database Table Schema<br />

Column name Constraints Data type Description<br />

m_MethodName PRIMARY KEY<br />

NOT NULL<br />

UNIQUE<br />

Example <strong>Configuration</strong> of the DNS Helper<br />

The following example inserts configure the DNS helper using the tables described above.<br />

insert into DNSHelper.configuration<br />

(<br />

Text The name of the method.<br />

m_MethodType Integer The type of the method:<br />

(0) System<br />

(1) DNS<br />

(2) File<br />

m_NameServerAddr Text The <strong>IP</strong> address of the DNS server (specified as a text string).<br />

If no value is specified, /etc/resolv.conf is read.<br />

m_NameDomain Text Domain name; for example, micromuse.com.<br />

m_FileName Text The filename, if appropriate.<br />

m_FileOrder Integer The order of the files:<br />

(0) Name first, then <strong>IP</strong> address<br />

(1) <strong>IP</strong> address, then name<br />

m_TimeOut Integer Time out for the request in seconds.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


m_NumThreads, m_MethodList, m_TimeOut<br />

)<br />

values<br />

(<br />

1, ['HostsFile'] , 5<br />

);<br />

insert into DNSHelper.methods<br />

(<br />

m_MethodName, m_MethodType, m_FileName, m_FileOrder<br />

)<br />

values<br />

(<br />

'HostsFile', 2, 'etc/hosts', 1<br />

);<br />

Configuring the PING Helper<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the Helpers<br />

You can configure the PING helper by appending OQL inserts to the<br />

DiscoPingHelperSchema.cfg configuration file. The pingHelper database consists of the<br />

configuration table, described in Table 61, which must only contain one record.<br />

Table 61: pingHelper.configuration Database Table Schema<br />

Column name Constraints Data type Description<br />

m_NumThreads Integer The number of threads to be used by the helper.<br />

m_TimeOut Integer The maximum time to wait for a reply from a<br />

pinged address, in milliseconds. If you are<br />

running the TraceRoute agent you may need to<br />

increase this value, depending on network<br />

conditions.<br />

m_NumRetries Integer The number of times a device is to be re-pinged.<br />

m_InterPingTime Integer The time interval in milliseconds between<br />

successive ping attempts of subnet addresses.<br />

m_Broadcast Integer Flag used to enable or disable broadcast address<br />

pinging:<br />

(1) Enable<br />

(0) Disable<br />

m_Multicast Integer Flag used to enable or disable multicast address<br />

pinging:<br />

(1) Enable<br />

(0) Disable<br />

291


Chapter 10: The <strong>Discovery</strong> Helper System<br />

292<br />

Although pinging broadcast and multicast addresses allows devices to be discovered quicker than other<br />

detection methods, it is sometimes less desirable to do so under certain network conditions; for instance,<br />

when the network is heavily congested.<br />

Example <strong>Configuration</strong> of the Ping Helper<br />

The following insert configures the Ping helper to:<br />

Use 20 threads of process execution.<br />

Wait a maximum of 250 ms for a reply from a device.<br />

Retry unresponsive devices a maximum of five times.<br />

Wait 50 ms between pinging devices in a subnet.<br />

Not use broadcast or multicast pinging.<br />

insert into pingHelper.configuration<br />

(<br />

m_NumThreads,<br />

m_TimeOut,<br />

m_NumRetries,<br />

m_InterPingTime,<br />

m_Broadcast,<br />

m_Multicast<br />

)<br />

values<br />

(<br />

20, 250, 5, 50, 0, 0<br />

);<br />

Configuring the SNMP Helper<br />

You can configure the SNMP helper by appending OQL inserts to the<br />

DiscoSnmpHelperSchema.cfg configuration file. The snmpHelper database specifies the general<br />

rules of SNMP information retrieval. It consists of the configuration table, described in Table 62,<br />

which must only contain one record.<br />

Table 62: snmpHelper.configuration Database Table Schema<br />

Column name Constraints Data type Description<br />

m_NumThreads Integer The number of threads to be used by the helper.<br />

m_TimeOut Integer The maximum time to wait for a reply from a device,<br />

in milliseconds.<br />

m_NumRetries Integer The number of attempts to retrieve SNMP variable(s)<br />

from a device.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Example <strong>Configuration</strong> of the SNMP Helper<br />

The following example configuration causes the SNMP helper to behave as follows:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the Helpers<br />

120 threads of program execution are started to process incoming requests for SNMP data from the<br />

Helper Server. The SNMP helper processes a maximum of 120 such requests simultaneously.<br />

A three second timeout period is allowed for a device to respond to an SNMP query issued by the<br />

SNMP helper. If the device has not responded after this time, the helper issues the request again, up<br />

to a maximum of one (m_NumRetries) times.<br />

insert into snmpHelper.configuration<br />

(<br />

m_NumThreads,<br />

m_TimeOut,<br />

m_NumRetries,<br />

)<br />

values<br />

(<br />

1 20, 3000, 1<br />

);<br />

Configuring the Telnet Helper<br />

You can configure the Telnet helper using OQL inserts to the DiscoTelnetHelperSchema.cfg<br />

configuration file. The telnetHelper database consists of two tables: the configuration table,<br />

described in Table 63, and the deviceConfig table, described in Table 64.<br />

You can configure the Telnet helper to use the Secure Shell (SSH) program. SSH enables authentication and<br />

provides more secure communications over the network. For more information, see Configuring Telnet<br />

Device Access on page 303.<br />

The configuration table specifies the general rules of receiving information from remote devices.<br />

Table 63: telnetHelper.configuration Database Table Schema<br />

Column name Constraints Data type Description<br />

m_NumThreads Integer The number of threads to be used by the helper. If you<br />

change this value, be sure that your system is<br />

configured to allow at least this number of concurrent<br />

Telnet sessions.<br />

m_TimeOut Integer The maximum time to wait for access to a device<br />

(milliseconds).<br />

m_Retries Integer The number of times to retry the device.<br />

293


Chapter 10: The <strong>Discovery</strong> Helper System<br />

294<br />

The deviceConfig table sets device-specific configuration options.<br />

Table 64: telnetHelper.deviceConfig Database Table Schema<br />

Column name Constraints Data type Description<br />

m_SysObjectId<br />

optional<br />

Text The sysObjectID MIB variable to match for this<br />

configuration entry. The entry with the longest OID match will<br />

be the entry used. For example, if you specify a value of<br />

1.<strong>3.6</strong>.1.4.1.9.1 then all devices with OIDs of the form<br />

1.<strong>3.6</strong>.1.4.1.9.1.* will be matched. Cisco IOS devices<br />

have OIDs of the form 1.<strong>3.6</strong>.1.4.1.9.1.*.<br />

This field is ignored if m_IpOrSubNet is specified.<br />

m_IpOrSubNet Text The <strong>IP</strong> or fully qualified subnet address of the device<br />

corresponding to a particular configuration. If this is not<br />

specified, the configuration is used as the default subnet<br />

address.<br />

m_NetMaskBits Integer The number of most significant bits in the netmask. This<br />

number must be specified if m_IpOrSubNet is specified.<br />

m_PageLengthCmd Text The command to issue in order to set the output page length.<br />

m_PageLength Integer The output page length size. This is set to 0 by default; that is,<br />

no paging.<br />

If you set a page length size, you must also insert a value into<br />

the m_PageLengthCmd column in order to set a page length<br />

command.<br />

m_ContinueMsg Text The expected prompt from the remote device between paged<br />

output; for example, "Do you want to continue".<br />

Regular expressions are valid entries.<br />

m_ContinueCmd Text The response to send to the remote device in order for it to<br />

continue the paged output. This is usually set to "y".<br />

You must take care setting this value, as some devices require<br />

a carriage return after the command and some do not. For<br />

maximum flexibility, a return is not added by default. It must<br />

be specified explicitly using a trailing Ctrl-M in the string.<br />

m_TransmissionDelay Integer This option allows you to customise the delay used by<br />

ncp_dh_telnet when transmitting data to a device. This<br />

may be useful if data loss or device issues occur when using<br />

the default transmission delay setting.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Configuring the Telnet Helper<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the Helpers<br />

The following insert can be appended to the DiscoTelnetHelperSchema.cfg configuration file to<br />

configure the operation of the Telnet helper.<br />

insert into telnetHelper.configuration<br />

(<br />

m_NumThreads,<br />

m_TimeOut,<br />

m_Retries<br />

)<br />

values<br />

(<br />

20,<br />

5000,<br />

3<br />

);<br />

The above insert configures the Telnet helper to:<br />

Use 20 threads of process execution.<br />

Wait a maximum of 5000 ms for a reply from a device.<br />

Retry the request up to 3 times.<br />

Configuring Device Specific Settings<br />

The Telnet helper also accepts multiple inserts into the telnetHelper.deviceConfig table within<br />

the DiscoTelnetHelperSchema.cfg configuration file that define the interaction of the Telnet<br />

operation.<br />

This section provides examples of how to configure Telnet device specific settings. You can configure device<br />

settings based on the sysObjectID MIB variable or based on <strong>IP</strong> or subnet. The most effective way to set<br />

these options is based on the sysObjectID MIB variable. This variable identifies the device vendor.<br />

Device-specific configuration options usually vary with the device vendor. Therefore by setting these options<br />

based on the sysObjectID MIB variable and hence based on the vendor, you are able to configure values,<br />

for all Cisco devices, for example, regardless of where these devices are in the network.<br />

Example Configuring Settings for Devices from a Specific Vendor<br />

The following is a typical example configuration and shows how to configure settings for all devices from a<br />

specific vendor:<br />

insert into telnetHelper.deviceConfig<br />

(<br />

m_SysObjectId,<br />

m_PageLengthCmd,<br />

295


Chapter 10: The <strong>Discovery</strong> Helper System<br />

296<br />

)<br />

values<br />

(<br />

);<br />

m_PageLength,<br />

m_ContinueMsg,<br />

m_ContinueCmd<br />

"1.<strong>3.6</strong>.1.4.1.9.1.", "terminal length", 0, ".*[Mm]ore.*", " "<br />

The above insert configures:<br />

1.<strong>3.6</strong>.1.4.1.9.1. as the the sysObjectID MIB variable to match for this configuration<br />

entry. All devices with OIDs of the form 1.<strong>3.6</strong>.1.4.1.9.1.* will be matched. In general, these<br />

are Cisco IOS devices, although there are exceptions.<br />

‘terminal length’ is the command that sets the output page length for Cisco devices.<br />

Note: This command varies with devices of different vendor types.<br />

No paging.<br />

Prompt from remote device.<br />

The response to send to the remote device for it to continue paged output.<br />

The DiscoTelnetHelperSchema.cfg configuration file contains inserts with default<br />

device-specific configuration settings for the following vendor types<br />

Cisco IOS devices<br />

Cisco Cat OS devices<br />

Juniper JUNOS devices<br />

Juniper ERX devices<br />

Huawei devices<br />

Dasan devices<br />

The following example configures device settings based on an <strong>IP</strong> address:<br />

Example Configuring Device Settings Based on an <strong>IP</strong> Address<br />

insert into telnetHelper.deviceConfig<br />

(<br />

m_IpOrSubNet,<br />

m_NetMaskBits,<br />

m_PageLengthCmd,<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


)<br />

values<br />

(<br />

);<br />

m_PageLength,<br />

m_ContinueMsg,<br />

m_ContinueCmd<br />

192.168.112.0, 24, "set length", 0, ".*wish to continue.*", "y"<br />

The above insert configures:<br />

192.168.112.0 as the <strong>IP</strong> address.<br />

‘set length’ (default value) sets the output page length.<br />

No paging.<br />

Prompt from remote device.<br />

The response to send to the remote device for it to continue paged output.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring the Helpers<br />

297


Chapter 10: The <strong>Discovery</strong> Helper System<br />

10.4 SNMP and Telnet Device Access <strong>Configuration</strong><br />

298<br />

The SNMP helper, the Telnet helper, and other components such as MONITOR require SNMP or Telnet<br />

access to devices in order to perform their function. This section describes how to configure inserts into the<br />

device access databases. Any <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> components that require SNMP or Telnet access use the<br />

settings from these databases. In this section, the SNMP helper and the Telnet helper are used as<br />

representative examples of these processes.<br />

Configuring SNMP Device Access<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> components such as the SNMP helper that require SNMP access use two SNMP<br />

device access and password configuration files to gain access to devices on the network:<br />

SnmpStackSchema.cfg defines the snmpStack database. You should not need to alter this<br />

file.<br />

SnmpStackSecurityInfo.cfg contains any necessary inserts into the snmpStack<br />

database. All the inserts given in this section must be contained within this file.<br />

Community strings can be configured on a per-device or per-subnet basis, to allow the SNMP helper to<br />

retrieve MIB variables from devices.<br />

The database that contains the security configuration is called the snmpStack database. It contains the<br />

following tables:<br />

configuration<br />

verSecurityCache<br />

verSecurityTable<br />

accessParameters<br />

These tables are described in the following sections.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

SNMP and Telnet Device Access <strong>Configuration</strong><br />

The configuration table, described in Table 65, controls the general operation of the SNMP helper.<br />

Table 65: snmpStack.configuration Database Table Schema<br />

Column name Constraints Data type Description<br />

m_AutoVersion Externally defined<br />

Boolean data type<br />

m_AllowOQL Externally defined<br />

Boolean data type<br />

The SNMP helper caches the community strings used to access the devices during a discovery in the<br />

snmpStack.verSecurityCache table. This allows subsequent discoveries to proceed faster as the<br />

SNMP access parameters are already known. It also reduces the number of authentication traps that can be<br />

generated when searching for the correct access parameters.<br />

The access parameters are cached in the following location:<br />

SnmpStack.Cache.snmpStack.verSecurityCache.DOMAIN<br />

Boolean Integer Flag controlling automatic SNMP versioning:<br />

(1) Use automatic SNMP versioning. The SNMP<br />

helper initially attempts to use SNMP V3 for device<br />

access; if unsuccessful, it uses SNMP V2, then SNMP<br />

V1.<br />

(0) Do not use automatic versioning. The SNMP<br />

helper ignores the entries in the versions table.<br />

Boolean Integer Flag controlling OQL access to the SnmpHelper<br />

database:<br />

(1) Allowed OQL access to the cached community<br />

strings for the devices discovered.<br />

(2) Do not allow OQL access.<br />

m_ExpireAfter Long The time, in seconds, after which to expire the<br />

cached community string for device if it has not<br />

been used. The default value of zero does not<br />

expire cache community strings.<br />

By default the snmpStack.verSecurityCache table can be accessed by ncp_oql on the<br />

SnmpHelper service. However if there are security concerns, access to this table can be disabled by<br />

changing the value of m_AllowOQL in the snmpStack.configuration database table (see<br />

Table 65). The snmpStack.verSecurityCache table is described in Table 66.<br />

Table 66: snmpStack.verSecurityCache Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_HostName Not NULL<br />

PRIMARY KEY<br />

Text The hostname to which the cached SNMP access<br />

parameters correspond.<br />

m_SNMPVersion Integer The version of SNMP used to access this device.<br />

m_Password Text The community string used to access this device.<br />

299


Chapter 10: The <strong>Discovery</strong> Helper System<br />

300<br />

Table 66: snmpStack.verSecurityCache Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

m_SNMPVer3Level Integer Specifies level of SNMPv3 security used.<br />

m_SecurityName Text If using SNMPv3 then this contains the security<br />

name.<br />

m_AuthPswd Text If using SNMPv3 then this contains the auth<br />

password.<br />

m_PrivPswd Text If using SNMPv3 then this contains the priv<br />

password.<br />

m_TimeLastUsed Long The timestamp of the last time the device was<br />

accessed.<br />

m_SnmpPort Integer The SNMP port on the target device.<br />

The verSecurityTable, described in Table 67, allows you to map an <strong>IP</strong> or subnet address with an<br />

SNMP version (1, 2, or 3). The security parameters must be configured, as specified by the SNMP version,<br />

in order to gain SNMP access to the network device(s). An example of this is the use of community strings<br />

for SNMP versions 1 and 2, as well as the specification of the different security levels offered by SNMP V3.<br />

Table 67: snmpStack.verSecurityTable Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_IpOrSubNetVer Text The <strong>IP</strong> or subnet address to which the device access<br />

configuration specified by this record is applicable.<br />

The interpretation of this field as an <strong>IP</strong> or a subnet<br />

address is dependent on the value specified in the<br />

m_NetMaskBitsVer field.<br />

m_NetMaskBitsVer Integer The subnet mask for the address specified by the<br />

m_IpOrSubNetVer field. If this field is set to 32 then<br />

m_IpOrSubNetVer is taken as a single <strong>IP</strong> address.<br />

m_SNMPVersion Integer The SNMP version that this configuration applies to.<br />

(0) SNMP V1<br />

(1) SNMP V2<br />

(2) SNMP V3<br />

m_Password Text The password to try for this <strong>IP</strong> or subnet address; for<br />

example, community string.<br />

m_Type Integer An integer classification of the password type; for<br />

example:<br />

(2) SNMP Get password.<br />

m_SNMPVer3Level Integer Integer representation of the SNMP V3 security level.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 67: snmpStack.verSecurityTable Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

m_SNMPVer3Details Object of type<br />

V3SecInfo<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

SNMP and Telnet Device Access <strong>Configuration</strong><br />

An object representation of the authpassword and/or<br />

privpassword details for SNMP V3.<br />

m_SecurityName Text The SNMP V3 security password.<br />

m_SnmpPort Integer The SNMP port on the target device, or target devices<br />

if the device access configuration specified by this<br />

record is applicable to a subnet.<br />

If no value is specified for m_SnmpPort, then the<br />

value defaults to the standard SNMP 161 port.<br />

The accessParameters table allows you to change the way in which the SNMP helper handles the<br />

retrieval of large non-scalar variables for particular devices or subnets. Any values inserted into this table<br />

override the values for m_GetNextBoundary and m_GetNextSlowDown that have been specified in<br />

the snmpHelper.configuration table.<br />

Table 68: snmpStack.accessParameters Database Table Schema<br />

Column name Constraints Data type Description<br />

m_NetAddress NOT NULL Text The <strong>IP</strong> address on which to override the boundary and<br />

slowdown values.<br />

m_NetMask Text The netmask. If no netmask is specified,<br />

m_NetAddress is taken to be a single <strong>IP</strong> address. If a<br />

netmask is specified, m_NetAddress is taken to be a<br />

subnet address.<br />

m_GetNextSlowDown NOT NULL Integer The delay (in milliseconds) to introduce between each<br />

SNMP GetNext request when the number of separate<br />

GetNext requests issued while retrieving a particular<br />

non-scalar SNMP variable exceeds<br />

m_GetNextBoundary.<br />

m_GetNextBoundary NOT NULL Integer When retrieving a particular non-scalar SNMP variable<br />

from a device, this is the minimum number of GetNext<br />

requests to be issued before the delay specified by<br />

m_GetNextSlowDown is introduced.<br />

m_GeneralSlowDown NOT NULL Integer The general amount by which to delay a request (in<br />

milliseconds). A general slow down must only be used<br />

where absolutely necessary as it can significantly<br />

increase the overall discovery time.<br />

301


Chapter 10: The <strong>Discovery</strong> Helper System<br />

302<br />

Example SNMP Versioning <strong>Configuration</strong><br />

The following example turns auto-versioning off, enables OQL access, and instructs the SNMP helper not<br />

to expire cached community strings.<br />

insert into snmpStack.configuration<br />

(<br />

m_AutoVersion, m_AllowOQL, m_ExpireAfter<br />

)<br />

values<br />

(<br />

0, 1, 0<br />

);<br />

Example <strong>Configuration</strong> of the SNMP verSecurityTable<br />

Provided that auto-versioning is turned on, the following configuration adjustment specifies that a<br />

community string of ‘public’ is used for devices that support SNMP version 1, and specific configuration<br />

is used for devices that support SNMP version 3. Since no value has been specified for m_SnmpPort, this<br />

value defaults to the standard SNMP 161 port.<br />

insert into snmpStack.verSecurityTable<br />

(<br />

m_SNMPVersion,<br />

m_Password,<br />

m_SNMPVer3Level,<br />

m_SNMPVer3Details,<br />

m_SecurityName,<br />

)<br />

values<br />

(<br />

0,<br />

'public',<br />

2,<br />

{<br />

m_AuthPswd="authpassword",<br />

m_PrivPswd="privpassword"<br />

},<br />

'authPriv'<br />

);<br />

Example <strong>Configuration</strong> of the SNMP verSecurityTable With a Non-Standard SNMP Port<br />

This examples configures the same SNMP settings as in the previous example on all devices within the<br />

subnet 192.168.64.0 and specifies the SNMP port as 6161 on all devices within this subnet.<br />

insert into snmpStack.verSecurityTable<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


(<br />

)<br />

values<br />

(<br />

);<br />

m_IpOrSubNetVer,<br />

m_NetMaskBitsVer,<br />

m_SNMPVersion,<br />

m_Password,<br />

m_SNMPVer3Level,<br />

m_SNMPVer3Details,<br />

m_SecurityName,<br />

m_SnmpPort,<br />

192.168.64.0,<br />

24,<br />

0,<br />

'public',<br />

2,<br />

{<br />

m_AuthPswd="authpassword",<br />

m_PrivPswd="privpassword"<br />

},<br />

'authPriv'<br />

6161<br />

Configuring Telnet Device Access<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

SNMP and Telnet Device Access <strong>Configuration</strong><br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> components such as the Telnet helper that require Telnet access use two Telnet device<br />

access and password configuration files to gain access to devices on the network:<br />

TelnetStackSchema.cfg defines the telnetStack database. You should not need to alter<br />

this file.<br />

TelnetStackPasswords.cfg contains any necessary inserts into the telnetStack<br />

database. All the inserts given in this section should be contained within this file.<br />

You must configure the access parameters for every <strong>IP</strong> or subnet address by appending OQL inserts to the<br />

TelnetPasswordSchema.cfg configuration file.<br />

You can specify a Secure Shell (SSH) connection when configuring Telnet device access. SSH enables<br />

password encryption when performing Telnet access. SSH versions 1 and 2 are supported.<br />

Note: SSH within <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> currently supports password-based authentication or no<br />

authentication. It does not support RSA signature authentication.<br />

303


Chapter 10: The <strong>Discovery</strong> Helper System<br />

304<br />

Example Telnet Device Access <strong>Configuration</strong> For a Subnet<br />

The following example insert configures the Telnet access parameters for a subnet.<br />

insert into telnetStack.passwords<br />

(<br />

m_IpOrSubNet,<br />

m_NetMaskBits,<br />

m_Password,<br />

m_Username,<br />

m_PwdPrompt,<br />

m_LogPrompt,<br />

m_ConPrompt,<br />

m_SSHSupport<br />

)<br />

values<br />

(<br />

'192.168.200.0',<br />

25,<br />

'3v3rt0n',<br />

'user',<br />

'.*assword:.*',<br />

'.*ogin.*',<br />

'.*onsole>.*',<br />

1<br />

);<br />

The above insert specifies:<br />

A subnet address of 192.168.200.0 with a netmask of 25.<br />

The password and username to use to access the device.<br />

The password, login and console prompts to expect from the device.<br />

The devices on this subnet support SSH.<br />

Example Telnet Device Access <strong>Configuration</strong> For a Single <strong>IP</strong> Address<br />

The following example insert shows how you can configure the access parameters for a single <strong>IP</strong> address.<br />

insert into telnetStack.passwords<br />

(<br />

m_IpOrSubNet,<br />

m_NetMaskBits,<br />

m_Password,<br />

m_Username,<br />

m_PwdPrompt,<br />

m_LogPrompt,<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


)<br />

values<br />

(<br />

);<br />

m_ConPrompt,<br />

m_SSHSupport<br />

'172.16.1.21',<br />

32,<br />

'',<br />

'',<br />

'.*assword.*',<br />

'.*sername.*',<br />

'.*Morr.*',<br />

0<br />

The above insert specifies:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

SNMP and Telnet Device Access <strong>Configuration</strong><br />

A single <strong>IP</strong> address of 172.16.1.21. The address is identified as a single address by the fact that<br />

m_NetMaskBits=32.<br />

The password and username to use to access the device.<br />

The password, login and console prompts to expect from the device.<br />

This device does not support SSH.<br />

Telnet Helper Password <strong>Configuration</strong><br />

You must configure the access parameters in order to enable the Telnet helper to gain access to devices on<br />

your network. This is done by configuring the access and password configuration file,<br />

TelnetStackPasswords.cfg.<br />

Note: No Telnet passwords are set up in the out-of-the-box configuration, as these prompts and passwords<br />

are totally user-dependent.<br />

The access configuration database (the telnetStack database), consists of one table—the passwords<br />

table.<br />

Table 69: telnetStack.passwords Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_IpOrSubNet Text <strong>IP</strong> or subnet address depending on value of<br />

m_NetMaskBits.<br />

m_NetMaskBits Integer The subnet mask. If set to 32, m_IpOrSubNet is taken<br />

to be a single <strong>IP</strong> address.<br />

305


Chapter 10: The <strong>Discovery</strong> Helper System<br />

306<br />

Table 69: telnetStack.passwords Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

m_Password NOT NULL Text The password to try for this subnet or <strong>IP</strong> address.<br />

Default = "\n" (carriage return).<br />

m_Username Text The username to try for this subnet or <strong>IP</strong> address.<br />

Default = "".<br />

m_PwdPrompt Text Password prompt to expect from remote device.<br />

Default = ".*assword:.*".<br />

m_LogPrompt Text Login prompt to expect from remote device.<br />

Default = ".*ogin:.*".<br />

m_ConPrompt Text Console prompt to expect from remote device. Default<br />

= "^.*[a-zA-Z0-9].*[$%>#]$".<br />

m_SSHSupport Boolean Integer Flag to indicate whether or not to use SSH support for<br />

this device:<br />

(1) Use SSH support for this device.<br />

(0) Do not use SSH support for this device.<br />

If no value is specified for m_SSHSupport, then the<br />

value defaults to 0, that is, no SSH support.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


10.5 The Helper Databases<br />

When the Helper Server starts, it creates a database for each helper that is to be run.<br />

The following sections describe the helper databases.<br />

The ARP Helper database<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

The Helper Databases<br />

The ARPHelper database stores information about the requests the ARP helper makes from the network.<br />

The ARPHelper database schema is described in Table 70.<br />

Table 70: ARPHelper Database Schema<br />

Database Defined in Fully Qualified Database Table Names<br />

ARPHelper NCHOME/etc/precision/<br />

DiscoHelperServerSchema.cf<br />

g<br />

The ARPHelperTable database table, described in Table 71, configures the general operation of the<br />

ARP helper.<br />

Table 71: ARPHelper.ARPHelperTable Database Table Schema<br />

ARPHelper.ARPHelperTable<br />

ARPHelper.ARPHelperConfig<br />

Column name Constraints Data type Description<br />

RivHelperRequestReplyKey PRIMARY KEY<br />

NOT NULL<br />

UNIQUE<br />

Text A unique key interface to the databases of<br />

the Helper Server for Reply requests.<br />

RivHelperRequestGetKey NOT NULL Text A key interface to the databases of the<br />

Helper Server for Get requests.<br />

RivHelperDbTimeToDie Long64 Indicates how long the requested<br />

information is to live within the Helper<br />

Server.<br />

m_HostIp NOT NULL Text <strong>IP</strong> address of the device to interrogate.<br />

m_HostSubnet Text Subnet of the host device to be<br />

interrogated.<br />

m_HostMask Text The subnet mask of the host device to be<br />

interrogated.<br />

m_HostMac Text The physical address of the device (MAC<br />

address).<br />

307


Chapter 10: The <strong>Discovery</strong> Helper System<br />

308<br />

The ARPHelperConfig table, described in Table 72, contains configuration information for the ARP<br />

helper.<br />

Table 72: ARPHelper.ARPHelperConfig Database Table Schema<br />

Column name Constraints Data type Description<br />

m_HelperDbTimeout UNIQUE Long64 The helper database timeout, that is, how long<br />

before the database expires in the absence of any<br />

activity.<br />

m_HelperReqTimeout Long64 The helper request timeout, that is, how long<br />

before each request expires.<br />

m_HelperStartupTimeout Long64 The default helper startup timeout, that is, the<br />

maximum time to wait for a helper to start up<br />

when requested.<br />

m_HelperDoWeQuery Integer Indicates whether the Helper Server queries its<br />

database or whether it queries the network using<br />

a helper:<br />

m_HelperDoQueryVBs<br />

optional<br />

m_HelperDoNotQueryVBs<br />

optional<br />

Object type<br />

varbinds<br />

Object type<br />

varbinds<br />

(0) Do not use cache<br />

(1) Use cache<br />

List of helper inputs that always query the<br />

database before querying the network. If the<br />

item is found in the database then the network is<br />

not queried.<br />

List of helper inputs that do not query the<br />

database. This field overrides the value specified<br />

in m_HelperDoWeQuery.<br />

m_HelperDoWeStore Integer Indicates whether the Helper Server stores any<br />

replies from the helpers in its database:<br />

m_HelperDoStoreVBs<br />

optional<br />

m_HelperDoNotStoreVBs<br />

optional<br />

m_HelperDebugLevel<br />

optional<br />

m_HelperLogfile<br />

optional<br />

Object type<br />

varbinds<br />

Object type<br />

varbinds<br />

(0) Do not store replies in database<br />

(1) Store replies in database<br />

List of helper inputs that always store data in the<br />

Helper Server database. This field overrides the<br />

value of m_HelperDoWeStore.<br />

List of helper inputs that never store data in the<br />

Helper Server databases. This field overrides the<br />

value of m_HelperDoWeStore.<br />

Integer Sets the debug level of the helper, printing to<br />

m_HelperLogfile.<br />

Text The full path and file for the logfile of the current<br />

helper.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

The Helper Databases<br />

The m_HelperDoWeQuery and m_HelperDoWeStore fields each have two related optional fields.<br />

A record entered into either m_HelperDoWeQuery or m_HelperDoWeStore is the default setting<br />

to which the helper responds if no records are entered into the optional fields. However, a record entered<br />

into either of the related optional fields overrides the default setting.<br />

For example, if m_HelperDoWeQuery is set to query the network rather than the cache (that is,<br />

m_HelperDoWeQuery=0) and if an <strong>IP</strong> address of 192.168.0.1 is specified in<br />

m_HelperDoQueryVBs, then a request record where m_IpAddress = 192.168.0.1 results in<br />

the cache being queried rather than the network. The network is only queried if the information is not<br />

currently held in the cache.<br />

Example ARP Helper Database <strong>Configuration</strong><br />

The following example insert gives a typical ARP helper configuration.<br />

insert into ARPHelper.ARPHelperConfig<br />

(<br />

m_HelperDbTimeout,<br />

m_HelperReqTimeout,<br />

m_HelperStartupTimeout,<br />

m_HelperDoWeQuery,<br />

m_HelperDoWeStore<br />

)<br />

values<br />

(<br />

259200, 1200, 90, 0, 0<br />

);<br />

The DNS Helper Database Schema<br />

Table 73 describes the DNSHelper database.<br />

Table 73: DNS Helper Database Schema<br />

Database Defined in Fully Qualified Database Table Names<br />

DNSHelper NCHOME/etc/precision/<br />

DiscoHelperServerSchema.cfg<br />

DNSHelper.DNSHelperTable<br />

DNSHelper.DNSHelperConfig<br />

309


Chapter 10: The <strong>Discovery</strong> Helper System<br />

310<br />

The DNSHelper database table, described in Table 74, stores information about the requests the ARP<br />

helper makes from the network.<br />

Table 74: DNSHelper.DNSHelperTable Database Table Schema<br />

Column name Constraints Data type Description<br />

RivHelperRequestReplyKey PRIMARY KEY<br />

NOT NULL<br />

UNIQUE<br />

Text A unique key for Reply requests.<br />

RivHelperRequestGetKey NOT NULL Text A key for Get requests.<br />

RivHelperDbTimeToDie Long64 How long the requested information is to<br />

live within the Helper Server.<br />

m_HostName Text The host name for this <strong>IP</strong> address.<br />

m_HostIp Text The <strong>IP</strong> addresses for this host.<br />

RivHelperRequestOutput Atom The response data.<br />

The DNSHelperConfig table, described in Table 75, holds configuration information for the DNS<br />

helper.<br />

Table 75: DNSHelper.DNSHelperConfig Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_HelperDbTimeout UNIQUE Long64 The helper database timeout, that is, how long<br />

before the database expires.<br />

m_HelperReqTimeout Long64 The helper request timeout, that is, how long<br />

before each request expires.<br />

m_HelperStartupTimeout Long64 The default helper start-up timeout, that is, the<br />

maximum time to wait for a helper to start up<br />

when requested.<br />

m_HelperDoWeQuery Integer Indicates whether the Helper Server queries its<br />

database or whether it queries the network using a<br />

helper:<br />

m_HelperDoNotQueryVBs<br />

optional<br />

m_HelperDoQueryVBs<br />

optional<br />

Object type<br />

varbinds<br />

Object type<br />

varbinds<br />

(0) Do not use cache<br />

(1) Use cache<br />

List of helper inputs that do not query the<br />

database. This field overrides the value of<br />

m_HelperDoWeQuery.<br />

List of helper inputs that always query the database<br />

before querying the network. If the item is found in<br />

the database then the network is not queried.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 75: DNSHelper.DNSHelperConfig Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

Example DNS Helper Database <strong>Configuration</strong><br />

The following example insert shows a typical DNS helper configuration.<br />

insert into DNSHelper.DNSHelperConfig<br />

(<br />

m_HelperDbTimeout,<br />

m_HelperReqTimeout,<br />

m_HelperStartupTimeout,<br />

m_HelperDoWeQuery,<br />

m_HelperDoWeStore<br />

)<br />

values<br />

(<br />

259200, 1200, 90, 0, 0<br />

);<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

The Helper Databases<br />

m_HelperDoWeStore Integer Indicates whether the Helper Server stores any<br />

replies from the helpers in its database:<br />

m_HelperDoStoreVBs<br />

optional<br />

m_HelperDoNotStoreVBs<br />

optional<br />

m_HelperDebugLevel<br />

optional<br />

m_HelperLogfile<br />

optional<br />

Object type<br />

varbinds<br />

Object type<br />

varbinds<br />

(0) Do not store replies in database<br />

(1) Store replies in database<br />

List of helper inputs that always store data in the<br />

Helper Server database. This field overrides<br />

m_HelperDoWeStore.<br />

List of helper inputs that never store data in the<br />

Helper Server databases. This field overrides<br />

m_HelperDoWeStore.<br />

Integer Sets the debug level of the helper, printing to<br />

m_Logfile.<br />

Text The full path and file for the logfile of the current<br />

helper.<br />

311


Chapter 10: The <strong>Discovery</strong> Helper System<br />

The Ping Helper Database Schema<br />

312<br />

Table 76 describes the PingHelper database.<br />

Table 76: PingHelper Database Schema<br />

Database Defined in Fully Qualified Database Table Names<br />

PingHelper NCHOME/etc/precision/<br />

DiscoHelperServerSche<br />

ma.cfg<br />

The schema of the PingHelperTable database table is described in Table 77.<br />

Table 77: PingHelper.PingHelperTable Database Table Schema<br />

PingHelper.PingHelperTable<br />

PingHelper.PingHelperConfig<br />

Column name Constraints Data type Description<br />

RivHelperRequestReplyKey PRIMARY KEY<br />

NOT NULL<br />

UNIQUE<br />

Text A key interface to the databases of the<br />

Helper Server for Reply requests.<br />

RivHelperRequestGetKey NOT NULL Text A key interface to the databases of the<br />

Helper Server for Get requests.<br />

RivHelperDbTimeToDie Long64 How long the requested information is to<br />

live within the Helper Server.<br />

m_HostIp Atom <strong>IP</strong> address to ping.<br />

m_HostSubnet Text Subnet of the <strong>IP</strong> address to ping.<br />

m_HostMask Text The subnet mask of the address to ping.<br />

m_PingRequestType Integer The type of ping request:<br />

(1) Individual address<br />

(2) Subnet<br />

m_PingResponseType Integer Type of reply to the ping.<br />

m_PingRetries Integer Number of retries for the ping.<br />

m_PingTimeout Integer Maximum time to wait for reply.<br />

RivHelperRequestOutput Atom The response data.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The schema of the PingHelperConfig database table is described in Table 78.<br />

Table 78: PingHelper.PingHelperConfig Database Table Schema<br />

Column name Constraints Data type Description<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

The Helper Databases<br />

m_HelperDbTimeout UNIQUE Long64 The helper database timeout, that is, how long<br />

before the database expires.<br />

m_HelperReqTimeout Long64 The helper request timeout that is, how long<br />

before each request expires.<br />

m_HelperStartupTimeout Long64 The default helper startup timeout, that is, the<br />

maximum time to wait for a helper to start up<br />

when requested to.<br />

m_HelperDoWeQuery Integer Indicates whether the Helper Server queries its<br />

database or whether it queries the network<br />

using a helper:<br />

m_HelperDoNotQueryVBs<br />

optional<br />

m_HelperDoQueryVBs<br />

optional<br />

Object type<br />

varbinds<br />

Object type<br />

varbinds<br />

(0) Do not use cache<br />

(1) Use cache<br />

List of helper inputs that do not query the<br />

database. This field overrides<br />

m_HelperDoWeQuery.<br />

List of helper inputs that always query the<br />

database before querying the network. If the<br />

item is found in the database then the network<br />

is not queried.<br />

m_HelperDoWeStore Integer Indicates whether the Helper Server stores any<br />

replies from the helpers in its database:<br />

m_HelperDoStoreVBs<br />

optional<br />

m_HelperDoNotStoreVBs<br />

optional<br />

m_HelperDebugLevel<br />

optional<br />

m_HelperLogFile<br />

optional<br />

Object type<br />

varbinds<br />

Object type<br />

varbinds<br />

(0) Do not store replies in database<br />

(1) Store replies in database<br />

List of helper inputs that always store data in the<br />

Helper Server database. This field overrides<br />

m_HelperDoWeStore.<br />

List of helper inputs that never store data in the<br />

Helper Server databases. This field overrides<br />

m_HelperDoWeStore.<br />

Integer Sets the debug level of the helper, printing to<br />

the file specified in m_HelperLogfile.<br />

Text The full path and file for the logfile of the current<br />

helper.<br />

313


Chapter 10: The <strong>Discovery</strong> Helper System<br />

314<br />

Example Ping Helper Database <strong>Configuration</strong><br />

The following insert provides a typical example configuration of the PingHelper database.<br />

insert into PingHelper.PingHelperConfig<br />

(<br />

m_HelperDbTimeout,<br />

m_HelperReqTimeout,<br />

m_HelperStartupTimeout,<br />

m_HelperDoWeQuery,<br />

m_HelperDoWeStore<br />

)<br />

values<br />

(<br />

259200, 1200, 90, 0, 0<br />

);<br />

The SNMP Helper Database Schema<br />

Table 79 gives the schema of the SNMPHelper database.<br />

Table 79: SNMPHelper Database Schema<br />

Database name Defined in Fully qualified database table names<br />

SnmpHelper NCHOME/etc/precision/<br />

DiscoHelperServerSchema.cfg<br />

The schema of the SNMPHelperTable database table is described in Table 80.<br />

Table 80: SnmpHelper.SnmpHelperTable Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

RivHelperRequestReplyKey PRIMARY KEY<br />

NOT NULL<br />

UNIQUE<br />

SnmpHelper.SnmpHelperTable<br />

SnmpHelper.SnmpHelperConfig<br />

Text A key interface to the databases of the Helper<br />

Server for Reply requests.<br />

RivHelperRequestGetKey NOT NULL Text A key interface to the databases of the Helper<br />

Server for Get requests.<br />

RivHelperDbTimeToDie Long64 How long the requested information is to live<br />

within the Helper Server.<br />

m_HostIp NOT NULL Text <strong>IP</strong> address of the device to interrogate.<br />

m_CommunitySuffix Text The suffix to the community string.<br />

m_OID NOT NULL Atom Object ID for the Get request.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 80: SnmpHelper.SnmpHelperTable Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

The schema of the SNMPHelperConfig database table is described in Table 81.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

The Helper Databases<br />

m_SnmpIndex Atom The index of the Get request (if it is a Get<br />

request).<br />

m_RequestType Integer Type of request:<br />

(0) Get<br />

(1) GetNext<br />

(2) GetBulk<br />

RivHelperRequestOutput Atom The response data.<br />

Table 81: SnmpHelper.SnmpHelperConfig Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_HelperDbTimeout UNIQUE Long64 The helper database timeout, that is, how long<br />

before the database expires.<br />

m_HelperReqTimeout Long64 The helper request timeout, that is, how long<br />

before each request expires.<br />

m_HelperStartupTimeout Long64 The default helper startup timeout, that is, the<br />

maximum time to wait for a helper to start up<br />

when requested to.<br />

m_HelperDoWeQuery Integer Indicates whether the Helper Server queries its<br />

database or whether it queries the network<br />

using a helper:<br />

m_HelperDoNotQueryVBs<br />

optional<br />

m_HelperDoQueryVBs<br />

optional<br />

Object type<br />

varbinds<br />

Object type<br />

varbinds<br />

(0) Do not use cache<br />

(1) Use cache<br />

List of helper inputs that do not query the<br />

database. This field overrides<br />

m_HelperDoWeQuery.<br />

List of helper inputs that always query the<br />

database before querying the network. If the<br />

item is found in the database then the network<br />

is not queried.<br />

m_HelperDoWeStore Integer Indicates whether the Helper Server stores any<br />

replies from the helpers in its database:<br />

(0) Do not store replies in database<br />

(1) Store replies in database<br />

315


Chapter 10: The <strong>Discovery</strong> Helper System<br />

316<br />

Table 81: SnmpHelper.SnmpHelperConfig Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

m_HelperDoStoreVBs<br />

optional<br />

m_HelperDoNotStoreVBs<br />

optional<br />

m_HelperDebugLevel<br />

optional<br />

m_HelperLogfile<br />

optional<br />

Example SNMP Helper Database <strong>Configuration</strong><br />

The following insert provides an example configuration of the SNMP helper database.<br />

insert into SnmpHelper.SnmpHelperConfig<br />

(<br />

m_HelperDbTimeout,<br />

m_HelperReqTimeout,<br />

m_HelperStartupTimeout,<br />

m_HelperDoWeQuery,<br />

m_HelperDoWeStore<br />

)<br />

values<br />

(<br />

259200, 1200, 90, 0, 0<br />

);<br />

The Telnet Helper Database Schema<br />

Table 82 describes the TELNETHelper database.<br />

Table 82: TELNETHelper Database Schema<br />

Object type<br />

varbinds<br />

Object type<br />

varbinds<br />

List of helper inputs that always store data in<br />

the Helper Server database. This field overrides<br />

m_HelperDoWeStore.<br />

List of helper inputs that never store data in<br />

the Helper Server databases. This field<br />

overrides m_HelperDoWeStore.<br />

Integer Sets the debug level of the helper, printing to<br />

m_HelperLogfile.<br />

Text The full path and file for the logfile of the<br />

current helper.<br />

Database name Defined in Fully qualified database table names<br />

TelnetHelper NCHOME/etc/precision/<br />

DiscoHelperServerSchema.cfg<br />

TelnetHelper.TelnetHelperTable<br />

TelnetHelper.TelnetHelperConfig<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The TelnetHelperTable database table schema is described in Table 83.<br />

Table 83: TelnetHelper.TelnetHelperTable Database Table Schema<br />

Column name Constraints Data type Description<br />

RivHelperRequestReplyKey PRIMARY KEY<br />

Table 84 gives the schema of the TelnetHelperConfig table.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

NOT NULL<br />

UNIQUE<br />

The Helper Databases<br />

Text A unique request reply key interface to the<br />

databases of the Helper Server.<br />

RivHelperRequestGetKey NOT NULL Text A request get key interface to the<br />

databases of the Helper Server.<br />

RivHelperDbTimeToDie Long64 How long the requested information is to<br />

live within the Helper Server.<br />

m_HostIp NOT NULL Text <strong>IP</strong> address of the device to interrogate.<br />

m_TelnetCommand Text The Telnet command.<br />

RivHelperRequestOutput Atom The response data.<br />

Table 84: TelnetHelper.TelnetHelperConfig Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_HelperDbTimeout UNIQUE Long64 The helper database timeout, that is, how long<br />

before the database expires.<br />

m_HelperReqTimeout Long64 The helper request timeout, that is, how long<br />

before each request expires.<br />

m_HelperStartupTimeout Long64 The default helper start-up timeout, that is, the<br />

maximum time to wait for a helper to start up<br />

when requested.<br />

m_HelperDoWeQuery Integer Indicates whether the Helper Server queries its<br />

database or whether it queries the network using<br />

a helper:<br />

m_HelperDoNotQueryVBs<br />

optional<br />

m_HelperDoQueryVBs<br />

optional<br />

Object type<br />

varbinds<br />

Object type<br />

varbinds<br />

(0) Do not use cache<br />

(1) Use cache<br />

List of helper inputs that do not query the<br />

database. This field overrides<br />

m_HelperDoWeQuery.<br />

List of helper inputs that always query the<br />

database before querying the network. If the item<br />

is found in the database then the network is not<br />

queried.<br />

317


Chapter 10: The <strong>Discovery</strong> Helper System<br />

318<br />

Table 84: TelnetHelper.TelnetHelperConfig Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

m_HelperDoWeStore Integer Indicates whether the Helper Server stores any<br />

replies from the helpers in its database:<br />

m_HelperDoStoreVBs<br />

optional<br />

m_HelperDoNotStoreVBs<br />

optional<br />

m_HelperDebugLevel<br />

optional<br />

m_HelperLogfile<br />

optional<br />

Object type<br />

varbinds<br />

Object type<br />

varbinds<br />

Example Telnet Helper Database <strong>Configuration</strong><br />

The following example insert gives a typical configuration of the Telnet helper database.<br />

insert into TelnetHelper.TelnetHelperConfig<br />

(<br />

m_HelperDbTimeout,<br />

m_HelperReqTimeout,<br />

m_HelperStartupTimeout,<br />

m_HelperDoWeQuery,<br />

m_HelperDoWeStore<br />

)<br />

values<br />

(<br />

259200, 1200, 90, 0, 0<br />

);<br />

(0) Do not store replies in database<br />

(1) Store replies in database<br />

List of helper inputs that always store data in the<br />

Helper Server database. This field overrides<br />

m_HelperDoWeStore.<br />

List of helper inputs that never store data in the<br />

Helper Server databases. This field overrides<br />

m_HelperDoWeStore.<br />

Integer Sets the debug level of the helper, printing to<br />

m_HelperLogfile.<br />

Text The full path and file for the logfile of the current<br />

helper.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


10.6 Connecting to Helpers on Different Subnets<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Connecting to Helpers on Different Subnets<br />

If necessary you can configure the Helper Server to connect to helpers running on a separate subnet by<br />

creating a database table called HelperName.HelperNameClientId. You can create and populate<br />

a ClientId table for a given helper by appending OQL inserts to the<br />

DiscoHelperServerSchema.cfg configuration file.<br />

In order to use helpers running on a separate subnet, you must first configure the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

Rendezvous message bus for communication between the two subnets. See the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

Installation and Deployment <strong>Guide</strong> for details about configuring Rendezvous.<br />

The ClientId table, described in Table 85, must be in the following format:<br />

Helper_name.Helper_nameClientId.<br />

Table 85: ClientId table<br />

Column name Constraints Data type Description<br />

m_HostName NOT NULL Text The name of the host on which the helper is running.<br />

m_Subnet NOT NULL Text The subnet of the host.<br />

m_NetMask Integer The netmask.<br />

The Helper Server checks for the existence of a ClientId table when it distributes requests to the helpers.<br />

By default, no ClientId tables are created, so any requests passed to the helpers are sent to the locally<br />

connected helpers.<br />

If a ClientId table exists, the Helper Server uses the remote helper on the specified subnet, if the<br />

appropriate helper is connected. If no helper is connected on the specified subnet, the Helper Server uses a<br />

local helper instead, or launches a local helper using CTRL if there are no active local helpers.<br />

Example <strong>Configuration</strong> of the ARP Helper<br />

The following example insert creates and populates a ClientId table for the ARP helper. The insert<br />

ensures that the Helper Server forwards requests appropriate to the ARP helper to the helper connected to<br />

the specified device and subnet instead of using the local ARP helper.<br />

create table ARPHelper.ARPHelperClientId<br />

(<br />

m_HostName text not null,<br />

m_Subnet text not null,<br />

m_NetMask int<br />

);<br />

insert into ARPHelper.ARPHelperClientId<br />

(<br />

m_HostName, m_Subnet, m_NetMask<br />

319


Chapter 10: The <strong>Discovery</strong> Helper System<br />

320<br />

)<br />

values<br />

(<br />

);<br />

"swallow", '194.203.201.0', 25<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Communication Between DISCO and the Helper Server<br />

10.7 Communication Between DISCO and the Helper Server<br />

If the helpers and the Helper Server are running on a different host to DISCO, then DISCO and the Helper<br />

System communicate using a TCP socket-based connection. However, the initial communication of the<br />

server address is accomplished using a multicast process. A client (discovery agents and helpers are clients to<br />

the Helper Server) sends a multicast request for the address of the server to participating <strong>Precision</strong> Server<br />

processes. The server responds with its connection details, and a TCP connection is established. This<br />

connection then becomes the private link between the server and the client process. You can specify the exact<br />

multicast address and port number for communication between processes through the Service Data<br />

configuration file, ServiceData.cfg.<br />

The ServiceData <strong>Configuration</strong> File<br />

The ServiceData configuration file is a dynamic file that is constantly updated by <strong>Precision</strong> Server<br />

processes. Every <strong>Precision</strong> Server service (that is, component or process) using a TCP socket adds a line to<br />

the file on start up containing information about the service. The service removes the line from the<br />

configuration file when it terminates. The information appended to the configuration file is listed below:<br />

The service name<br />

The service domain<br />

The service <strong>IP</strong> address<br />

The service port number<br />

The server on which the process is being run<br />

In the example configuration file shown below, the first service called MulticastService shows the<br />

multicast address and port number. The second service shows that the Helper service is running on the<br />

DEMO domain, and includes information about the <strong>IP</strong> address, port number and the name of the server<br />

where the Helper service is running.<br />

--<br />

-- Server data file - contains info on servers and the general multicast<br />

-- address to use.<br />

--<br />

SERVICE: MulticastService DOMAIN: ANY_PRECISION_DOMAIN ADDRESS: 225.13.13.13 PORT:<br />

33000<br />

SERVICE: Helper DOMAIN: DEMO ADDRESS: 192.168.31.8 PORT: 51153 SERVERNAME: britanicus<br />

DYNAMIC: YES<br />

321


Chapter 10: The <strong>Discovery</strong> Helper System<br />

322<br />

Defining Fixed Helper Ports<br />

When helpers are located on different hosts that are behind a firewall, you need to dedicate a port on the<br />

server machine for communication with the helpers. You also need to dedicate a port on each of the<br />

machines where one or more helpers are running for communication with the server. You do this by<br />

modifying the ServiceData.cfg file on the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> installation on the server machine<br />

and on each of the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> installations on each of the remote hosts where helpers are running.<br />

Note: <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> needs to be installed on each of the remote hosts where helpers are running.<br />

To set fixed port settings for helpers on the server machine:<br />

1. On the server machine, start the Helper server. For information on how to do this, see Starting the<br />

Helper Server on page 288.<br />

2. Make a backup copy of the ServiceData.cfg file.<br />

3. Edit the ServiceData.cfg file and copy the line relevant to the helper (or helpers) for which<br />

you want to fix a static port.<br />

The line may look something like this:<br />

SERVICE: Helper DOMAIN: DEMO ADDRESS: 192.168.31.8 PORT: 51153 SERVERNAME:<br />

britanicus DYNAMIC: YES<br />

The port for the helper in this example has been assigned on a dynamic basis by Rendezvous.<br />

4. Change the PORT setting to the desired value.<br />

5. Change the string DYNAMIC:YES to DYNAMIC:NO.<br />

6. Save the ServiceData.cfg file.<br />

To set fixed port settings for the server on the helper host:<br />

1. Copy the ServiceData.cfg file so that you have a backup copy.<br />

2. On the server, edit the ServiceData.cfg file and copy the line that you edited to set fixed port<br />

settings for helpers on the server machine.<br />

3. Edit the ServiceData.cfg file on the helper host and paste the line that you copied in Step 2.<br />

Using the example above, this line looks like this:<br />

SERVICE: Helper DOMAIN: DEMO ADDRESS: 192.168.31.8 PORT: 51153 SERVERNAME:<br />

britanicus DYNAMIC: NO<br />

4. Save the ServiceData.cfg file.<br />

5. Repeat steps 1 to 4 for each of the helpers that requires a fixed port setting.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Changing the Multicast Address<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Communication Between DISCO and the Helper Server<br />

In order to modify the multicast address used by the <strong>Precision</strong> Server processes, you have to edit the address<br />

and the port of the first line of the ServiceData.cfg configuration file, as shown below.<br />

--<br />

-- Server data file - contains info on servers and the general<br />

-- multicast address to use.<br />

--<br />

SERVICE: MulticastService DOMAIN: DOMAIN_NAME ADDRESS: MULTICAST_ADDRESS PORT:<br />

PORT_NUMBER<br />

In the above statement:<br />

MulticastService refers to the <strong>Precision</strong> Server service that is being configured to use a<br />

particular multicast address. Valid entries include Model, Events, Class, Auth, Exec, Ctrl.<br />

DOMAIN_NAME indicates the domain name of the service that is to use the specified multicast<br />

address. It is possible to set the same service to use different multicast addresses for each domain that<br />

it is run in. Alternatively, you may replace the DOMAIN_NAME with ANY_PRECISION_DOMAIN,<br />

which means that the service is to use the same multicast address for all domains it is executed in.<br />

MULTICAST_ADDRESS indicates the multicast address to be used by the multicast service<br />

provider.<br />

PORT_NUMBER indicates the port number to be used by the multicast service provider.<br />

The multicast address in the configuration files must be the same for all devices that have clients which talk<br />

to each other. If this is not the case, processes on one device can talk but others are not able to listen because<br />

they are not tuned in to the right frequency.<br />

323


Chapter 10: The <strong>Discovery</strong> Helper System<br />

324<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


11. MPLS.fm August 16, 2006<br />

Chapter 11: Configuring an MPLS <strong>Discovery</strong><br />

This chapter explains how to discover MPLS networks. It explains which types of MPLS discovery you can<br />

perform using <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> and leads you through the steps required to perform an MPLS<br />

discovery.<br />

This chapter contains the following sections:<br />

About MPLS <strong>Discovery</strong> on page 326<br />

Configuring MPLS Agents and SNMP and Telnet Access on page 329<br />

Advanced MPLS <strong>Discovery</strong> on page 333<br />

Visualizing MPLS Topology on page 337<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 325


Chapter 11: Configuring an MPLS <strong>Discovery</strong><br />

11.1 About MPLS <strong>Discovery</strong><br />

326<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> supports the discovery of the following VPNs running across MPLS core networks:<br />

Layer 3 VPNs<br />

Enhanced Layer 2 VPNs<br />

For the enhanced Layer 2 VPNs, <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> discovers point-to-point psuedowires linking two<br />

provider edge (PE) routers.<br />

The following sections specify the terminology and topology visualization conventions used in<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> to refer to MPLS networks.<br />

Note: The pictures shown in this section are conceptual representations of an MPLS network only. You<br />

cannot see these conceptual views in the Network Views graphical user interface (GUI). For examples of the<br />

MPLS network views available from the Network Views GUI, see Visualizing MPLS Topology on page 337.<br />

Layer 3 MPLS VPNs<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> can visualize layer 3 MPLS VPN topologies in the following ways:<br />

Core view<br />

Edge View<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Core View<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

About MPLS <strong>Discovery</strong><br />

The core view shows the provider edge (PE) routers, and provides visibility of the provider core (P) routers<br />

and label switched path (LSP) data within the the MPLS core, for each of the VPNs running across the<br />

MPLS core. Figure 79 provides an example of a core view showing a layer 3 VPN running over an MPLS<br />

core network.<br />

Dallas Site<br />

Figure 79: Core View<br />

Edge View<br />

Tokyo Site<br />

The edge view shows the PE routers and the MPLS cloud only. It does not provide visibility of the devices<br />

in the core. Figure 80 provides an example of an edge view showing a layer 3 VPN running over an MPLS<br />

core network.<br />

Dallas Site<br />

London Site<br />

CE – D<br />

Figure 80: Edge View<br />

London Site<br />

CE – D<br />

CE – L<br />

PE – L<br />

PE – D<br />

CE – L<br />

PE – L<br />

PE – D<br />

P P<br />

P<br />

MPLS Core<br />

Network<br />

PE – T<br />

PE – T<br />

CE – T<br />

CE – T<br />

Tokyo Site<br />

327


Chapter 11: Configuring an MPLS <strong>Discovery</strong><br />

Enhanced Layer 2 MPLS VPNs<br />

328<br />

For enhanced Layer 2 VPNs, <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> only provides an edge view of your MPLS core network.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> displays an enhanced Layer 2 VPN as a collection of point-to-point psuedowires. This<br />

means that if an enhanced Layer 2 VPN contains more than two provider edge (PE) routers, then<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> displalys that VPN in multiple views, each view consisting of a single PE to PE<br />

point-to-point connection.<br />

Table 86 shows examples of enhanced Layer 2 VPNs with two and more than two PEs. The table also<br />

provides the number of psuedowires, and hence the number of views that <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> displays for<br />

each VPN.<br />

Table 86: Number of Psuedowires for an Enhanced Layer 2 VPN<br />

Number of PEs in an Enhanced Layer 2<br />

VPN<br />

Number of Point-to-Point Psuedowires Number of Views <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

Displays for this VPN<br />

2 1 1<br />

3 3 3<br />

4 6 6<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring MPLS Agents and SNMP and Telnet Access<br />

11.2 Configuring MPLS Agents and SNMP and Telnet Access<br />

You configure an MPLS discovery in the same way that you configure the discovery of any other type of<br />

network. <strong>Configuration</strong> activities for an MPLS network include seeding, scoping, and the other standard<br />

discovery activities detailed in Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI on page 85<br />

(GUI-based configuration) and in Chapter 6: Network <strong>Discovery</strong> from the Command Line on page 175<br />

(command line-based configuration).<br />

In addition to standard discovery configuration activities, you also have to do the following:<br />

Enable one or more MPLS agents for your discovery.<br />

Configure the MPLS VPN discovery method.<br />

Configure SNMP and Telnet access to ensure that MPLS agents are able to access devices and are able<br />

to understand the output from devices.<br />

These activities are described in the following sections.<br />

Enabling MPLS Agents<br />

The following MPLS agents are provided. These agents, and the corresponding agent definition (.agnt)<br />

files, are listed below:<br />

Juniper Telnet agent (JuniperMPLSTelnet.agnt)<br />

Juniper ERX router agent (UnisphereMPLSTelnet.agnt)<br />

Cisco MPLS Telnet agent (CiscoMPLSTelnet.agnt)<br />

Cisco MPLS SNMP agent (CiscoMPLSSnmp.agnt)<br />

Laurel MPLS Telnet agent (LaurelMPLSTelnet.agnt)<br />

Note: The Laurel MPLS Telnet agent is intended for RT (RouteTarget) based discoveries only.<br />

These agents are able to discover MPLS VPN data from devices in the network.<br />

Note: If you have an MPLS network that supports both Layer 3 and enhanced Layer 2 VPNs, then the same<br />

MPLS agents will discover both types of VPN. Topoviz Network Views are also able to partition both Layer<br />

3 and enhanced Layer 2 VPNs simultaneously on the same core MPLS network. For an example of a<br />

Topoviz network view of a partitioned MPLS network showing both Layer 3 and enhanced Layer 2 VPN,<br />

see Figure 83 on page 339.<br />

329


Chapter 11: Configuring an MPLS <strong>Discovery</strong><br />

!<br />

330<br />

It is recommended that where the MPLS network contains Cisco equipment both the Cisco MPLS Telnet<br />

and Cisco MPLS SNMP agents are enabled. These two agents complement each other, as follows:<br />

Cisco MPLS SNMP agent only targets devices with an IOS that fully supports SNMP-based MPLS<br />

discovery<br />

CiscoMPLSTelnet agent only targets devices running an IOS that does not fully support an SNMP<br />

based discovery<br />

Warning: Care must be taken when altering the CiscMPLSSnmp.agnt file. Some network devices may<br />

contain IOS versions that have a flaw that may impact the device when certain MPLS SNMP data is<br />

requested. These IOS versions have been filtered out by default in the CiscMPLSSnmp.agnt file.<br />

In addition to these standard discovery configuration activities, you can also change the scope of the MPLS<br />

discovery, by restricting the scope of the discovery to specific VPNs or VRFs. For details on how to do this,<br />

see Defining the Scope of an MPLS/VPN <strong>Discovery</strong> on page 333.<br />

Configuring MPLS <strong>Discovery</strong> Method<br />

You can discover MPLS VPNs in the following ways:<br />

Route Target (RT)-Based <strong>Discovery</strong>: <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> uses VRF and RT information to determine<br />

which provider edge routers are involved in a VPN.<br />

Label Switched Path (LSP)-Based <strong>Discovery</strong>: <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> uses VRF and LSP information to<br />

determine which provider edge (PE) routers are involved in a VPN and which provider core (P)<br />

routers are traversed by the LSPs within that VPN.<br />

Choose which MPLS discovery method to use by setting the Enable RT Based MPLS VPLN <strong>Discovery</strong><br />

check box in the Network <strong>Discovery</strong> GUI, as described in Configuring Advanced <strong>Discovery</strong> Parameters on<br />

page 134.<br />

Check the Enable RT Based MPLS VPLN <strong>Discovery</strong> check box to enable RT-based MPLS<br />

discovery.<br />

Clear the Enable RT Based MPLS VPLN <strong>Discovery</strong> check box to enable LSP-based MPLS<br />

discovery.<br />

You can also perform this configuration manually by setting the value of the field m_RTBasedVPNs in<br />

the disco.config table, as described in Table A8 disco.config Database Table Schema on page 431.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring MPLS Agents and SNMP and Telnet Access<br />

Table 87 summarizes the differences between RT-based discovery and LSP-based discovery.<br />

Table 87: RT-Based <strong>Discovery</strong> and LSP-Based <strong>Discovery</strong><br />

Type of <strong>Discovery</strong> Label Data Core View VPN Resolution<br />

RT-based discovery No label data is required for<br />

this type of discovery<br />

Configuring Telnet<br />

<strong>Discovery</strong> is faster<br />

LSP-based discovery Label data is discovered in<br />

order to trace LSPs<br />

<strong>Discovery</strong> is slower<br />

Consists of all MPLS-enabled<br />

devices<br />

Consists of devices<br />

traversed by the relevant<br />

LSPs<br />

VPNs resolved based on RT<br />

information<br />

VPNs resolved based on VRF<br />

information<br />

The CiscoMPLSTelnet, JuniperMPLSTelnet, LaurelMPLSTelnet, and UnisphereMPLSTelnet agents<br />

obtain data from devices primarily, although not exclusively, using Telnet. You must configure Telnet access<br />

to ensure that MPLS Telnet agents are able to access devices and are able to understand the output from<br />

devices.This involves the following activities:<br />

Populate the Telnet configuration file TelnetStackPasswords.cfg so the agents can access<br />

the target devices. For more information, see the following sections:<br />

– Configuring Telnet Device Access on page 303 for information on how to configure Telnet access<br />

to target devices using OQL inserts.<br />

– Setting Telnet Access Information on page 114 for information on how to configure Telnet access<br />

to target devices using the Network <strong>Discovery</strong> GUI.<br />

Configure the Telnet Helper so that agents can understand the output from devices. For more<br />

information, see Configuring the Telnet Helper on page 293.<br />

331


Chapter 11: Configuring an MPLS <strong>Discovery</strong><br />

Configuring SNMP<br />

332<br />

The CiscoMPLSSnmp agent obtains data from devices using SNMP. You must configure SNMP access to<br />

ensure that this agent is able to access devices and is able to understand the output from devices.This involves<br />

the following activities:<br />

Configure SNMP access to devices, as described in the following sections:<br />

– Configuring SNMP Device Access on page 298 for information on how to configure SNMP<br />

access to target devices using OQL inserts.<br />

– Setting SNMP Passwords on page 111 for information on how to configure SNMP access to<br />

target devices using the Network <strong>Discovery</strong> GUI.<br />

Configure the SNMP Helper so that agents can understand the output from devices. For more<br />

information, see Configuring the SNMP Helper on page 292.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


11.3 Advanced MPLS <strong>Discovery</strong><br />

This section covers the following advanced MPLS discovery techniques:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Advanced MPLS <strong>Discovery</strong><br />

Defining the scope of an MPLS discovery: enables you to restrict the scope of this discovery to a<br />

particular VPN or VRF<br />

Specifying a VPN name: enables you to configure your own VPN naming convention<br />

Fine Tuning Label Data <strong>Discovery</strong>: enables you to force label discovery regardless of the type of MPLS<br />

discovery selected<br />

Defining the Scope of an MPLS/VPN <strong>Discovery</strong><br />

When configuring the discovery of one or more VPNs (Virtual Private Networks) running across an MPLS<br />

core, you can restrict the scope of this discovery to a particular VPN name or VRF (VPN Routing and<br />

Forwarding) table name. You restrict the scope by configuring the optional<br />

DiscoAgent<strong>Discovery</strong>Scoping section in the *.agnt file. The configurable options are<br />

described in Table 88.<br />

Table 88: Defining the Scoping Requirements<br />

Option Function<br />

IncludeVRF Allows the discovery of the named VRF<br />

IncludeVPN Allows the discovery of the named VPN<br />

ExcludeVPN Does not discover any VRFs within the named VPN<br />

ExcludeVRF Does not discover the specified VRF<br />

VRF names are case sensitive and an asterisk (*) represents a wildcard for any VRF or VPN name when<br />

used in the name part of the configuration. The wildcard can be used with any of the above options.<br />

333


Chapter 11: Configuring an MPLS <strong>Discovery</strong><br />

334<br />

Scoping by VPN name only works if the VRF names configured on the devices discovered by the MPLS<br />

agents are in the Cisco-recommended VRF format. A VRF is named based on the VPN or VPNs serviced,<br />

and the topology type. The format for the VRF names are as follows:<br />

V [number assigned to make the VRF name unique]: [VPN_name]<br />

For example, in a VPN called precision, a VRF for a hub edge router would be:<br />

V1:precision<br />

A VRF for a spoke edge router in the precision VPN would be:<br />

V1:precision-s<br />

A VRF for an extranet VPN topology in the precision VPN would be:<br />

V1:precision-etc<br />

The following example scopes a discovery in a system where there are four VRFs: V65:<strong>Precision</strong>-etc,<br />

V65:<strong>Precision</strong>-s, V65:<strong>Precision</strong>, and V44:AcmeSheds.<br />

//2 VRFs are to be included<br />

//<br />

DiscoAgent<strong>Discovery</strong>Scoping<br />

{<br />

IncludeVRF = “V65:<strong>Precision</strong>-etc”;<br />

IncludeVRF = “V44:AcmeSheds”;<br />

}<br />

//All 4 VRFs are to be included<br />

//<br />

DiscoAgent<strong>Discovery</strong>Scoping<br />

{<br />

IncludeVPN = “<strong>Precision</strong>”;<br />

IncludeVRF = “V44:AcmeSheds”;<br />

}<br />

Precedence<br />

The order of precedence for Exclude and Include within the DiscoAgent<strong>Discovery</strong>Scoping<br />

section is as follows:<br />

1. Exclude<br />

2. Include<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Advanced MPLS <strong>Discovery</strong><br />

The order of precedence for VRF and VPN within the DiscoAgent<strong>Discovery</strong>Scoping is as<br />

follows:<br />

1. VRF<br />

2. VPN<br />

For example, if you include a VPN, but another filter excludes a VRF in your VPN, then the VRF is<br />

excluded. If a VPN is excluded, but another filter includes a VRF within that VPN, then the VRF is<br />

included.<br />

Specifying a VPN Name<br />

The MPLSAddVPNNames stitcher extracts and constructs a VPN name from the list of paths discovered<br />

by the Path Tracing stitchers. The MPLSAddVPNNames stitcher can then add the VPN name to the device<br />

interfaces that fall under the paths belonging to the VPN.<br />

If you choose not to use the Cisco VRF naming convention, you can configure your own VPN naming<br />

convention by making the appropriate inserts into MPLSAddVPNNames.stch located in<br />

NCHOME/precision/disco/stitchers/. A good understanding of the stitcher language is<br />

essential before configuring the MPLSAddVPNNames.stch file. Detailed information about the stitcher<br />

language can be found in Appendix C: Stitchers and Stitcher Language on page 517.<br />

The following example shows where to modify the VPN name in the MPLSAddVPNNames.stch file,<br />

located in NCHOME/precision/disco/stitchers.<br />

//VPN Name Assignment<br />

//<br />

//Currently assigns the VRF name as the VPN Name if no VPN name<br />

//has been discovered by the agent, i.e., if the VRF name was not in<br />

//the Cisco format.<br />

//<br />

vpnName = eval(text, ‘&m_VPNName’);<br />

if (vpnName == NULL)<br />

{<br />

vpnName = vrfName; //VPN=VRF, customize as required.<br />

}<br />

Note: NCHOME is the environment variable that contains the path to the <strong>Netcool</strong> Suite home directory. For<br />

information on how this environment variable varies with platform, see Operating System Considerations on<br />

page 10.<br />

335


Chapter 11: Configuring an MPLS <strong>Discovery</strong><br />

Fine Tuning Label Data <strong>Discovery</strong><br />

336<br />

By default, the choice of whether or not the MPLS agents retrieve MPLS label data is determined by the<br />

chosen MPLS discovery method, as follows:<br />

If you choose RT-based discovery, then the MPLS agents do not retrieve label data.<br />

If you choose LSP-based discovery, then the MPLS agents retrieve label data.<br />

The MPLS discovery methods are described in Configuring MPLS <strong>Discovery</strong> Method on page 330.<br />

If you choose an RT-based discovery but you nevertheless wish to retrieve label data, then it is possible to<br />

do this manually by means of the following insert in the DiscoAgent<strong>Discovery</strong>Scoping section of<br />

the appropriate MPLS.agnt file:<br />

DiscoAgent<strong>Discovery</strong>Scoping<br />

{<br />

GetMPLSLabelData = 1;<br />

}<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


11.4 Visualizing MPLS Topology<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Visualizing MPLS Topology<br />

Visualization options for your MPLS discovery vary depending on whether you are discovering Layer 3<br />

VPNs or enhanced Layer 2 VPNs.<br />

Layer 3 VPNs: For Layer 3 VPNs, <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> provides by default both an edge view and a<br />

core view of your MPLS core network.<br />

You can switch from the edge view to the core view by double-clicking on the MPLS cloud in<br />

Topoviz.<br />

Enhanced Layer 2 VPNs: For enhanced Layer 2 VPNs, <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> only provides an edge<br />

view of your MPLS core network. <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> displays an enhanced Layer 2 VPN as a<br />

collection of point-to-point psuedowires.<br />

This section provides examples of topology maps of MPLS core networks. The aim is to show how VPN<br />

and core views are displayed using Topoviz once an MPLS discovery is complete. For full information on<br />

how to partition an MPLS core network to display multiple VPNs on that MPLS core, see the<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Visualization <strong>Guide</strong>.<br />

Figure 81 provides an example of a Layer 3 edge view displayed using Topoviz Network Views.<br />

Figure 81: Edge View Showing the MPLS Core Network as a Cloud<br />

This corresponds to the edge view shown in Figure 80 Edge View on page 327.<br />

337


Chapter 11: Configuring an MPLS <strong>Discovery</strong><br />

338<br />

Double-click on the MPLS CORE icon shown in Figure 81 to display a core view, as shown in Figure 82<br />

on page 338.<br />

Figure 82: Core View Showing the P Devices Within the MPLS Core<br />

This corresponds to the core view shown in Figure 79 Core View on page 327.<br />

Note: Topoviz does not display VRF information for a given PE router within a VPN.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Visualizing MPLS Topology<br />

Figure 83 shows an example of a Layer 2 edge view displayed using Topoviz Network Views. This screenshot<br />

also shows the partitioning of an MPLS core network into Layer 2 and Layer 3 VPNs.<br />

Figure 83: Edge View of an Enhanced Layer 2 VPN<br />

339


Chapter 11: Configuring an MPLS <strong>Discovery</strong><br />

340<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


12. Managing_NAT_environments.fm July 6, 2005<br />

Chapter 12: Managing NAT Environments<br />

This chapter describes how <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> can discover and manage Network Address Translation<br />

(NAT) environments.<br />

This chapter contains the following sections:<br />

Network Address Translation (NAT) on page 342<br />

Configuring a NAT <strong>Discovery</strong> on page 346<br />

Adapting the Containment Model for Use with NAT on page 352<br />

Viewing NAT Environments Using Topoviz Network Views on page 353<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 341


Chapter 12: Managing NAT Environments<br />

12.1 Network Address Translation (NAT)<br />

342<br />

This chapter introduces Network Address Translation and explains how the <strong>Precision</strong> Server can discover<br />

and manage NAT environments.<br />

Overview of NAT<br />

In order for any computer to access information on the Internet, it must have a unique <strong>IP</strong> address. However,<br />

the number of available <strong>IP</strong> addresses in the current format (a 32-bit number) is not enough to meet the<br />

growth in demand for access to the Internet. NAT was designed as a short term solution to the problem of<br />

address depletion. NAT provides a method of connecting multiple computers to an <strong>IP</strong> network, such as the<br />

Internet, using either a single unique public <strong>IP</strong> address, or a small number of unique public <strong>IP</strong> addresses.<br />

NAT is commonly used in corporations, where a NAT router sits at the edge of the private network (referred<br />

to in this context as a stub domain) and translates the <strong>IP</strong> addresses attached to packets entering and leaving<br />

the stub domain. The NAT router, which effectively acts as an agent between the Internet and the local<br />

network, maintains a list of the mappings between public and private addresses.<br />

Note: A stub domain is a local network using internal <strong>IP</strong> addresses. The network can use unregistered,<br />

private, <strong>IP</strong> addresses for internal communication—these addresses must be translated into unique, public,<br />

<strong>IP</strong> addresses when communicating outside the network. The addresses used internally by a given stub<br />

domain can also be used internally by any other stub domain.<br />

For example, when a computer within the private network requests information from the public network,<br />

the NAT router automatically translates the private address of that computer into the public address of the<br />

domain, which is the only address that is transmitted to the public network. When the requested<br />

information is returned, the NAT router consults its internal list of public to private address mappings in<br />

order to forward the information to the appropriate computer.<br />

There are a number of different ways to configure a NAT environment. The following descriptions detail<br />

the most common types of NAT environment.<br />

Static NAT Environments<br />

In a static NAT environment, the NAT router maps private and public addresses on a one-to-one basis, that<br />

is, the private address of a given device always maps to the same public address. This type of NAT<br />

environment is commonly used for devices that need to be accessible to the public network.<br />

Dynamic NAT Environments<br />

In a dynamic NAT environment, the NAT router dynamically allocates public <strong>IP</strong> addresses (from a group<br />

of addresses) to devices on the private network that wish to communicate with the public network.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Network Address Translation (NAT)<br />

A variation on dynamic NAT, overloading or PAT (Port Address Translation), maps multiple private<br />

addresses to the same public address using different ports.<br />

Private Address Ranges<br />

The Internet Assigned Numbers Authority (IANA) has assigned the following address ranges to be used by<br />

private networks:<br />

Class A: 10.0.0.0 to 10.255.255.255<br />

Class B: 172.16.0.0 to 172.31.255.255<br />

Class C: 192.168.0.0 to 192.168.255.255<br />

An <strong>IP</strong> address within these ranges is therefore considered non-routable, as it is not unique. Any private<br />

network that needs to use <strong>IP</strong> addresses internally can use any address within these ranges without any<br />

coordination with IANA or an Internet registry. Addresses within this private address space are only unique<br />

within a given private network.<br />

All addresses outside these ranges are considered public.<br />

The <strong>Precision</strong> Server and NAT Environments<br />

The following section provides an overview of how <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> manages NAT environments, and<br />

explains some of the restrictions on the types of NAT environment that are currently supported.<br />

The <strong>Precision</strong> Server can interrogate known, supported NAT gateways to obtain a list of public to private<br />

<strong>IP</strong> address mappings of devices in NAT domains. Alternatively, these mappings can be supplied manually.<br />

The <strong>Precision</strong> Server can then discover those devices behind the NAT gateways that have a public <strong>IP</strong> address.<br />

Each NAT domain has a unique address space identifier. Each device in a NAT domain has the appropriate<br />

address space identifier appended to its record. This enables the devices to be managed (for example, polled)<br />

appropriately.<br />

Restrictions on Using the <strong>Precision</strong> Server to Manage NAT Environments<br />

The following restrictions currently apply to the management of NAT environments using the <strong>Precision</strong><br />

Server:<br />

The <strong>Precision</strong> Server can discover one or more NAT environments, but they must all be using static<br />

NAT address mapping.<br />

The <strong>Precision</strong> Server can discover devices in multiple NAT domains, regardless of whether the private<br />

<strong>IP</strong> addresses of the devices are duplicated in other NAT domains, as long as the public <strong>IP</strong> address of<br />

each device in each domain is unique.<br />

343


Chapter 12: Managing NAT Environments<br />

344<br />

Devices within a NAT domain that have only private <strong>IP</strong> addresses cannot be discovered or managed<br />

by the <strong>Precision</strong> Server.<br />

The discovery process must discover the NAT environment from outside, that is, from the public<br />

network.<br />

Virtual <strong>IP</strong> addresses such as HSRP (Hot Standby Routing Protocol) addresses cannot be mapped.<br />

The real physical address must be used.<br />

The following must be supplied before the discovery is run:<br />

– The addresses of all supported NAT gateways.<br />

– The NAT gateway translations must be discovered. This can be done either automatically or by<br />

supplying the NATTextFileAgent discovery agent with a flat file of public to private <strong>IP</strong> address<br />

mappings.<br />

Differences in a NAT <strong>Discovery</strong> Process Flow<br />

This section describes how the process flow of a NAT discovery differs from the process flow of a normal<br />

discovery.<br />

For more information on the process flow of a normal discovery, see An Overview of the <strong>Discovery</strong> Process on<br />

page 25.<br />

Prerequisites<br />

There are extra prerequisites for running a NAT-enabled discovery. See Configuring a NAT <strong>Discovery</strong> on<br />

page 346.<br />

Downloading Translation Information<br />

NAT translation information is downloaded by the NAT agents into the database table<br />

translations.NATTemp before the finders process any other entities.<br />

All other discovered devices are inserted into the finders.pending table while the<br />

BuildNATTranslation.stch stitcher creates a global translation table and stores it in the database<br />

table translations.NAT.<br />

The finders, helpers, and other components that need to access devices can use this table to look up the<br />

address of any device behind a NAT gateway.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Creating the Topology<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Network Address Translation (NAT)<br />

When the topology is created, two stitchers, AddBaseNATTags.stch and AddNATTags.stch, add<br />

NAT information to the topology record of each device in a NAT domain.<br />

Table 89: NAT Information Added to a Device Record<br />

Column Description<br />

ExtraInfo->m_AddressSpace The name of the NAT address space to which the device belongs. This<br />

value is set in the translations.NATAddressSpaceIds table.<br />

If the discovery is not using NAT, or if the device is in the public<br />

domain, this value is NULL.<br />

ExtraInfo->m_NATTranslated A boolean integer indicating whether the device lies behind a NAT<br />

gateway.<br />

ExtraInfo->m_InsideLocalAddress The private address of the device.<br />

ExtraInfo->m_OutsideGlobalAddress The public address of the device.<br />

345


Chapter 12: Managing NAT Environments<br />

12.2 Configuring a NAT <strong>Discovery</strong><br />

346<br />

This section describes how to set up a NAT discovery. Follow the procedures in this section to:<br />

Enable NAT translation<br />

Define address spaces for each domain<br />

Configure trap handling<br />

Run the correct NAT agent<br />

Enabling NAT Translation<br />

Edit NCHOME/etc/precision/DiscoSchema.cfg to create or amend an insert into<br />

disco.NATStatus to set m_UsingNAT to 1 and m_NATStatus to 0. This sets the discovery system<br />

to use NAT translation. The schemas of all databases defined in DiscoSchema.cfg are described in<br />

Appendix A: The <strong>Discovery</strong> Databases on page 423. The completed insert must resemble the following:<br />

insert into disco.NATStatus<br />

(<br />

m_UsingNAT,<br />

m_NATStatus<br />

)<br />

values<br />

(<br />

1,<br />

0<br />

);<br />

Note: NCHOME is the environment variable that contains the path to the <strong>Netcool</strong> Suite home directory. For<br />

information on how this environment variable varies with platform, see Operating System Considerations on<br />

page 10.<br />

Defining Address Spaces for Each Domain<br />

Edit DiscoSchema.cfg to create or amend an insert into<br />

translations.NATAddressSpaceIds to specify the <strong>IP</strong> address of your NAT gateways and the<br />

address space identifier you wish to use for each associated NAT domain. The following example insert<br />

configures the discovery system for two NAT gateways.<br />

insert into translations.NATAddressSpaceIds<br />

(<br />

m_NATGateway<strong>IP</strong>,<br />

m_AddressSpaceId<br />

)<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


values<br />

(<br />

);<br />

'172.16.1.112',<br />

'NATDomain1'<br />

insert into translations.NATAddressSpaceIds<br />

(<br />

m_NATGateway<strong>IP</strong>,<br />

m_AddressSpaceId<br />

)<br />

values<br />

(<br />

'172.16.1.104',<br />

'NATDomain2'<br />

);<br />

Configuring Trap Handling<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a NAT <strong>Discovery</strong><br />

When the <strong>Precision</strong> Server receives a trap, either using the Trap finder or the Trap Polling agent, it must<br />

retrieve the trap source address. You can configure the <strong>Precision</strong> Server to retrieve the trap source address<br />

from either the payload (that is, the private NAT address) or the <strong>IP</strong> header (that is, the public NAT address)<br />

of the trap.<br />

If you are configuring the Trap finder within a NAT environment, you must configure the <strong>Precision</strong> Server<br />

to retrieve the trap source address from the <strong>IP</strong> header. The reason for this is that the private NAT address in<br />

the payload is unique within the NAT address space but may not be unique outside of the NAT address<br />

space. However, the <strong>IP</strong> address in the header is unique.<br />

The option to retrieve the trap source address from the payload applies when a trap is redirected through a<br />

third party device. This invalidates the address held in the <strong>IP</strong> header. However, in a NAT environment, it<br />

is not possible to use the trap source address from the payload because this address may not be unique.<br />

Configuring the Trap Finder<br />

In order to configure the Trap finder, you must modify the insert into the<br />

trapFinder.configuration database table in the DiscoTrapFinderSchema.cfg<br />

configuration file.<br />

Inserting a value of 1 (the default setting) into the<br />

trapFinder.configuration.m_SourceByPayload column configures the Trap finder<br />

to attempt to retrieve the trap source address from the trap payload. If there is no address in the<br />

payload, the Trap finder uses the header source address instead.<br />

Inserting a value of 0 into the trapFinder.configuration.m_SourceByPayload<br />

column configures the Trap finder to retrieve the trap source address from the header.<br />

347


Chapter 12: Managing NAT Environments<br />

348<br />

The following example insert shows how you might configure the Trap finder.<br />

insert into trapFinder.configuration<br />

(<br />

m_NumThreads, m_TrapPort, m_SourceByPayload<br />

)<br />

values<br />

(<br />

1, 162, 1<br />

);<br />

The above example insert configures the Trap finder to:<br />

Use 1 thread.<br />

Listen for traps on port 162.<br />

Attempt to retrieve the trap source address from the trap payload.<br />

Configuring the Trap Polling Agent<br />

If you have purchased the RCA and monitoring package, it is also necessary to configure the trap polling<br />

agent to take source addresses from payloads. See the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Monitoring and RCA <strong>Guide</strong> for<br />

more information about MONITOR and the polling agents.<br />

Running the Appropriate Agent<br />

If you are running a NetScreen ® Firewall or a Cisco ® Router as a NAT gateway, you must use either the<br />

CiscoNATTelnet agent or the NATNetScreen agent.<br />

If you are using a NAT gateway other than a NetScreen Firewall or a Cisco Router, you must use the Perl<br />

agent NATTextFileAgent.pl.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Running the NAT Gateway Agents<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a NAT <strong>Discovery</strong><br />

The CiscoNATTelnet and NATNetScreen agents connect directly to the NAT gateways in order to<br />

download the address mappings. Before running these agents, you must have already enabled NAT<br />

translation (see Enabling NAT Translation on page 346) and configured trap handling (see Configuring Trap<br />

Handling on page 347). Perform the following steps to configure and run the agents:<br />

1. Enable the agents. There is an insert into the disco.agents table in the DiscoAgents.cfg<br />

configuration file for every installed discovery agent. In order to activate an agent, you must alter the<br />

insert so that the m_Valid column for that agent is set to 1. In order to deactivate an agent, ensure<br />

that m_Valid=0.<br />

Note: You can also activate and deactivate the agents using the <strong>Discovery</strong> <strong>Configuration</strong> Tool, as<br />

described in Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI on page 85.<br />

The following example insert activates the CiscoNATTelnet agent.<br />

insert into disco.agents<br />

(<br />

m_AgentName, m_Valid, m_AgentClass, m_IsIndirect, m_Precedence,<br />

m_DebugLevel, m_LogFile<br />

)<br />

values<br />

(<br />

'CiscoNATTelnet', 1, 8, 0, 2, 4,<br />

"NCHOME/log/precision/CiscoNatTelnet.log"<br />

);<br />

2. Run a discovery as normal, as described in Chapter 6: Network <strong>Discovery</strong> from the Command Line on<br />

page 175.<br />

349


Chapter 12: Managing NAT Environments<br />

350<br />

Running the NATTextFileAgent Agent<br />

This agent does not download its information from the NAT gateways, but reads a list of private to public<br />

<strong>IP</strong> address mappings from a flat file. Before running the NATTextFileAgent agent, you must have already<br />

enabled NAT translation (see page 346) and configured trap handling (see Configuring Trap Handling on<br />

page 347). Perform the following steps to configure and run the agent:<br />

1. Ensure you have installed the Perl API. All Perl agents require the API in order to run. The API is<br />

installed by default in <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong>.<br />

To check whether the API is installed, check that the following file exists:<br />

NCHOME/precision/bin/ncp_perl<br />

If the file is listed, then this means that the Perl API is installed. For more information on installing<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>, see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Installation and Deployment <strong>Guide</strong>.<br />

2. Create a NAT mapping file to be read by the agent that contains the public to private address<br />

mappings. Your NAT mapping file must be in a format that can be read by the agent, that is, the<br />

values must be valid <strong>IP</strong> addresses specified in columns separated by tabs.<br />

By default, the agent uses the file NCHOME/etc/precision/NATTranslations.txt. If<br />

you wish to create your own mappings, then you must back up and edit this default file. To make the<br />

agent use the non-default NAT mapping file, edit the following line in<br />

NCHOME/precision/disco/agents/Perlagents/NATTextFileAgent.pl:<br />

my $natFileName = "$ENV{NCHOME}/etc/precision/NATTranslations.txt";<br />

3. The NAT mapping file contains the following columns:<br />

– The <strong>IP</strong> address of the NAT gateway of the NAT domain to which the device belongs. You must<br />

specify mappings for all NAT gateways in the same file.<br />

– The outside global address of the device, that is, the public address of the device.<br />

– The inside local address of the device, that is, the private address of the device.<br />

The following example shows a NAT mapping file for two gateways having <strong>IP</strong> addresses of<br />

1.2.3.4 and 1.2.3.9 respectively.<br />

// NATGateway<strong>IP</strong> Public<strong>IP</strong> Private<strong>IP</strong><br />

1.2.3.4 2.3.4.5 10.10.1.1<br />

1.2.3.4 2.3.4.6 10.10.1.2<br />

1.2.3.9 2.<strong>3.6</strong>.1 10.10.1.1<br />

1.2.3.9 2.<strong>3.6</strong>.2 10.10.1.2<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring a NAT <strong>Discovery</strong><br />

Note: The public <strong>IP</strong> address of a particular gateway translation is not necessarily the same as the public<br />

address from the point of view of the management station. It is the <strong>IP</strong> address that the Gateway<br />

retrieving from one port translates and places on another port. This difference is important to note<br />

when you have chained gateways where an <strong>IP</strong> address can be translated multiple times. The public <strong>IP</strong><br />

is effectively the <strong>IP</strong> address 'closer' to the management domain.<br />

4. Enable the agent. There is an insert into the disco.agents table in the DiscoAgents.cfg<br />

configuration file for every installed discovery agent. In order to activate an agent, alter the insert so<br />

that the m_Valid column for that agent is set to 1. In order to deactivate an agent, ensure that<br />

m_Valid=0.<br />

Note: You can also activate and deactivate agents using the <strong>Discovery</strong> <strong>Configuration</strong> Tool, as<br />

described in Chapter 4: Network <strong>Discovery</strong> Using the Network <strong>Discovery</strong> GUI on page 85.<br />

The following example insert activates the NATTextFileAgent agent.<br />

insert into disco.agents<br />

(<br />

m_AgentName, m_Valid, m_AgentClass, m_IsIndirect, m_Precedence, m_IsPerl<br />

)<br />

values<br />

(<br />

'NATTextFileAgent', 0, 8, 0, 2, 1<br />

);<br />

5. Ensure that the NATTimer.stch stitcher has been configured to trigger a rediscovery against the<br />

NAT gateways. By default, the NATTimer.stch stitcher executes every hour. You can alter this<br />

interval by locating the following line in the stitcher file and changing the integer value:<br />

ActOnTimedTrigger( ( m_Interval ) values ( 1 ) ; ) ;<br />

6. More information about stitcher syntax and the ActOnTimedTrigger stitcher trigger can be<br />

found in Appendix C: Stitchers and Stitcher Language on page 517.<br />

7. Run a discovery as normal, as described in Chapter 6: Network <strong>Discovery</strong> from the Command Line on<br />

page 175.<br />

351


Chapter 12: Managing NAT Environments<br />

12.3 Adapting the Containment Model for Use with NAT<br />

352<br />

The NATAddressSpaceContainers.stch stitcher creates virtual objects for each address space<br />

that contains the entities within that address space. This stitcher is not on by default. You can activate this<br />

stitcher by uncommenting the following line in the file<br />

NCHOME/precision/disco/stitchers/CreateScratchTopology.stch:<br />

// ExecuteStitcher("NATAddressSpaceContainers");<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Viewing NAT Environments Using Topoviz Network Views<br />

12.4 Viewing NAT Environments Using Topoviz Network<br />

Views<br />

Using Topoviz network views you can partition Business Views on the values of any column in the topology<br />

record of an entity. For example, you could configure partitions on the field<br />

ExtraInfo->m_AddressSpace. This field contains an address space identifier<br />

NATAddressSpace, defined in the Topoviz MySQL database table interfaces. For more<br />

information on defining address spaces, see Enabling NAT Translation on page 346.<br />

For instructions on all aspects of using the Topoviz network views, including how to partition Business<br />

Views, see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Topology Visualization <strong>Guide</strong>.<br />

353


Chapter 12: Managing NAT Environments<br />

354<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


13. MODEL.fm July 5, 2005<br />

Chapter 13: Accessing Topology Data in<br />

MODEL<br />

This chapter describes MODEL, the component responsible for the management, storage and distribution<br />

of the discovered network topology.<br />

This chapter contains the following sections:<br />

About MODEL on page 356<br />

Starting MODEL on page 357<br />

About the Containment Model on page 359<br />

Accessing the Discovered Topology on page 363<br />

Reinstantiating the Containment Model on page 368<br />

Databases of MODEL on page 372<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 355


Chapter 13: Accessing Topology Data in MODEL<br />

13.1 About MODEL<br />

356<br />

MODEL (ncp_model), the the topology manager and repository, is the component responsible for<br />

managing and storing the network topology. MODEL also acts as a server for the network topology,<br />

distributing it to other <strong>Precision</strong> Server components on demand. For example, the MySQL database used<br />

by Topoviz is populated with topology data from MODEL. AMOS (part of the RCA and Monitoring<br />

package) also uses the topology data from MODEL to perform RCA (Root Cause Analysis).<br />

After the discovery process has completed, the stitchers resolve the connectivity information to create the<br />

Scratch Topology and send it to MODEL.<br />

Entries in the Scratch Topology are only sent to MODEL if they pass a filter condition, known as the<br />

instantiate filter. You can specify an instantiation filter by editing the DiscoScope.cfg, appending an<br />

OQL insert into the scope.instantiateFilter table, as described in The instantiateFilter Table on<br />

page 445. If no filter is specified, all discovered devices are instantiated.<br />

During the transition of the discovered network topology from DISCO to MODEL, the devices are<br />

instantiated as instances of various classes as defined by the AOCs managed by CLASS.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


13.2 Starting MODEL<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Starting MODEL<br />

Micromuse recommends that CTRL, the domain process controller, is configured to launch and manage<br />

MODEL with STORE and CLASS specified as dependencies of MODEL.<br />

MODEL can also be started manually with the following command line; optional arguments are shown<br />

enclosed in square brackets.<br />

ncp_model –domain DOMAIN_NAME [ -cachesize SIZE_IN_MB ] [ -cachepercent<br />

PERCENTAGE_OF_CACHE_IN_MEMORY ] [ -debug DEBUG ] [ -help ] [ -latency LATENCY ] [<br />

-version ]<br />

Table 90: Explanation of Command Line Options<br />

Option Explanation<br />

-cachesize SIZE_IN_MB Specifies the size of the cache in megabytes (MB).<br />

-cachepercent<br />

PERCENTAGE_OF_CACHE_IN_MEMORY<br />

Enables you to specify the ratio of the cache that is resident in memory<br />

to the cache that is resident on the hard disk.<br />

The ratio that you specify depends on the amount of memory that<br />

exists on the host machine and the number of processes it is running.<br />

The default value is 100% cache.<br />

-domain DOMAIN_NAME The name of the domain under which to run MODEL.<br />

-debug DEBUG The level of debugging output (1-4, where 4 represents the most<br />

detailed output).<br />

-help Displays the command line options. Does not start the component<br />

even if used in conjunction with other arguments.<br />

-latency LATENCY The maximum time in milliseconds (ms) that MODEL waits to connect<br />

to another <strong>Precision</strong> Server process by means of the messaging bus.<br />

This option is useful for large and busy networks where the default<br />

settings can cause processes to assume that there is a problem when<br />

in fact the communication delay is a result of network traffic.<br />

-version Displays the version number of the component. Does not start the<br />

component even if used in conjunction with other arguments.<br />

The -cachesize and -cachepercent options can be used to reduce the memory required when the<br />

process responds to OQL queries that result in large numbers of records being returned.<br />

When a value for -cachesize is specified, a fixed size of records is cached in core memory with the<br />

remaining records being flushed to disk. When a value for -cachepercent is specified, that percentage<br />

of the data is cached in core memory with the remainder being flushed to disk. These command line options<br />

are not intended to be used for permanent data storage as the cache is cleared when the process exits.<br />

357


Chapter 13: Accessing Topology Data in MODEL<br />

Prerequisites for Running MODEL<br />

358<br />

The following are the prerequisites for running the MODEL component:<br />

MODEL must have access to a network topology, either because DISCO has completed a successful<br />

discovery and passed the topology to MODEL, or because there is a topology cache file in the<br />

NCHOME/var/precision directory (output from STORE as a result of a previous execution of<br />

MODEL).<br />

Note: NCHOME is the environment variable that contains the path to the <strong>Netcool</strong> Suite home<br />

directory. For information on how this environment variable varies with platform, see Operating System<br />

Considerations on page 10.<br />

It is good practice to have STORE, the persistent storage engine, running.<br />

It is strongly recommended that CLASS is running and ready before starting MODEL.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


13.3 About the Containment Model<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

About the Containment Model<br />

A key principle used by the network model is containment. A container holds other objects. You can put any<br />

object within a container and even mix different objects within the same container.<br />

Containers are objects that can ‘hold’ both elements and other containers. Elements and containers can<br />

represent logical or physical entities.<br />

Applying the Containment Principle<br />

The containment model used by the <strong>Precision</strong> Server can reflect the real world topology of the network that<br />

is being modelled, in a physical, logical or business-oriented sense.<br />

The example physical hierarchy shown in Figure 84 shows that a chassis can contain network interface cards,<br />

which can themselves contain individual ports.<br />

Figure 84: Modelling the Network Physically<br />

359


Chapter 13: Accessing Topology Data in MODEL<br />

360<br />

The example logical hierarchy shown in Figure 85 shows that a network entity can contain Virtual Local<br />

Area Networks (VLANs), and the VLANs can themselves contain ports.<br />

Figure 85: Modelling the Network Logically<br />

Figure 86 shows how the <strong>Precision</strong> Server also uses VLAN objects to model containment. VLAN objects are<br />

created by the stitchers. They contain all the interfaces that exist on each VLAN.<br />

Figure 86: Modelling the Network Using Containment<br />

VLAN Naming<br />

The <strong>Precision</strong> Server uses a naming convention to identify the entity name, card and port numbers of<br />

specific ports, in the format EntityName [ card [ port ] ].<br />

For example, port 12 on card 1 of chassis A would be identified as A[ 1 [ 12 ] ].<br />

VLAN names can also be modified to reflect the business context in which a given VLAN is used. For<br />

example, you could rename VLAN 1, and 2 above to Sales and Marketing using stitchers.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


VLAN Trunking<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

About the Containment Model<br />

When traffic from different VLANs is passed along a single trunk link between switches, this is represented<br />

in the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> containment model as shown in Figure 87.<br />

1 2<br />

If a port is being used for a trunk link, it contains logical sub-ports. The properties of the ports and sub-ports<br />

shown in Figure 87 are explained below:<br />

1. A sub-port connecting VLAN 2 on the switch to VLAN 2 on another switch. Sub-ports are contained<br />

by trunk ports.<br />

2. A sub-port connecting VLAN 3 on the switch to VLAN 3 on another switch. Sub-ports have no<br />

upward connections to their containing trunk port.<br />

3. A "normal" port.<br />

Dependencies<br />

3<br />

Figure 87: Logical Sub-Ports Contained within a Trunk Port<br />

Dependencies can be defined by the containment model. A container can be dependent upon the objects it<br />

contains. For example, VLAN1 may be dependent upon everything inside the VLAN1 container (that is,<br />

port 1, 2, 12, and 40).<br />

Since the <strong>Precision</strong> Server models the network using the concept of containment, these dependencies can be<br />

represented in the network topology, and applications that extend the functionality of the <strong>Precision</strong> Server<br />

can then consider these dependencies in their calculations. AMOS, for example, can consider dependencies<br />

when performing root cause analysis of network faults.<br />

Note: When one entity in a system cannot meaningfully exist without another entity it is said to be<br />

dependent.<br />

361


Chapter 13: Accessing Topology Data in MODEL<br />

Generating the Containment Model<br />

362<br />

The containment model is generated at the end of the discovery process when the network topology is<br />

created. The default containment model represents both physical and logical containment:<br />

The physical containment model enables you to perform device management down to the port level.<br />

The logical containment model shows how objects are contained within logical containers that do not<br />

necessarily exist in the physical sense. One example is a VLAN container like the one shown in<br />

Figure 86 on page 360, which is a logical grouping of devices, cards, and ports that are not necessarily<br />

physically connected together or in the same location. The default logical containment model is based<br />

on VLAN containment.<br />

Altering the Containment Model<br />

The containment model is fully configurable, although this is an advanced feature of the discovery process.<br />

To generate a custom containment model, you must either modify the existing stitchers, or write a new<br />

stitcher and configure the existing stitchers to execute the new stitcher during the creation of the network<br />

topology.<br />

Two example stitchers, ExampleContainment1.stch and<br />

ExampleContainment2.stch are supplied to assist you in modifying the containment model.<br />

These stitchers can be executed by removing the comments before the ExecuteStitcher();<br />

statements at the end of the CreateScratchTopology.stch stitcher.<br />

A full syntax definition of the stitcher language can be found in Appendix C: Stitchers and Stitcher<br />

Language on page 517.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


13.4 Accessing the Discovered Topology<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Accessing the Discovered Topology<br />

As soon as the discovery process has completed, the stitchers transfer the topology to MODEL. Once<br />

MODEL has received the topology, you can use the OQL Service Provider to interrogate the MODEL<br />

databases and query the topology.<br />

Prerequisites for Accessing the Network Topology Model<br />

Before you can interrogate the network topology:<br />

AUTH must be running.<br />

A topology must have been passed to MODEL, either because DISCO has completed a discovery and<br />

sent the topology to MODEL, or because MODEL has downloaded a cached topology from<br />

STORE.<br />

Querying the MODEL Databases<br />

The MODEL databases are described in more detail at the end of this chapter. To query the MODEL<br />

databases, login to the OQL Service Provider using a command line similar to the following. Substitute your<br />

domain name and username where NCOMS and admin are specified, and enter your password at the<br />

prompt.<br />

ncp_oql -domain NCOMS -service Model -username admin<br />

ncp_oql ( <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> OQL Interface )<br />

Copyright (C) Micromuse Ltd., 1997-2003. All Rights Reserved.<br />

Password:<br />

|phoenix:1.><br />

The Master Topology<br />

This section describes the tables of the master database of MODEL that relate to the containment model.<br />

The master.entityByName table<br />

The records in the master.entityByName table are in a format similar to the following.<br />

|phoenix:1.> select * from master.entityByName;<br />

|phoenix:2.> go<br />

........................................<br />

{<br />

ObjectId=802;<br />

EntityName='10.10.2.198';<br />

Address=['','','10.10.2.198',''];<br />

Description='Cisco Systems WS-C6509 Cisco Catalyst Operating System<br />

Software, Version 5.3(2)CSX Copyright (c) 1995-1999 by Cisco Systems';<br />

363


Chapter 13: Accessing Topology Data in MODEL<br />

364<br />

EntityType=1;<br />

ClassName='MainNode';<br />

EntityOID='1.<strong>3.6</strong>.1.4.1.9.5.44';<br />

Contains=['10.10.2.198[ 0 [ 2 ] ]','10.10.2.198[ 1 [ 1 ]<br />

]','10.10.2.198[ 1 [ 2 ] ]','10.10.2.198[ 0 [ 1 ] ]'<br />

IsActive=1;<br />

CreateTime=982194922;<br />

ChangeTime=982194922;<br />

ActionType=0;<br />

LingerTime=3;<br />

}<br />

.....<br />

.....<br />

{<br />

ObjectId=1002;<br />

EntityName='10.10.63.194[ 0 [ 1 ] ]';<br />

Address=['','00:02:4A:7E:A4:54','10.10.130.248',''];<br />

EntityType=2;<br />

ClassName='Interface';<br />

EntityOID='1.<strong>3.6</strong>.1.4.1.9.1.108';<br />

UpwardConnections=['10.10.63.194'];<br />

IsActive=1;<br />

CreateTime=982194928;<br />

ChangeTime=982194928;<br />

ActionType=0;<br />

LingerTime=3;<br />

}<br />

( 955 record(s) : Transaction complete )<br />

|phoenix:1.><br />

The columns in the master.entityByName table that relate to containment and connectivity are:<br />

The RelatedTo column, which lists all the entities that are connected to the network entity.<br />

The Contains column, which lists all the entities found to be contained within the current<br />

network entity.<br />

The UpwardConnections column, which lists all the containers that the entity is contained<br />

within.<br />

The Address column lists all the addresses that the current entity is known by. It would typically<br />

contain the MAC address and the <strong>IP</strong> address, in list items (1) and (2). List item numbering<br />

commences from (0).<br />

The master.entityByNeighbor Table<br />

The records in the master.entityByNeighbor table are in a format similar to the following.<br />

|phoenix:1.> select * from master.entityByNeighbor;<br />

|phoenix:2.> go<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


..........................................<br />

{<br />

LeftId=974;<br />

LeftName='b041d-2-7513r2.Kazeem.San.COM[ 0 [ 13 ] ]';<br />

RightName='10.10.2.224[ 0 [ 5 ] ]';<br />

Speed=0;<br />

Protocol=0;<br />

RelType=0;<br />

Duplex=0;<br />

}<br />

.....<br />

.....<br />

{<br />

LeftId=1001;<br />

LeftName='10.10.63.194[ 0 [ 3 ] ]';<br />

RightName='10.10.2.247[ 0 [ 3 ] ]';<br />

Speed=0;<br />

Protocol=0;<br />

RelType=0;<br />

Duplex=0;<br />

}<br />

( 1701 record(s) : Transaction complete )<br />

|phoenix:1.><br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Accessing the Discovered Topology<br />

The columns in the master.entityByNeighbor table that relate to containment are:<br />

The LeftName column, which refers to the name of the network entity on the left hand side of the<br />

connection. The interpretation of the display format is identical to the EntityName column of the<br />

master.containers table.<br />

The RightName column, which refers to the name of the network entity on the right hand side of<br />

the connection. The interpretation of the display format is identical to the EntityName column of<br />

the master.containers table.<br />

The Containment Model<br />

Although the containment model generated by the stitchers may represent any type of containment, the<br />

default set of stitchers deduce a combination of physical and logical containment that is optimized for<br />

performing root cause analysis.<br />

The result of a query on the databases of MODEL is shown below.<br />

|phoenix:1.> select * from master.containers;<br />

|phoenix:2.> go<br />

..............................<br />

{<br />

ObjectId=1057;<br />

EntityName='SUBNET / 10.10.63.212 / 255.255.255.252';<br />

MemberName='10.10.63.214';<br />

365


Chapter 13: Accessing Topology Data in MODEL<br />

366<br />

}<br />

{<br />

ObjectId=1003;<br />

EntityName='10.10.63.194';<br />

MemberName='10.10.63.194[ 0 [ 4 ] ]';<br />

}<br />

.....<br />

.....<br />

{<br />

ObjectId=1003;<br />

EntityName='10.10.63.194';<br />

MemberName='10.10.63.194[ 2 [ 4 ] ]';<br />

}<br />

{<br />

ObjectId=804;<br />

EntityName='b031c-1-6500s.Kazeem.San.COM';<br />

MemberName='b031c-1-6500s.Kazeem.San.COM[ 7 [ 47 ] ]';<br />

}<br />

( 982 record(s) : Transaction complete )<br />

|phoenix:1.><br />

The format of the data in the master.containers table is subject to how the discovery has been<br />

stitched together. The default naming convention is shown above and explained in the following section.<br />

EntityName<br />

The master.containers.EntityName column holds one of the following:<br />

The <strong>IP</strong> address of the device.<br />

The resolved host name of the device.<br />

A subnet address with prefix SUBNET and subnet and netmask addresses.<br />

MemberName<br />

The master.containers.MemberName column shows a network entity that belongs to the<br />

corresponding EntityName. If the EntityName of the record has the SUBNET prefix, the<br />

MemberName column contains an <strong>IP</strong> address belonging to the subnet.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Accessing the Discovered Topology<br />

Alternatively, if the EntityName contains a single <strong>IP</strong> address, the MemberName contains a card and port<br />

number of an entity that is contained within the corresponding EntityName. In this case, MemberName<br />

is in the following format.<br />

MemberName='EntityName[ CARD [ PORT ] ]'<br />

In the example above:<br />

EntityName refers to the entity within which the interface is contained.<br />

CARD refers to the card number and PORT refers to the port number. However, if CARD is equal to<br />

0 then PORT refers to the interface with ifIndex=PORT on the device. Therefore:<br />

– MemberName='10.10.63.194[ 2 [ 4 ] ]' refers to the interface attached to port 4<br />

on card 2 within the device 10.10.63.194.<br />

– MemberName='10.10.63.194[ 0 [ 4 ] ]' refers to the interface with ifindex<br />

value 4 on the device 10.10.63.194.<br />

367


Chapter 13: Accessing Topology Data in MODEL<br />

13.5 Reinstantiating the Containment Model<br />

368<br />

When the completed discovery is sent from DISCO to MODEL, the discovered devices are instantiated to<br />

Active Object Classes (AOCs). If you subsequently alter the AOC hierarchy or definitions, either through<br />

the OQL Service Provider or the MONITOR <strong>Configuration</strong> tool, you can re-instantiate the containment<br />

model without having to restart the whole domain and the discovery process.<br />

The discovery process data flow is fully configurable, and can be started and restarted at any point using the<br />

appropriate stitcher. In order to re-instantiate the containment model, you must start the stitcher that sends<br />

the topology from DISCO to MODEL.<br />

The following example explains the steps to re-instantiate the topology using your modified AOC<br />

definitions.<br />

Identifying the Current Classes Used in MODEL (Optional)<br />

Before altering the AOC definitions and re-instantiating the topology, you may wish to check the classes<br />

that are currently in use, although this is an optional step. You can query the MODEL databases using the<br />

following commands. These commands return the names of the AOCs to which devices in the current<br />

topology have been instantiated. You must substitute your domain name and username where NCOMS and<br />

admin are specified.<br />

ncp_oql -domain NCOMS -username admin -service Model<br />

ncp_oql ( <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> OQL Interface )<br />

Copyright (C) Micromuse Ltd., 1997-2003. All Rights Reserved.<br />

Password:<br />

|phoenix:1.> select ClassName from master.entityByName;<br />

|phoenix:2.> go<br />

{<br />

ClassName='Device';<br />

}<br />

{<br />

ClassName='Interface';<br />

}<br />

.....<br />

.....<br />

ClassName='MainNode';<br />

}<br />

{<br />

ClassName='CiscoSwitch';<br />

}<br />

( 131 record(s) : Transaction complete )<br />

|phoenix:1.><br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Editing the AOC Definitions<br />

There are three ways to edit the AOC definitions:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Reinstantiating the Containment Model<br />

The recommended method of changing the AOCs is to use the MONITOR <strong>Configuration</strong> tool. The<br />

MONITOR <strong>Configuration</strong> tool automatically passes any AOC changes to the CLASS databases. The<br />

MONITOR <strong>Configuration</strong> tool is described in the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Monitoring and RCA <strong>Guide</strong>.<br />

It is possible to update the CLASS databases (and therefore the current AOC definitions) directly,<br />

using the OQL Service Provider, although this is not recommended.<br />

It is also possible to edit the AOC definitions by manually editing the AOC definition files using a<br />

text editor, although this is not recommended as there is a risk of introducing syntax errors. If you<br />

edit the AOC files, you must save the updated definitions to a new directory rather than overwriting<br />

the existing definitions. In order to activate any updates made by editing the text files, you must<br />

terminate and restart the CLASS component, specifying the updated files as the input for CLASS<br />

(using the -read_aocs_from command line option) when it is restarted.<br />

Restarting the <strong>Discovery</strong> Data Flow at the Appropriate Point<br />

Once you have updated the AOC definitions, and the updates have been passed to CLASS, you can<br />

re-instantiate the topology by restarting the discovery at the point at which the topology is passed from<br />

DISCO to MODEL.<br />

Note: The discovery data flow is fully configurable. If necessary you can restart the discovery at any point<br />

by activating the appropriate stitcher. For more information about the discovery stitchers, see Introduction<br />

to <strong>Discovery</strong> Stitchers on page 518.<br />

In order to re-instantiate the topology, you must:<br />

1. Confirm the existence of a scratchTopology, that is, make sure DISCO is in the rediscovery<br />

mode.<br />

2. Determine the name of the stitcher responsible for sending the topology to MODEL.<br />

3. Invoke that stitcher.<br />

Determining the Current Operational Mode of DISCO<br />

To determine whether DISCO is in the rediscovery mode (and that a Scratch Topology exists), query the<br />

disco.status table as shown below. You must substitute your domain name and username where<br />

NCOMS and admin are specified.<br />

ncp_oql -domain NCOMS -username admin -service Disco<br />

ncp_oql ( <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> OQL Interface )<br />

369


Chapter 13: Accessing Topology Data in MODEL<br />

370<br />

Copyright (C) Micromuse Ltd., 1997-2003. All Rights Reserved.<br />

Password:<br />

|phoenix:1.> select * from disco.status;<br />

|phoenix:2.> go<br />

.<br />

{<br />

m_<strong>Discovery</strong>Mode=1;<br />

m_Phase=1;<br />

m_BlackoutState=0;<br />

m_CycleCount=0;<br />

m_ProcessingNeeded=0;<br />

m_Full<strong>Discovery</strong>=0;<br />

}<br />

( 1 record(s) : Transaction complete )<br />

|phoenix:1.><br />

From the results returned by the query, you can see that DISCO is currently in the rediscovery mode, that<br />

is, m_<strong>Discovery</strong>Mode=1.<br />

Determining the Stitcher that Sends the Topology to MODEL<br />

To determine the name of the stitcher that sends the discovered network topology from DISCO to<br />

MODEL, you can perform a simple query on the stitchers database. The following query uses a like<br />

expression to return a list of stitchers whose names either contain the string Model or model.<br />

|phoenix:1.> select m_Name from stitchers.status<br />

|phoenix:2.> where m_Name like '.*[mM]odel.*';<br />

|phoenix:3.> go<br />

..<br />

{<br />

m_Name='SendTopologyToModel';<br />

}<br />

( 2 record(s) : Transaction complete )<br />

|phoenix:1.><br />

The results returned by the OQL query show that the SendTopologyToModel stitcher is required.<br />

Invoking the SendTopologyToModel Stitcher<br />

To restart the discovery data flow by invoking the SendTopologyToModel stitcher, you must insert<br />

the stitcher into the stitchers.actions table, which instructs DISCO to start the specified stitcher<br />

immediately. The following insert would cause DISCO to start the stitcher.<br />

|phoenix:1.> insert into stitchers.actions<br />

|phoenix:1.> ( m_Name )<br />

|phoenix:2.> values<br />

|phoenix:3.> ( 'SendTopologyToModel' );<br />

|phoenix:4.> go<br />

.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


( 0 record(s) : Transaction complete )<br />

|phoenix:1.><br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Reinstantiating the Containment Model<br />

As soon as your OQL insert is accepted, the stitcher is invoked and the network topology is sent to MODEL.<br />

When the topology is sent, it is instantiated in accordance with the newly created AOC hierarchy.<br />

Confirming the Instantiation (Optional)<br />

You can check that the new topology has been instantiated in accordance with the instantiate rules specified<br />

by the new AOC hierarchy by interrogating the databases of MODEL, as shown by the following example<br />

query. You must substitute the appropriate domain and usernames.<br />

ncp_oql -domain NCOMS -username admin -service Model<br />

ncp_oql ( <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> OQL Interface )<br />

Copyright (C) Micromuse Ltd., 1997-2003. All Rights Reserved.<br />

Password:<br />

|phoenix:1.> select ClassName from master.entityByName;<br />

|phoenix:2.> go<br />

.........................<br />

{<br />

ClassName='Device';<br />

}<br />

{<br />

ClassName='Interface';<br />

}<br />

.....<br />

.....<br />

{<br />

ClassName='CiscoSwitch';<br />

}<br />

( 131 record(s) : Transaction complete )<br />

|phoenix:1.><br />

371


Chapter 13: Accessing Topology Data in MODEL<br />

1<strong>3.6</strong> Databases of MODEL<br />

372<br />

At startup, MODEL waits for DISCO to finish the discovery process, create the Scratch Topology and insert<br />

it into the MODEL databases. The MODEL databases are shown in Table 91.<br />

Table 91: MODEL Databases<br />

Database Description<br />

master The central store for the network topology.<br />

translations Stores the definitions and translations of external data types used in the master<br />

database.<br />

model Used to track topology updates.<br />

The master Database Schema<br />

Table 92 describes the master database.<br />

Table 92: master Database Schema<br />

Database name Defined in Fully qualified database table names<br />

master NCHOME/etc/precision<br />

/ModelSchema.cfg<br />

master.entityByName<br />

master.entityByNeighbor<br />

master.containers<br />

The master database is responsible for holding all the network entities, their containment, and their<br />

connections.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The entityByName Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Databases of MODEL<br />

The entityByName table, described in Table 93, holds information about all the discovered network<br />

entities. This table is active, populated with the information received from DISCO. Entries made into the<br />

entityByName table are also used to populate the containers table.<br />

Table 93: master.entityByName Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

ObjectId PRIMARY KEY<br />

NOT NULL<br />

UNIQUE<br />

EntityName PRIMARY KEY<br />

NOT NULL<br />

UNIQUE<br />

Long integer The unique Object ID of the network entity.<br />

Text Unique descriptive name of a network entity.<br />

Address List of text List of OSI model layer 1 -7 addresses for the entity.<br />

Description Text Value of sysDescr MIB variable or other suitable<br />

description of the entity.<br />

EntityType Externally defined<br />

entityTypes data<br />

type<br />

Integer Element type of the entity.<br />

(0) Unknown<br />

(1) Chassis<br />

(2) Interface<br />

(3) Logical interface<br />

(4) VLAN object<br />

(5) Card<br />

(6) PSU<br />

(7) Logical collection<br />

(8) Module<br />

ClassName Text Class name of network entity (if applicable).<br />

EntityOID Text Value of sysOID MIB variable of the entity.<br />

Status Externally defined<br />

status data type<br />

Integer Flag showing status of the network entity.<br />

Security Text Password to access network entity (if applicable).<br />

RelatedTo List of text List of entities that are connected to the network<br />

entity.<br />

373


Chapter 13: Accessing Topology Data in MODEL<br />

374<br />

Table 93: master.entityByName Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

Contains List of text List of elements or other containers contained<br />

within the current network entity.<br />

UpwardConnections List of text List of containers that contain this entity.<br />

IsActive Externally defined<br />

Boolean data type<br />

The entityByNeighbor Table<br />

Boolean Integer Flag indicating whether an Active Object Class is<br />

needed:<br />

(1) Active Object Class is needed.<br />

(0) Active Object Class is not needed<br />

CreateTime Time Creation time of network entity record in table.<br />

ChangeTime Time Time of last modification to the network entity<br />

record.<br />

ActionType Externally defined<br />

actions data type<br />

ExtraInfo Externally defined<br />

vblist data type<br />

LingerTime NOT NULL<br />

Default=3<br />

Integer The type of action associated with the record.<br />

Object A list of extra information.<br />

Integer The linger time is used during rediscovery so that<br />

the new topology can be merged with the existing<br />

topology.<br />

The value of LingerTime is decremented if the<br />

entity is not present in the new topology. The entity<br />

is only removed from the topology when the value<br />

of LingerTime reaches 0.<br />

The entityByNeighbor table, described in Table 94, holds connectivity information for each network<br />

entity.<br />

Table 94: master.entityByNeighbor Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

LeftId PRIMARY KEY<br />

NOT NULL<br />

LeftName PRIMARY KEY<br />

NOT NULL<br />

RightName NOT NULL PRIMARY<br />

KEY<br />

Long integer The Object ID of the left-hand side connection.<br />

Text The entity name of the left-hand side connection.<br />

Text The entity name of the right-hand side<br />

connection.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 94: master.entityByNeighbor Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

The containers Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Databases of MODEL<br />

Speed Long64 The speed of the connection in bits per second<br />

(bps).<br />

Protocol Externally defined<br />

protocol data type<br />

RelType Externally defined<br />

connectionType data<br />

type<br />

Duplex Externally defined<br />

Boolean data type<br />

The containers table, described in Table 95, uses the containment model principle to consider each<br />

network entity as being contained by other network entities. The table, which is automatically populated as<br />

a result of entries made into the entityByName table, shows the parent of each entity, that is, the object<br />

that contains the present entity.<br />

Table 95: master.containers Database Table Schema<br />

The model Database Schema<br />

Table 96 describes the model database.<br />

Integer The transmission protocol type used by the<br />

connection.<br />

Integer The type of relationship.<br />

Boolean Integer Flag indicating whether link is bidirectional (that<br />

is, full duplex):<br />

(1) Link is bidirectional.<br />

Column name Constraints Data type Description<br />

ObjectId PRIMARY KEY<br />

NOT NULL<br />

EntityName PRIMARY KEY<br />

NOT NULL<br />

(0) Link is not bidirectional.<br />

Long integer The unique Object ID of the network entity.<br />

Text Descriptive name of container network entity.<br />

MemberName NOT NULL Text The member name of the contained object.<br />

Table 96: model Database Schema<br />

Database name Defined in Fully qualified database table names<br />

model NCHOME/etc/precision/<br />

ModelSchema.cfg<br />

model.config<br />

model.statistics<br />

375


Chapter 13: Accessing Topology Data in MODEL<br />

376<br />

The model database is actively used to store information about the topology. This information is used<br />

during rediscovery so that topologies can be merged efficiently.<br />

The config Table<br />

The config table, described in Table 97, stores configuration information used internally by MODEL<br />

during rediscovery.<br />

Table 97: model.config Database Table Schema<br />

Column name Constraints Data type Description<br />

LingerTime PRIMARY KEY<br />

The statistics Table<br />

NOT NULL<br />

UNIQUE<br />

Integer LingerTime for the topology.<br />

ClassTimeOut NOT NULL Integer Timeout for the AOCs.<br />

The statistics table, described in Table 98, stores information about previous discoveries.<br />

Table 98: model.statistics Database Table Schema<br />

Column name Constraints Data type Description<br />

TopologyCount PRIMARY KEY<br />

NOT NULL<br />

UNIQUE<br />

Long A count of the number of times the topology<br />

has been sent from DISCO to MODEL.<br />

TopologySendFinished Integer Indicates whether DISCO has finished<br />

transferring the topology to MODEL.<br />

This column is set to 0 when the<br />

SendTopologyToModel.stch stitcher<br />

begins sending the topology, and set to 1 when<br />

it has completed sending the topology.<br />

InsertCount Long The number of entities inserted into the<br />

topology.<br />

UpdateCount Long The number of entities updated in the topology.<br />

DeleteCount Long The number of entities deleted from the<br />

topology.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


14. STORE.fm July 5, 2005<br />

Chapter 14: The Persistent Topology Store<br />

This chapter describes the <strong>Precision</strong> Server persistent storage engine, STORE, and its interaction with the<br />

rest of the <strong>Precision</strong> Server.<br />

This chapter contains the following sections:<br />

STORE on page 378<br />

Starting STORE on page 379<br />

STORE Databases on page 381<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 377


Chapter 14: The Persistent Topology Store<br />

14.1 STORE<br />

378<br />

STORE is the persistent storage engine responsible for gathering all information generated by the <strong>Precision</strong><br />

Server multicast traffic on the TIBCO bus (for example, topology and event traffic) and storing it to flat files<br />

on disk. The cached information can be used to restore your databases if one of the processes terminates<br />

unexpectedly.<br />

STORE listens to information (referred to as the subject) on the TIBCO multicast traffic bus. STORE can<br />

simultaneously listen to more than one subject. It can, for example, listen to topology update information,<br />

event information, or any particular information on the multicast frequency.<br />

STORE is inherently extensible because it can be configured to listen to traffic generated by other<br />

components as they are plugged in to the <strong>Precision</strong> Server. STORE is also domain-specific, so you can<br />

configure different instances of STORE to listen to subjects on multiple domains.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


14.2 Starting STORE<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Starting STORE<br />

It is good practice to ensure that CTRL is configured to launch and manage STORE. STORE can also be<br />

started manually using the following command line; optional arguments are shown enclosed in square<br />

brackets.<br />

ncp_store –domain DOMAIN_NAME [ -cachesize SIZE_IN_MB ] [ -cachepercent<br />

PERCENTAGE_OF_CACHE_IN_MEMORY ] [ -debug DEBUG ] [ -help ] [ -version ] [ -latency<br />

LATENCY ]<br />

Table 99: Explanation of Command Line Options<br />

Option Explanation<br />

-domain DOMAIN_NAME The name of the domain under which to run STORE.<br />

-debug DEBUG The level of debugging output (1-4, where 4 represents the most<br />

detailed output).<br />

-latency LATENCY The maximum time in milliseconds (ms) that STORE waits to connect<br />

to another <strong>Precision</strong> Server process by means of the messaging bus.<br />

This option is useful for large and busy networks where the default<br />

settings can cause processes to assume that there is a problem when<br />

in fact the communication delay is a result of network traffic.<br />

-cachesize SIZE_IN_MB Specifies the size of the cache in megabytes (MB).<br />

-cachepercent<br />

PERCENTAGE_OF_CACHE_IN_MEMORY<br />

Enables you to specify the ratio of the cache that is resident in memory<br />

to the cache that is resident on the hard disk.<br />

The ratio that you specify depends on the amount of memory that<br />

exists on the host machine and the number of processes it is running.<br />

The default value is 0% cache. This ensures that STORE has a smaller<br />

memory footprint, as all its databases are stored on disk and not in<br />

memory.<br />

-help Displays the command line options. Does not start the component<br />

even if used in conjunction with other arguments.<br />

-version Displays the version number of the component. Does not start the<br />

component even if used in conjunction with other arguments.<br />

The -cachesize and -cachepercent options can be used to reduce the memory required when the<br />

process responds to OQL queries that result in large numbers of records being returned.<br />

When a value for -cachesize is specified, a fixed size of records is cached in core memory with the<br />

remaining records being flushed to disk. When a value for -cachepercent is specified, that percentage<br />

of the data is cached in core memory with the remainder being flushed to disk.<br />

379


Chapter 14: The Persistent Topology Store<br />

Prerequisites for Running STORE<br />

380<br />

STORE has no prerequisites except that the domain that you wish to listen to has to be set up, and the<br />

processes within that domain have to be running before STORE can begin the persistent storage of data.<br />

Restoring Databases Using STORE<br />

STORE is supplied preconfigured and you do not normally need to make any configuration adjustments.<br />

The operation of STORE is transparent to the user. If a process terminates unexpectedly, restart the process<br />

to automatically populate its databases with any information that has been saved by STORE.<br />

If you configure CTRL to launch and manage the <strong>Precision</strong> Server processes, it is important that you<br />

configure STORE to be launched first (by specifying the process dependencies). Once STORE has been<br />

launched, any other processes automatically populate their databases with the cached information.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


14.3 STORE Databases<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

STORE Databases<br />

STORE stores data from <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> processes in a series of databases. By default this includes the<br />

system database, which configures the operation of STORE itself, and specialized databases for storing<br />

topology traffic from MODEL and event traffic to and from the RCA Engine.<br />

The databases used by STORE are listed in Table 100.<br />

Table 100: STORE Databases<br />

Database Description<br />

system Configures the operation of STORE.<br />

kernel Created by default to enable the storage of topology events.<br />

Network management application-specific<br />

databases<br />

These databases are described in detail in the following sections.<br />

The system Database Schema<br />

STORE can be configured to listen to any other subject by configuring an insert into the system database<br />

and creating the appropriate database. STORE needs a database for every subject on which it is to listen for<br />

data.<br />

Note: The term subject refers to the data traffic between processes, transmitted on the TIBCO<br />

Rendezvous bus.<br />

Table 101 describes the system database.<br />

Table 101: Synopsis of the system Database<br />

Other databases can be added to enable the storage of events specific<br />

to network management applications such as the RCA Engine.<br />

Database name Defined in Fully qualified database table names<br />

system NCHOME/etc/precision/<br />

StoreSchema.cfg<br />

system.snoopers<br />

system.rollUps<br />

system.stateRules<br />

Note: NCHOME is the environment variable that contains the path to the <strong>Netcool</strong> Suite home directory. For<br />

information on how this environment variable varies with platform, see Operating System Considerations on<br />

page 10.<br />

381


Chapter 14: The Persistent Topology Store<br />

382<br />

STORE uses the system database to define the listening methodology, which includes the subjects to<br />

which it listens and the name of the databases that it updates.<br />

The snoopers Table<br />

The snoopers table, described in Table 102, stores a record for each subject to which STORE listens.<br />

Table 102: system.snoopers Database Table Schema<br />

Column name Constraints Data type Description<br />

Subject PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

Text The subject to listen to.<br />

DataArea NOT NULL Text The database into which information is inserted when<br />

STORE detects information on the subject to which it is<br />

listening.<br />

BaseTable NOT NULL Text The table of the database specified in DataArea into<br />

which information is inserted when detected.<br />

CreateRule Text The rule that is run to create records in the persistent store.<br />

ChangeRule Text The rule that is run to update records in the persistent store.<br />

DeleteRule Text The rule that is run to delete records from the persistent<br />

store.<br />

You can interpret each record in the snoopers table as follows:<br />

STORE listens for a Subject on the TIBCO Rendezvous bus and inserts incoming subjects into<br />

the DataArea.BaseTable.<br />

STORE ensures that the CreateRule, ChangeRule or DeleteRule are executed depending<br />

on the incoming subject.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The rollUps Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

STORE Databases<br />

The rollUps table, described in Table 103, specifies how often STORE executes the rules that govern the<br />

referential integrity of the STORE database tables. The timed fields work in a similar way to the UNIX<br />

command crontab, so that a value of 0 causes the rule to be executed on every interval of the field (that<br />

is, a value of 0 in the month field causes it to execute every month).<br />

Table 103: system.rollUps Database Table Schema<br />

Column name Constraints Data type Description<br />

Name PRIMARY KEY<br />

NOT NULL<br />

Text Name of the rollup rule.<br />

SchedMin Integer Run on this minute.<br />

SchedHour Integer Run on this hour.<br />

SchedDay Integer Run on this day.<br />

SchedDate Integer Run on this date.<br />

SchedMnth Integer Run on this month.<br />

SchedYear Integer Run on this year.<br />

DataArea Text The target database of the actions to be carried out on<br />

the rollup rule.<br />

BaseTable Text The target database of the actions to be carried out on<br />

the rollup rule.<br />

RollupRule Text The rule to be invoked by the presently defined rule.<br />

You can interpret each record in the rollUps table as follows:<br />

Run rule Name when the time is SchedHour, SchedMin every SchedDay day or on the date<br />

SchedDate of the month SchedMnth of year SchedYear.<br />

In addition, the rule Name runs the rollup rule RollupRule on the DataArea.BaseTable<br />

database table.<br />

383


Chapter 14: The Persistent Topology Store<br />

384<br />

The stateRules Table<br />

The stateRules table, described in Table 104, defines the rules to be used by STORE to create, update,<br />

delete, and manipulate records. This table also defines the criteria that must be met before a rule can be<br />

executed.<br />

Table 104: system.stateRules Database Table Schema<br />

Column name Constraints Data type Description<br />

Name PRIMARY KEY<br />

NOT NULL<br />

The kernel Database Schema<br />

Table 105 describes the kernel database.<br />

STORE uses the kernel database to store the topology event stream. The tables of the kernel database are<br />

both copies of the master.entityByName table of MODEL. The only difference is that the<br />

modelLog table is a record of all the entities in the topology and the activeModel is actively updated<br />

as records are added, deleted or updated.<br />

The modelLog table<br />

Text Name of the rule.<br />

Filter Text Rule execute criteria.<br />

Execute Text The OQL statements to execute.<br />

IsActive Externally defined<br />

Boolean data type<br />

Table 105: Synopsis of the kernel Database<br />

Boolean Integer An activity status flag to determine whether the rule is<br />

currently running:<br />

(1) Rule is currently running.<br />

(0) Rule is not currently running.<br />

Database name Defined in Fully qualified database table names<br />

kernel NCHOME/etc/precision/<br />

StoreSchema.cfg<br />

kernel.modelLog<br />

kernel.activeModel<br />

The modelLog table, described in Table 106, is a store of all the entities known in the network topology,<br />

regardless of their current status. By default, the modelLog table is configured as the target database table<br />

for <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> topology events. This table is populated automatically when STORE starts up, but<br />

is not the target of the rules specified within the snoopers table, so it does not get updated and therefore<br />

remains the ‘persistent store’ of the network topology.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Each record in the table represents a device in the network topology.<br />

Table 106: kernel.modelLog Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

ObjectId PRIMARY KEY<br />

NOT NULL<br />

EntityName PRIMARY KEY<br />

NOT NULL<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Long integer Unique Object ID of the network entity.<br />

STORE Databases<br />

Text Unique descriptive name of a network entity.<br />

Address List of text List of OSI model layer 1-7 addresses for the<br />

entity.<br />

Description Text Value of sysDescr MIB variable or other<br />

suitable description of the entity.<br />

EntityType Externally defined<br />

entityTypes data type<br />

Integer Element type of the entity.<br />

(0) Unknown<br />

(1) Chassis<br />

(2) Interface<br />

(3) Logical interface<br />

(4) VLAN object<br />

(5) Card<br />

(6) PSU<br />

(7) Logical collection<br />

(8) Module<br />

ClassName Text Class name of the network entity (if applicable).<br />

EntityOID Text Value of sysOID MIB variable of the entity.<br />

Status Externally defined<br />

status data type<br />

Integer Flag showing the status of the network entity.<br />

Security Text Password to access network entity (if applicable).<br />

RelatedTo List of text List of connections to the network entity.<br />

Contains List of text List of elements or other containers contained<br />

within the current network entity.<br />

UpwardConnections List of text List of containers that contain this entity.<br />

385


Chapter 14: The Persistent Topology Store<br />

386<br />

Table 106: kernel.modelLog Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

IsActive Externally defined<br />

Boolean data type<br />

The activeModel Table<br />

Boolean<br />

Integer<br />

Flag indicating whether an Active Object Class is<br />

needed:<br />

(1) Active Object Class is needed.<br />

(0) Active Object Class is not needed.<br />

CreateTime Time Creation time of network entity record in table.<br />

ChangeTime Time Time of last modification to the network entity<br />

record.<br />

ActionType Externally defined<br />

actions data type<br />

ExtraInfo Externally defined<br />

vblist data type<br />

Integer Type of record.<br />

Object A list of extra information.<br />

LingerTime NOT NULL Integer The linger count for entity removal during<br />

rediscovery.<br />

The activeModel table, described in Table 107, is a store of all the active entities in the network<br />

topology. The activeModel table tracks the active topology, since it is the target database table for the<br />

rules within the snoopers table entry for <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> topology events, and is constantly updated<br />

as changes are made to the network topology.<br />

Table 107: kernel.activeModel Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

ObjectId PRIMARY KEY<br />

NOT NULL<br />

EntityName PRIMARY KEY<br />

NOT NULL<br />

Long integer Unique Object ID of the network entity.<br />

Text Unique descriptive name of the network entity.<br />

Address List of text List of OSI model layer 1-7 addresses for the entity.<br />

Description Text Value of sysDescr MIB variable or other suitable<br />

description of the entity.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 107: kernel.activeModel Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

EntityType Externally defined<br />

entityTypes data<br />

type<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Integer Element type of the entity.<br />

(0) Unknown<br />

(1) Chassis<br />

(2) Interface<br />

(3) Logical interface<br />

(4) VLAN object<br />

(5) Card<br />

(6) PSU<br />

(7) Logical collection<br />

(8) Module<br />

STORE Databases<br />

ClassName Text Class name of the network entity (if applicable).<br />

EntityOID Text Value of sysOID MIB variable of the entity.<br />

Status Externally defined<br />

status data type<br />

Integer Flag showing the status of the network entity.<br />

Security Text Password to access network entity (if applicable).<br />

RelatedTo List of text List of connections to the network entity.<br />

Contains List of text List of elements or other containers contained<br />

within the current network entity.<br />

UpwardConnections List of text List of containers that contain this entity.<br />

IsActive Externally defined<br />

Boolean data type<br />

Boolean Integer Flag indicating whether an Active Object Class is<br />

needed:<br />

(1) Active Object Class is needed.<br />

(0) Active Object Class is not needed<br />

CreateTime Time Creation time of network entity record in table.<br />

ChangeTime Time Time of last modification to the network entity<br />

record.<br />

ActionType Externally defined<br />

actions data type<br />

ExtraInfo Externally defined<br />

vblist data type<br />

Integer Type of record.<br />

Object A list of extra information.<br />

LingerTime NOT NULL Integer The linger count for entity removal during<br />

rediscovery.<br />

387


Chapter 14: The Persistent Topology Store<br />

The fault Database Schema<br />

388<br />

Table 108 describes the fault database.<br />

Table 108: Synopsis of the fault Database<br />

Database name Defined in Fully qualified database table names<br />

fault NCHOME/etc/precision/<br />

StoreSchema.cfg<br />

You can configure STORE to listen to events from other network management applications (such as the<br />

RCA Engine) as they become available, by appending inserts to the system database and defining a new<br />

database to store the data. By default, STORE is configured to persistently store event data from the RCA<br />

Engine (if available) using the fault database.<br />

The eventLog Table<br />

fault.eventLog<br />

fault.events<br />

fault.comments<br />

The eventLog table, described in Table 109, persistently stores data from the event stream of the RCA<br />

Engine. It is similar to the kernel.modelLog table in that it is initialized when STORE starts up, but<br />

is not updated by the stateRules.<br />

Table 109: fault.eventLog Database Table Schema (1 of 3)<br />

Column name Constraints Data type Description<br />

EventId PRIMARY KEY<br />

NOT NULL<br />

Long integer The event ID.<br />

EntityName PRIMARY KEY<br />

Text The network entity associated with the<br />

NOT NULL<br />

event.<br />

ClassName Text The associated AOC.<br />

Description Text A textual description of the event.<br />

EventName Varchar (256) Name of the poll that created the event.<br />

EventType Externally defined<br />

eventType data type<br />

Severity PRIMARY KEY<br />

NOT NULL<br />

Externally defined<br />

severity data type<br />

Integer Type of event (event/data/alert).<br />

Integer The OSI Severity code.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 109: fault.eventLog Database Table Schema (2 of 3)<br />

Column name Constraints Data type Description<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

STORE Databases<br />

Contact Text The contact person responsible for the<br />

device that generated the event.<br />

AssignedTo Text The person that has been assigned the<br />

event.<br />

Acknowledged Externally defined<br />

Boolean data type<br />

Boolean Integer Flag denoting whether or not an event has<br />

been acknowledged:<br />

(1) Event has been acknowledged.<br />

(0) Event has not been acknowledged.<br />

Location Text Location of the device that generated the<br />

event.<br />

CorrelatedId List of type long<br />

integer<br />

List of associated eventIDs.<br />

EventGroupId Long integer List of associated events.<br />

ActionGlyph Text Alert display glyph (visual icon).<br />

CreateTime Long Time of first occurrence of event.<br />

ChangeTime Long Time of last occurrence of event.<br />

Occurred Integer Number of identical events that have<br />

occurred.<br />

CauseType Externally defined<br />

causes data type<br />

ActionType Externally defined<br />

actions data type<br />

InternalAction Externally defined<br />

internalActions data<br />

type<br />

Integer The type of alert (symptom or root cause):<br />

(0) Unknown<br />

(1) Root cause<br />

(2) Symptom<br />

Integer The type of action that the event represents.<br />

Integer The internal action associated with the<br />

event. This may be one of the following:<br />

New<br />

Acknowledged<br />

Unacknowledged<br />

AgentAddress Text The location of the Polling agent.<br />

ExtraInfo Externally defined<br />

vblist data type<br />

Object A list of extra information.<br />

389


Chapter 14: The Persistent Topology Store<br />

390<br />

Table 109: fault.eventLog Database Table Schema (3 of 3)<br />

Column name Constraints Data type Description<br />

Dist Integer Indicates whether the event is to be<br />

distributed with DIST.<br />

AlertType Text The type of alert; for example, a topology<br />

alert or a temporary alert.<br />

The events Table<br />

The events table, described in Table 110, is a master record of all events in the system. Each record in<br />

the table represents a complete event record, and is actively updated by the stateRules.<br />

Table 110: fault.events Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

EventId PRIMARY KEY<br />

NOT NULL<br />

UNIQUE<br />

Long integer The event ID.<br />

EntityName PRIMARY KEY<br />

Text The name of the network entity associated<br />

NOT NULL<br />

with the event.<br />

ClassName Text The associated AOC.<br />

Description Text A textual description of the event.<br />

EventName Varchar (256) Name of the poll that created the event.<br />

EventType Text A set of rules that are to be run on the event.<br />

Severity Externally defined<br />

eventType data type<br />

Contact PRIMARY KEY<br />

NOT NULL<br />

Externally defined<br />

severity data type<br />

Integer Type of event (event/data/alert).<br />

Integer The OSI Severity code.<br />

AssignedTo Text The contact person responsible for the<br />

device that generated the event.<br />

Acknowledged Text The person that has been assigned the<br />

event.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 110: fault.events Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

Location Externally defined<br />

Boolean data type<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

STORE Databases<br />

Boolean Integer Flag denoting whether or not an event has<br />

been acknowledged:<br />

(1) Event has been acknowledged.<br />

(0) Event has not been acknowledged.<br />

CorrelatedId Text Location of the device that generated the<br />

event.<br />

EventGroupId List of type long<br />

integer<br />

List of associated event IDs.<br />

ActionGlyph Long integer List of associated events.<br />

CreateTime Text Alert display glyph (visual icon).<br />

ChangeTime Long integer Time of first occurrence of event.<br />

Occurred Long integer Time of last change to the event (that is, the<br />

last time the event occurred).<br />

CauseType Integer Number of identical events that have<br />

occurred.<br />

ActionType Externally defined<br />

causes data type<br />

InternalAction Externally defined<br />

actions data type<br />

AgentAddress Externally defined<br />

internalActions data<br />

type<br />

Integer The type of alert (symptom or root cause):<br />

(0) Unknown<br />

(1) Root cause<br />

(2) Symptom<br />

Integer The type of action that the event represents<br />

(create/change/delete).<br />

Integer The internal action associated with the<br />

event. This may be one of the following:<br />

New<br />

Acknowledged<br />

Unacknowledged<br />

ExtraInfo Text The location of the Polling agent.<br />

Dist Externally defined<br />

vblist data type<br />

Object A list of extra information.<br />

AlertType Integer Indicates whether the event is to be<br />

distributed with DIST.<br />

Column name Text The type of alert; for example, a topology<br />

alert or a temporary alert.<br />

391


Chapter 14: The Persistent Topology Store<br />

392<br />

The comments Table<br />

The comments table, described in Table 111, stores comments associated with the event records.<br />

Table 111: fault.comments Database Table Schema<br />

Column name Constraints Data type Description<br />

EventId NOT NULL Long integer The event ID.<br />

CreateTime NOT NULL Long The creation time of the comment.<br />

CreatedBy Text The writer of the comment.<br />

CommentBody Text The text of the comment itself.<br />

InternalAction Externally defined<br />

internalActions data<br />

type<br />

Example <strong>Configuration</strong>s: Configuring STORE to Listen for Topology<br />

Traffic<br />

The following example insert configures STORE to listen for topology traffic.<br />

insert into system.snoopers<br />

(<br />

Subject, DataArea, BaseTable,<br />

CreateRule, ChangeRule, DeleteRule<br />

)<br />

values<br />

(<br />

'RIVERSOFT.3.0.MODEL.NOTIFY', 'kernel', 'modelLog',<br />

'modelCreate', 'modelUpdate', 'modelDelete'<br />

);<br />

This example OQL insert above instructs STORE to:<br />

Listen to the RIVERSOFT.3.0.MODEL.NOTIFY bus (on which topology traffic is passed).<br />

Store data from this subject in the kernel.modelLog table.<br />

Integer The internal action associated with the<br />

event. This may be one of the following:<br />

Apply the modelCreate, modelUpdate and modelDelete state rules.<br />

The kernel.modelLog table is described in Table 106 on page 385. The modelCreate,<br />

modelUpdate and modelDelete state rules are defined and explained in the following sections.<br />

New<br />

Acknowledged<br />

Unacknowledged<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The modelCreate State Rule<br />

The following example creates the modelCreate rule, which is defined as follows:<br />

The rule is called modelCreate.<br />

No filter is to be applied.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

STORE Databases<br />

The rule itself extracts all the data from the record that has been received on the message bus and<br />

inserts the data into the kernel.activeModel table.<br />

insert into system.stateRules<br />

(<br />

Name,<br />

Filter,<br />

Execute,<br />

IsActive<br />

)<br />

values<br />

(<br />

'modelCreate',<br />

'',<br />

'insert into kernel.activeModel<br />

( eval(text, "RECORD_NAMES()") )<br />

values<br />

( eval(text, "RECORD_VALUES()") );',<br />

1<br />

);<br />

The modelUpdate State Rule<br />

The following example creates the modelUpdate rule, which is defined as follows:<br />

The rule name is modelUpdate.<br />

No filter is to be applied.<br />

The rule itself:<br />

– Deletes any existing record with the same Object ID as the new record from the<br />

kernel.activeModel database. It deletes the appropriate record by extracting the Object<br />

ID from the new record and using an OQL delete where statement. For more<br />

information about OQL, see Appendix B: The Object Query Language on page 479.<br />

– Extracts all the data from the record that has been received on the message bus and inserts the<br />

data into the kernel.activeModel table.<br />

insert into system.stateRules<br />

(<br />

Name,<br />

393


Chapter 14: The Persistent Topology Store<br />

394<br />

)<br />

values<br />

(<br />

);<br />

Filter,<br />

Execute,<br />

IsActive<br />

'modelUpdate',<br />

'',<br />

'delete from kernel.activeModel<br />

where<br />

( ObjectId=eval(long,"&ObjectId"); );<br />

insert into kernel.activeModel<br />

( eval(text, "RECORD_NAMES()") )<br />

values<br />

( eval(text, "RECORD_VALUES()") );',<br />

1<br />

The modelDelete State Rule<br />

The following example creates the modelDelete rule, which is defined as follows:<br />

The rule name is modelDelete.<br />

No filter is used.<br />

The rule deletes any existing record with the same Object ID as the new record from the<br />

kernel.activeModel database. It deletes the appropriate record by extracting the Object ID<br />

from the new record and using an OQL delete where statement. For more information about<br />

OQL, see Appendix B: The Object Query Language on page 479.<br />

insert into system.stateRules<br />

(<br />

Name,<br />

Filter,<br />

Execute,<br />

IsActive<br />

)<br />

values<br />

(<br />

'modelDelete',<br />

'',<br />

'delete from kernel.activeModel<br />

where<br />

( ObjectId=eval(long,"&ObjectId") );',<br />

1<br />

);<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

STORE Databases<br />

Example <strong>Configuration</strong>s: Configuring STORE to Listen for Event Traffic<br />

The following OQL insert instructs STORE to:<br />

Listen to the RIVERSOFT.3.0.EVENT.NOTIFY bus (on which event traffic is passed).<br />

Store data from this subject in the fault.eventLog table.<br />

Apply the eventCreate, eventUpdate and eventDelete state rules.<br />

The fault.eventLog table is described in Table 109 on page 388. The eventCreate,<br />

eventUpdate and eventDelete state rules are defined and explained in the following sections.<br />

insert into system.snoopers<br />

(<br />

Subject, DataArea, BaseTable,<br />

CreateRule, ChangeRule, DeleteRule<br />

)<br />

values<br />

(<br />

'RIVERSOFT.3.0.EVENT.NOTIFY','fault','eventLog',<br />

'eventCreate','eventUpdate','eventDelete'<br />

);<br />

The eventCreate State Rule<br />

The following example creates the eventCreate rule, which is defined as follows:<br />

The rule is called eventCreate.<br />

No filter is to be applied.<br />

The rule itself extracts all the data from the record that has been received on the message bus and<br />

inserts the data into the fault.events table.<br />

insert into system.stateRules<br />

(<br />

Name,<br />

Filter,<br />

Execute,<br />

IsActive<br />

)<br />

values<br />

(<br />

'eventCreate',<br />

'',<br />

'insert into fault.events<br />

( eval(text, "RECORD_NAMES()") )<br />

values<br />

( eval(text, "RECORD_VALUES()") );',<br />

395


Chapter 14: The Persistent Topology Store<br />

396<br />

);<br />

1<br />

The eventUpdate State Rule<br />

The following example creates the eventUpdate rule, which is defined as follows:<br />

The rule name is eventUpdate.<br />

No filter is to be applied.<br />

The rule itself:<br />

– Deletes any existing record with the same Event ID as the new record from the<br />

fault.events database. It deletes the appropriate record by extracting the Event ID from<br />

the new record and using an OQL delete where statement. For more information about<br />

OQL, see Appendix B: The Object Query Language on page 479.<br />

– Extracts all the data from the record that has been received on the message bus and inserts the<br />

data into the fault.events table.<br />

insert into system.stateRules<br />

(<br />

Name,<br />

Filter,<br />

Execute,<br />

IsActive<br />

)<br />

values<br />

(<br />

'eventUpdate',<br />

'',<br />

'delete from fault.events<br />

where<br />

( EventId=eval(long,"&EventId"); );<br />

insert into fault.events<br />

( eval(text, "RECORD_NAMES()") )<br />

values<br />

( eval(text, "RECORD_VALUES()") );',<br />

1<br />

);<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The eventDelete State Rule<br />

The following example creates the eventDelete rule, which is defined as follows:<br />

The rule name is eventDelete.<br />

No filter is used.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

STORE Databases<br />

The rule deletes any existing record with the same Event ID as the new record from the<br />

fault.events database. It deletes the appropriate record by extracting the Event ID from the<br />

new record and using an OQL delete where statement. For more information about OQL, see<br />

Appendix B: The Object Query Language on page 479.<br />

insert into system.stateRules<br />

(<br />

Name,<br />

Filter,<br />

Execute,<br />

IsActive<br />

)<br />

values<br />

(<br />

'eventDelete',<br />

'',<br />

'delete from fault.events<br />

where<br />

( EventId=eval(long,"&EventId") );',<br />

1<br />

);<br />

397


Chapter 14: The Persistent Topology Store<br />

398<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


15. CLASS.fm July 5, 2005<br />

Chapter 15: The Active Object Class Server<br />

This chapter describes CLASS, the component that manages and distributes information contained within<br />

the Active Object Classes (AOCs) to other <strong>Precision</strong> Server processes and any applications that may require<br />

class-based information. This chapter also describes how to manually edit the AOCs.<br />

This chapter contains the following sections:<br />

Introduction to the AOC Server on page 400<br />

Starting CLASS on page 403<br />

The CLASS Database on page 405<br />

Manually Editing AOCs on page 409<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 399


Chapter 15: The Active Object Class Server<br />

15.1 Introduction to the AOC Server<br />

400<br />

CLASS is the dynamic library management system responsible for managing the AOCs. It is the only<br />

component that has direct contact with the AOC definitions, and it distributes these definitions to any<br />

component that needs them. For example, CLASS distributes the poll definitions (polling instructions) to<br />

MONITOR, the component that is responsible for controlling network monitoring.<br />

The supplied MONITOR <strong>Configuration</strong> tool can be used to browse and modify the AOC definitions.<br />

When a change is made, the MONITOR <strong>Configuration</strong> tool automatically sends the updates to CLASS,<br />

which modifies its internal records and broadcasts the modifications to any component that requires them.<br />

MONITOR and the MONITOR <strong>Configuration</strong> tool are described in detail in the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

Monitoring and RCA <strong>Guide</strong>.<br />

The <strong>Precision</strong> Server Aproach to Network Modelling<br />

In order to create a model of the network that is not only logical and efficient, but also able to adapt to<br />

network changes with minimal intervention, the <strong>Precision</strong> Server uses two key principles when modelling<br />

the network: object modelling and the containment model.<br />

Object modelling involves grouping together devices with similar properties. Management policies can then<br />

be defined for the group of objects as a whole, rather than for the individual devices. In the <strong>Precision</strong> Server,<br />

a hierarchy of Active Object Classes (AOCs) describes the characteristics and behavior of devices, and defines<br />

their management policies (that is, the rules that specify how the <strong>Precision</strong> Server handles a device of that<br />

class).<br />

Containment modelling is concerned with how devices are related to each other. The key benefit is that it<br />

models both the physical and logical relationships between devices.<br />

This section discusses the principles of object modelling and the containment model in more detail, before<br />

explaining how the <strong>Precision</strong> Server implements these concepts.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Active Object Classes and the <strong>Precision</strong> Server<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Introduction to the AOC Server<br />

The <strong>Precision</strong> Server uses a class hierarchy to model network devices. An example is shown in Figure 88.<br />

Figure 88: Class Hierarchy of Network Devices<br />

The management policies specified in the class hierarchy described how to treat instances of devices and how<br />

to handle events relating to them. In the example shown in Figure 88, you may specify that you want to poll<br />

all discovered devices once every minute. This could be accomplished by making the specification a<br />

management policy of the root class Core. Any class that is located under the Core automatically inherits<br />

this policy unless specifically overridden in its class file.<br />

One subclass of Core in this example is Device, where you can specify the management policies for a<br />

generic device. Further down the hierarchy, you can classify devices by manufacturer and assign<br />

manufacturer-specific policies. For example, you can assign a policy for Cisco devices based on the value of<br />

the IOSrev MIB variable. The Cisco class can be specialized even further by specifying the policies for<br />

managing Cisco 7500 routers that are carried out automatically if a Cisco 7500 router is found.<br />

401


Chapter 15: The Active Object Class Server<br />

402<br />

The policies for a Cisco 7500 router could include:<br />

1. Ping the router once every minute (inherited from the Device class).<br />

2. Examine the MIB variable IOSrev (inherited from the Cisco subclass).<br />

3. Apply the management policies that are specific to the Cisco 7500 subclass.<br />

The advantage of the class hierarchy approach is that you can share common management tasks for routers<br />

amongst all routers, while specializing some tasks for particular types of router.<br />

Multiple Inheritance<br />

The <strong>Precision</strong> Server does not permit multiple inheritance, which is the ability of a new class to inherit the<br />

characteristics from more than one class. This prevents the situation where classes cannot be effectively<br />

managed (as the class hierarchy grows) because of poorly designed interrelationships between classes.<br />

Active Classes<br />

A key feature of the <strong>Precision</strong> Server is that the object classes specified in the class hierarchy are active, that<br />

is, the class description contains the actions that are taken automatically upon instantiation of an object class.<br />

Note: Instantiation is the act of creating a new object based on a class template.<br />

The use of active classes means that, when a given device is discovered, the system looks at the corresponding<br />

class file to determine what action to take with regard to the device. For example, if the <strong>Precision</strong> Server<br />

comes across a Cisco 7500 router on the network, the Cisco 7500 class file description automatically tells<br />

the system how to manage the 7500 upon instantiation.<br />

Another key feature of the AOCs is that they are dynamic. Alterations made to the class descriptions with<br />

the MONITOR <strong>Configuration</strong> tool are automatically broadcast to other components by the <strong>Precision</strong><br />

Server class management system, CLASS. This means that the <strong>Precision</strong> Server can provide dynamic<br />

self-adapting network management because, as the <strong>Precision</strong> Server sees devices appearing and disappearing<br />

from the network topology, it automatically updates the network map and adopts the appropriate<br />

management policies.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


15.2 Starting CLASS<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Starting CLASS<br />

Micromuse recommends that CTRL, the domain process controller, is configured to start CLASS<br />

automatically at the appropriate time. CLASS can also be started manually with the following command<br />

line; optional arguments are shown enclosed in square brackets.<br />

ncp_class -domain DOMAIN_NAME [ -cachesize SIZE_IN_MB ] [ -cachepercent<br />

PERCENTAGE_OF_CACHE_IN_MEMORY ] [ -debug DEBUG ] [ -help ] [ -latency LATENCY ] [<br />

-read_aocs_from DIRECTORY_NAME ] [ -version ] [ -write_aocs_to DIRECTORY_NAME ]<br />

Table 112: Explanation of Command Line Options<br />

Option Explanation<br />

-cachesize SIZE_IN_MB Specifies the size of the cache in megabytes (MB).<br />

-cachepercent<br />

PERCENTAGE_OF_CACHE_IN_MEMORY<br />

Enables you to specify the ratio of the cache that is resident in memory<br />

to the cache that is resident on the hard disk.<br />

The ratio that you specify depends on the amount of memory that<br />

exists on the host machine and the number of processes it is running.<br />

The default value is 100% cache.<br />

-domain DOMAIN_NAME The name of the domain under which to run CLASS.<br />

-debug DEBUG The level of debugging output (1-4, where 4 represents the most<br />

detailed output).<br />

-help Displays the command line options. Does not start the component<br />

even if used in conjunction with other arguments.<br />

-latency LATENCY The maximum time in milliseconds (ms) that CLASS waits to connect<br />

to another <strong>Precision</strong> Server process by means of the messaging bus.<br />

This option is useful for large and busy networks where the default<br />

settings can cause processes to assume that there is a problem when<br />

in fact the communication delay is a result of network traffic.<br />

-read_aocs_from DIRECTORY_NAME The full path of the directory from which to read the AOC definitions.<br />

-version Displays the version number of the component. Does not start the<br />

component even if used in conjunction with other arguments.<br />

-write_aocs_to DIRECTORY_NAME The full path to which CLASS writes the current state of the Active<br />

Object Classes every minute.<br />

When CLASS is launched it obtains the AOC definitions either from a directory of AOC files or from the<br />

cache files contained in NCHOME/var/precision.<br />

Note: NCHOME is the environment variable that contains the path to the <strong>Netcool</strong> Suite home directory. For<br />

information on how this environment variable varies with platform, see Operating System Considerations on<br />

page 10.<br />

403


Chapter 15: The Active Object Class Server<br />

404<br />

You can control the location of the source AOC definitions using the command line options. The possible<br />

combinations are as follows:<br />

If you omit the -read_aocs_from argument from the command line, CLASS automatically<br />

reads the cache files from NCHOME/var/precision if they are present. If there are no valid<br />

cache files, CLASS uses the definitions in NCHOME/precision/aoc.<br />

If you specify a directory using the -read_aocs_from option, CLASS initializes itself with the<br />

AOCs located in the specified directory. CLASS automatically moves any existing cache files to a<br />

backup directory. You should not normally use the -read_aocs_from argument when you<br />

restart CLASS, as any changes that were made using the MONITOR <strong>Configuration</strong> tool and written<br />

to the cache are lost.<br />

Regardless of the options specified, CLASS generates a warning if the files within the<br />

NCHOME/precision/aoc directory are more recent than the cache files contained within the<br />

NCHOME/var/precision directory.<br />

If you specify a -write_aocs_to directory, CLASS not only updates its cache during its operation, but<br />

also regularly writes a copy of the complete AOC definitions to the specified directory. If CLASS dies, you<br />

have an up-to-date version of the AOCs in a text format in addition to the cache.<br />

It is not advisable to write AOCs back to the directory from which they are read, since this would overwrite<br />

the original AOCs.<br />

Prerequisites for Running CLASS<br />

There are no prerequisites for running CLASS.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


15.3 The CLASS Database<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

The CLASS Database<br />

The class database enables CLASS to manage the Active Object Classes (AOCs). It consists of two main<br />

tables, activeClasses and staticClasses, which are populated at startup as CLASS reads the<br />

AOC definitions. The two tables represent two different views of the class hierarchy.<br />

A third table, the policies table, is populated and used internally within the MONITOR <strong>Configuration</strong><br />

tool.<br />

The class Database<br />

Table 113 describes the class database and its tables.<br />

Table 113: Synopsis of the class database and its tables<br />

Database class<br />

Defined in NCHOME/etc/precision/ClassSchema.cfg<br />

Fully qualified database table names class.activeClasses<br />

The activeClasses Table<br />

class.staticClasses<br />

class.policies<br />

The activeClasses table, described in Table 114, holds the full definition of every active AOC.<br />

Table 114: class.activeClasses Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

ClassName PRIMARY KEY<br />

NOT NULL<br />

UNIQUE<br />

Text Unique name of the AOC.<br />

SuperClass NOT NULL Text Name of the parent AOC.<br />

Dictionary List of text List of data dictionaries used by the AOC.<br />

Instantiate NOT NULL Text Rules for instantiating the AOC.<br />

Extensions Externally defined<br />

extension data type<br />

Object of<br />

extension data<br />

type<br />

List of extensions contained within the AOC.<br />

VisualIcon NOT NULL Text The icon associated with this AOC (to be displayed<br />

in a GUI such as the <strong>Precision</strong> Desktop).<br />

405


Chapter 15: The Active Object Class Server<br />

406<br />

Table 114: class.activeClasses Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

MenuRules Externally defined<br />

menurule data type<br />

Menu Externally defined<br />

menu data type<br />

ActionType Externally defined<br />

actions data type<br />

The staticClasses Table<br />

List of object<br />

data type<br />

(object is of the<br />

menurule data<br />

type)<br />

List of object<br />

data type<br />

(object is of the<br />

menu data<br />

type)<br />

A list of menu rules associated with the AOC.<br />

List of menu options available in the GUI for this<br />

AOC.<br />

Integer List of action types to be taken.<br />

The staticClasses table, described in Table 115, holds the contents of a raw AOC as it is defined in<br />

the .aoc file.<br />

Table 115: class.staticClasses Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

ClassName PRIMARY KEY<br />

NOT NULL<br />

UNIQUE<br />

Text Unique name of the AOC.<br />

SuperClass NOT NULL Text Name of the parent AOC.<br />

Dictionary List of text List of data dictionaries used by the AOC.<br />

Instantiate NOT NULL Text Rules for instantiating the AOC.<br />

Extensions Externally defined<br />

extension data type<br />

Object of<br />

extension data<br />

type<br />

List of extensions contained within the AOC.<br />

VisualIcon NOT NULL Text The icon associated with this AOC.<br />

MenuRules Externally defined<br />

menurule data type<br />

List of object data<br />

type (object is of<br />

the menurule<br />

data type)<br />

A list of menu rules associated with the AOC.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 115: class.staticClasses Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

Menu Externally defined<br />

menu data type<br />

ActionType Externally defined<br />

actions data type<br />

The policies Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

List of object data<br />

type (object is of<br />

the menu data<br />

type)<br />

The CLASS Database<br />

List of menu options available in a GUI for this<br />

AOC.<br />

Integer A list of action types to be taken.<br />

The policies table, described in Table 116, stores a series of predefined management policies that can<br />

be configured in the MONITOR <strong>Configuration</strong> tool. These policies provide a high level interface into<br />

groups of network management policies that are supplied with the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> and that can be<br />

turned on and off, providing a limited level of flexibility to end users that is suitable for the majority of<br />

networks and much simpler to configure than editing every available parameter.<br />

Since the policies are predefined and supplied with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> you do not normally need to<br />

configure inserts into the policies table. Additionally, although the policies are included with the<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>, this functionality is only applicable to users of the RCA Engine.<br />

Table 116: class.policies Database Table Schema<br />

Column name Constraints Data type Description<br />

PolicyName PRIMARY KEY<br />

NOT NULL<br />

UNIQUE<br />

Text Unique name of this set of management<br />

policies.<br />

PolicyDescription Text A description of the policy that appears in<br />

the Policy Editor of the MONITOR<br />

<strong>Configuration</strong> Tool.<br />

PolicyScope Text The AOC definition that contains the rule<br />

sets, event correlation rules and poll<br />

definitions that are used in this policy.<br />

PollDefinitions Externally defined<br />

polldefinition type<br />

RuleDefinitions Externally defined<br />

ruledefinition type<br />

ControlDefinitions Externally defined<br />

controldefinition<br />

type<br />

List of type object<br />

(object is of the<br />

polldefinition type)<br />

List of type object<br />

(object is of the<br />

ruledefinition type)<br />

List of type object<br />

(object is of the<br />

controldefinition type)<br />

A list of poll definitions used in this policy<br />

and descriptions to be displayed in the<br />

MONITOR <strong>Configuration</strong> tool.<br />

A list of event correlation rules used in this<br />

policy.<br />

A list of the controls associated with this<br />

policy that are available in the MONITOR<br />

<strong>Configuration</strong> tool.<br />

407


Chapter 15: The Active Object Class Server<br />

408<br />

The description fields in the policies table contain text that appears in the MONITOR <strong>Configuration</strong><br />

tool. You can configure the appearance of this text using HTML tags. The HTML tags available are listed<br />

in Table 117.<br />

Table 117: HTML Tags Available to Configure the Appearance of Text in the MONITOR <strong>Configuration</strong> Tool<br />

HTML tag Function<br />

Encloses bold text.<br />

Encloses text in italics.<br />

Encloses underlines text.<br />

Encloses subscript text.<br />

Encloses superscript text.<br />

Inserts a horizontal line.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


15.4 Manually Editing AOCs<br />

!<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Manually Editing AOCs<br />

The recommended method of editing AOC files is using the MONITOR <strong>Configuration</strong> tool. For detailed<br />

information on using the MONITOR <strong>Configuration</strong> tool, see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Monitoring and RCA<br />

<strong>Guide</strong>. It is possible to edit AOCs using vi or another text editor of your choice; however, this should not<br />

be done while any <strong>Precision</strong> Server or RCA Engine components are running.<br />

Warning: Whichever editing method you choose, Micromuse strongly recommend that you make a backup<br />

of any original AOCs you intend to edit. If you inadvertently overwrite an original, the backup copy can be<br />

restored.<br />

To create a copy of all the AOCs in the aoc directory, type the following commands:<br />

cd NCHOME/precision<br />

cp -pr aoc my_aocs<br />

This creates a copy of the contents of NCHOME/precision/aoc (the directory that contains all the<br />

AOC definitions by default) in a new directory, NCHOME/precision/my_aocs. You can now edit the<br />

class definitions in my_aocs, leaving your original definitions unaltered. When you start CLASS, you can<br />

do so using the -read_aocs_from option to specify the NCHOME/precision/my_aocs<br />

directory, so that your edited class definitions are read and broadcast to all other processes.<br />

If any problems occur as a result of editing an AOC definition, the file can be restored to its pre-edit status<br />

by typing the following commands:<br />

cd NCHOME/precision<br />

cp -pr aoc/name_of_original_file.aoc<br />

my_aocs/name_of_corrupted_file.aoc<br />

The Architecture of an AOC<br />

This section describes the syntax necessary for understanding the architecture of an AOC.<br />

Preliminaries<br />

To fully understand the functionality of the AOCs, review the sections of this guide that cover language<br />

prerequisites, including OQL and the semantics of the eval statement.<br />

409


Chapter 15: The Active Object Class Server<br />

410<br />

Basic Syntax<br />

The basic syntax and naming conventions described in Table 118 are used throughout the AOCs:<br />

Table 118: Syntax characters used in AOCs<br />

Character Name Meaning<br />

[ ] Square brackets Typically defines a list of items. There can be zero or more items within the<br />

brackets and each item must be separated by a single comma.<br />

{ } Curly brackets Typically defines an object.<br />

" " Double quotes Typically used to enclose assignments to various attributes (of datatype text)<br />

within an AOC. As a general rule all assignments use double quotes.<br />

' ' Single quotes Typically used to enclose evaluations of column names or system variables<br />

within an eval statement. Single quotes can be used within double quotes,<br />

but double quotes cannot be used within single quotes.<br />

, Single comma Typically used either as a separator between elements of a list or to terminate<br />

an assignment to a particular attribute.<br />

; Semi colon Typically used to terminate assignments to the major components listed<br />

below.<br />

AOC Components - An Overview<br />

The major components of the AOC, and their names as they appear in the AOC, are:<br />

The name of the active object class (active object)<br />

The super class (super_class)<br />

The data dictionary (data_dictionary)<br />

The instantiate rule (instantiate_rule)<br />

The application extensions (extension for Fault)<br />

– The event correlation rules (rules)<br />

– The poll definitions (poll_list)<br />

The visual icon (visual_icon)<br />

The menu methods (menu_rules)<br />

A Complete AOC File Explained<br />

This section deconstructs and analyzes an entire AOC file.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The Name of the Active Object<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Manually Editing AOCs<br />

The active object attribute declares the name of the current class. Any unique text string is valid<br />

between the double quotes. The entire AOC file is contained within the first pair of curly brackets. A<br />

semicolon follows the final bracket to terminate the AOC.<br />

active object "Core"<br />

{<br />

super_class = " ";<br />

data_dictionary = [ ];<br />

...<br />

...<br />

menu_rules = { };<br />

};<br />

The Super Class<br />

Defines the name of the AOC from which the current class inherits. The name between the double quotes<br />

must be the name of an already-defined AOC. In the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> AOC hierarchy, Core is the only<br />

class that has an unassigned super_class. When editing any other class the super_class must never<br />

be left empty.<br />

super_class = "";<br />

The Data Dictionary<br />

Contains the ASN.1 descriptions of all the data types used by the AOC.<br />

data_dictionary = [ "rivCore", "rivCoreAttributes", "rfc1213" ];<br />

The Instantiate Rule<br />

A logical test against the attributes of the record of an entity in the master.EntityByName database<br />

of MODEL that defines how the system determines which class an object belongs to. The schema of the<br />

master.EntityByName database is defined in ModelSchema.cfg. If an object meets the<br />

instantiation criteria for more than one class, it automatically instantiates to the lowest leftmost class in the<br />

hierarchy.<br />

instantiate_rule = "EntityOID like '.*'"; // this instantiates<br />

//everything by default<br />

411


Chapter 15: The Active Object Class Server<br />

412<br />

The Application Extensions<br />

The extensions are additions to the AOCs used by the components of the RCA Engine. The RCA Engine<br />

extensions are:<br />

Event correlation rules (rules)<br />

Poll definitions (poll_list)<br />

The RCA Engine extensions appear in the AOC as follows.<br />

extension for Fault = {<br />

};<br />

rules = [],<br />

poll_list = []<br />

The event correlation rules are contained within the first pair of square brackets. The poll definitions are<br />

contained within the second pair of square brackets.<br />

The Event Correlation Rules<br />

The event correlation rules determine how AMOS (the event correlation engine) correlates events into alerts.<br />

Defining Multiple Event Correlation Rules<br />

The table below shows the syntax for defining N event correlation rules.<br />

rules = [<br />

],<br />

{ path/ruleset/rulename 1 },<br />

....<br />

....<br />

{ path/ruleset/rulename N }<br />

The event correlation rules are written in individual text files. Only the filename of the rule is specified in<br />

the AOC. By default, the full filename and path of a rule are specified as follows:<br />

NCHOME/precision/aoc/rca_rules/ruleset/rulename.rule<br />

You can keep your event correlation rules in a different directory to the above. In this case, you must provide<br />

an absolute path to the rule in the AOC. Within this section of the AOCs, absolute path names must begin<br />

with a forward slash '/', otherwise they are treated as being relative to<br />

NCHOME/precision/aoc/rca_rules.<br />

For a detailed explanation of the function and syntax of every attribute and sub-attribute of the event<br />

correlation rules, see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Monitoring and RCA <strong>Guide</strong>.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The Poll Definitions<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Manually Editing AOCs<br />

The poll definitions specify the type of Polling agent used to poll the network, the agent executable and the<br />

stitcher used. They also define variables that the stitcher can access.<br />

poll_list = [<br />

],<br />

{ poll 1 },<br />

....<br />

....<br />

{ poll N }<br />

AOC Syntax and Defining Multiple Poll Definitions<br />

Within the square brackets there can be zero or more poll definitions. Each poll definition consists of a<br />

number of attributes, which may be boolean integers, text strings, or lists. Which attributes are used depends<br />

on the type of poll being conducted. For a full explanation of the function and attributes of the poll<br />

definitions, see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Monitoring and RCA <strong>Guide</strong>.<br />

A simplified example poll definition is given below.<br />

poll_list = [<br />

] // end of poll_list<br />

{ // start of first poll definition<br />

Attribute 1,<br />

Attribute 2,<br />

...<br />

Attribute n,<br />

} //end of first poll definition<br />

413


Chapter 15: The Active Object Class Server<br />

414<br />

The Visual Icon<br />

The visual icon refers to a *.xpm image file in the NCHOME/precision/images directory. This icon<br />

is displayed in the MONITOR <strong>Configuration</strong> tool. The name between the double quotes must be a valid<br />

image filename in this directory. If the double quotes are left unassigned, the icon is inherited from the<br />

parent class.<br />

visual_icon = "DefaultIcon";<br />

Menu Methods<br />

The menu methods enable users to interact with objects by selecting various menu actions from the<br />

Operator menu in the <strong>Precision</strong> Desktop. These menu actions are defined by the menu methods.<br />

menu_rules = [<br />

];<br />

{ rule 1 },<br />

....<br />

....<br />

{ rule N }<br />

AOC Syntax and Defining Multiple Menu Methods<br />

Within the square brackets there can be zero or more menu methods. For more information on the<br />

configuration of menu methods, see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Desktop User <strong>Guide</strong>.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


16. TrapMux.fm July 5, 2005<br />

Chapter 16: The SNMP Trap Multiplexer<br />

This chapter describes the SNMP trap multiplexer, its function and its configuration.<br />

This chapter contains the following sections:<br />

SNMP Trap Multiplexing on page 416<br />

Starting TrapMux on page 417<br />

Configuring TrapMux on page 418<br />

Replaying Traps on page 422<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 415


Chapter 16: The SNMP Trap Multiplexer<br />

16.1 SNMP Trap Multiplexing<br />

416<br />

In most networks, traps arrive on a single default port (usually port 162). This can cause problems if you<br />

have more than one process that needs to listen for traps, as only one process can bind to one port at a time.<br />

An example of this might be where you want to have the Trap Monitoring agent and the DISCO Trap agent<br />

both listening for traps.<br />

The solution is to have ncp_trapmux listen to a single port and forward all the traps it receives to a set<br />

of host/socket pairs or, using Rendezvous, to a set of domains.<br />

By default, TrapMux listens for traps on port 162, but you can change this by inserting an alternative port<br />

number into the trapMux.config database table.<br />

TrapMux can also store trap events in a binary format file (containing trap and timing information) that can<br />

be used to recreate the trap events in the order they occurred at a later date. This is useful mainly for<br />

debugging purposes.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


16.2 Starting TrapMux<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Starting TrapMux<br />

It is good practice to ensure that CTRL is configured to launch and manage TrapMux. TrapMux can also<br />

be started manually using the following command line; optional arguments are shown enclosed in square<br />

brackets.<br />

ncp_trapmux –domain DOMAIN_NAME [ -debug DEBUG ] [ -help ] [ -version ] [ -latency<br />

LATENCY ]<br />

Table 119: Explanation of Command Line Options<br />

Option Explanation<br />

-domain DOMAIN_NAME The name of the domain under which to run TrapMux.<br />

-debug DEBUG The level of debugging output (1-4, where 4 represents the most detailed output).<br />

-help Displays the command line options. Does not start the component even if used in<br />

conjunction with other arguments.<br />

-latency LATENCY The maximum time in milliseconds (ms) that TrapMux waits to connect to another<br />

<strong>Precision</strong> Server process by means of the messaging bus. This option is useful for<br />

large and busy networks where the default settings can cause processes to assume<br />

that there is a problem when in fact the communication delay is a result of network<br />

traffic.<br />

-version Displays the version number of the component. Does not start the component<br />

even if used in conjunction with other arguments.<br />

417


Chapter 16: The SNMP Trap Multiplexer<br />

16.3 Configuring TrapMux<br />

418<br />

This section gives some examples of how you might configure TrapMux and describes how to control<br />

TrapMux using the OQL Service Provider. Schemas of the TrapMux databases are also included.<br />

Example TrapMux <strong>Configuration</strong><br />

A typical session with ncp_trapmux would be as follows:<br />

1. Edit the schema file, NCHOME/etc/precision/TrapMuxSchema.cfg, to contain a set of<br />

host/socket pairs and a set of Rendezvous domains. This can be done by appending the following<br />

lines to the schema:<br />

insert into trapmux.sinkDomains (domain) values ("Test1");<br />

insert into trapmux.sinkDomains (domain) values ("Test2");<br />

insert into trapmux.sinkHosts (host, port) values ("test-host1", 5999);<br />

insert into trapmux.sinkHosts (host, port) values ("test-host2", 5999);<br />

Note: NCHOME is the environment variable that contains the path to the <strong>Netcool</strong> Suite home<br />

directory. For information on how this environment variable varies with platform, see Operating System<br />

Considerations on page 10.<br />

2. Run TrapMux using the following command lines:<br />

ncp_trapmux -domain TEST1<br />

ncp_trapmux -domain TEST2<br />

In the above example, when a trap is sent to the machine that is running TrapMux:<br />

It is forwarded to test-host1, port 5999 and test-host2, port 5999.<br />

It is sent on the TEST1 and TEST2 domains.<br />

Controlling TrapMux Using the OQL Service Provider<br />

You can control TrapMux by logging into the OQL Service Provider and issuing commands to the<br />

trapMux.command database table. You can log into the OQL Service Provider using the following<br />

command, replacing DOMAIN_NAME and USER_NAME with your domain and usernames respectively:<br />

ncp_oql -domain DOMAIN_NAME -service TrapMux -username USER_NAME<br />

You can now issue commands such as the following to the TrapMux daemon.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Start Capturing Traps<br />

The following insert instructs trapMux to start capturing traps:<br />

|phoenix:1.> insert into trapMux.command<br />

|phoenix:2.> (command) values( "capture_start" );<br />

|phoenix:3.> go<br />

Stop Capturing Traps<br />

The following insert instructs trapMux to stop capturing traps:<br />

|phoenix:1.> insert into trapMux.command<br />

|phoenix:2.> (command) values( "capture_stop" );<br />

|phoenix:3.> go<br />

Print Traps to a File<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring TrapMux<br />

In the following example, FILENAME specifies the file to which the output is written, although if it is not<br />

specified, NCHOME/etc/precision/trapmux.out is used.<br />

|phoenix:1.> insert into trapMux.command<br />

|phoenix:2.> (command, fileName) values( "print", FILENAME );<br />

|phoenix:3.> go<br />

The trapMux Database Schema<br />

Table 120 describes the trapMux database.<br />

Table 120: Synopsis of the trapMux database<br />

Database name trapMux<br />

Defined in NCHOME/etc/precision/TrapMuxSchema.cfg<br />

Fully qualified database table names trapmux.config<br />

trapmux.command<br />

trapmux.sinkDomains<br />

trapmux.sinkHosts<br />

419


Chapter 16: The SNMP Trap Multiplexer<br />

420<br />

The config Table<br />

The config table, described in Table 121, contains the main configuration data for the TrapMux<br />

daemon.<br />

Table 121: trapMux.config Database Table Schema<br />

Column name Constraints Data type Description<br />

port Integer The port on which to listen for traps.<br />

The command Table<br />

The command table, described in Table 122, is an active table used to control the TrapMux daemon with<br />

a series of commands. The commands are described in Table 123.<br />

Table 122: trapMux.command Database Table Schema<br />

Column name Constraints Data type Description<br />

command NOT NULL Text The command to issue to the TrapMux daemon.<br />

fileName Text The file on which to perform the command (where<br />

applicable).<br />

The commands that can be issued to TrapMux are described in Table 123.<br />

Table 123: Commands Used to Control the TrapMux Daemon (1 of 2)<br />

Command Function and Default Filename<br />

capture_start Begin logging traps to memory. The default filename is NULL (not required).<br />

capture_stop Stop logging traps to memory. The default filename is NULL (not required).<br />

capture_continue Continue logging traps to memory. The default filename is NULL (not required).<br />

capture_empty Clear memory of all currently logged traps. The default filename is NULL (not required).<br />

rehash Shut down the TrapMux daemon and clear all memory. The daemon then rereads the<br />

configuration file and starts up again. The default filename is NULL (not required).<br />

restart Set the daemon to normal mode. The default filename is NULL (not required).<br />

play Parse the human readable trap file and ‘play’ the traps with a small delay between traps. The<br />

default filename is NCHOME/etc/precision/trapmux.txt.<br />

play timed Parse the human readable trap file and ‘play’ the traps in the order of the time they were<br />

received, with the same delays between traps. The default filename is<br />

NCHOME/etc/precision/trapmux.txt.<br />

replay Either read the traps in memory or read the raw trap packet information in the specified file<br />

and replay the traps with a small delay between each. The default filename is NULL (play from<br />

memory).<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table 123: Commands Used to Control the TrapMux Daemon (2 of 2)<br />

Command Function and Default Filename<br />

The sinkDomains Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Configuring TrapMux<br />

replay timed Either read the traps in memory or read the raw trap packet information in the specified file<br />

and replay the traps in the order of the time they were received with the same delays<br />

between traps. The default filename is NULL (play from memory).<br />

print Print the current traps in memory in a non-readable format to the specified file. Time<br />

information is encoded with the trap. The default filename is<br />

NCHOME/etc/precision/trapmux.out.<br />

The sinkDomains table, described in Table 124, contains details of the domains to which traps are to be<br />

forwarded.<br />

Table 124: trapMux.sinkDomains Database Table Schema<br />

Column name Constraints Data type Description<br />

domain NOT NULL Text The domain name to which to forward traps.<br />

The sinkHosts Table<br />

The sinkHosts table, described in Table 125, contains details of the hosts to which traps are to be<br />

forwarded and their port numbers.<br />

Table 125: trapMux.sinkHosts Database Table Schema<br />

Column name Constraints Data type Description<br />

host NOT NULL Text The host name or <strong>IP</strong> address to which to forward traps.<br />

port NOT NULL Integer The corresponding port number.<br />

421


Chapter 16: The SNMP Trap Multiplexer<br />

16.4 Replaying Traps<br />

422<br />

The TrapMux daemon can replay traps using a binary file or a human readable file, however, TrapMux can<br />

only generate binary files. If you have created a text readable file for traps, you can use the TrapMux daemon<br />

to recreate the trap events in the order specified in this file.<br />

Replay the File<br />

The following example insert instructs trapMux to replay traps from a file.<br />

|phoenix:1.> insert into trapMux.command<br />

|phoenix:2.> (command, fileName) values( "replay", "trapmux.out" );<br />

|phoenix:3.> go<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


A. <strong>Discovery</strong>_databases.fm August 16, 2006<br />

Appendix A: The <strong>Discovery</strong> Databases<br />

This chapter describes the databases used by DISCO, the component responsible for discovering network<br />

device existence and connectivity.<br />

This chapter contains the following sections:<br />

Types of Databases on page 424<br />

Failover Recovery on page 426<br />

<strong>Configuration</strong> Database on page 431<br />

<strong>Discovery</strong> Scope Database on page 442<br />

Process Management Databases on page 448<br />

Subprocess Databases on page 454<br />

Tracking <strong>Discovery</strong> Databases on page 460<br />

Topology Databases on page 470<br />

Rediscovery Database on page 475<br />

Additional Databases on page 476<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 423


Appendix A: The <strong>Discovery</strong> Databases<br />

A.1 Types of Databases<br />

424<br />

DISCO stores its configuration, management and operational information in various specialized databases,<br />

which are introduced below. You can interrogate these databases by logging into the service Disco using<br />

the OQL Service Provider. The OQL Service Provider is described in full in Chapter 5: Querying<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Databases on page 165.<br />

The DISCO databases can either be active or passive. When data is inserted into an active database, an action<br />

is automatically triggered; for example, another table is populated with data, or a script or stitcher is<br />

launched.<br />

This section describes the databases of DISCO in functional groups.<br />

DISCO <strong>Configuration</strong> Databases<br />

You can use the disco database to configure the general options for the discovery process, and to track the<br />

discovery process.<br />

<strong>Discovery</strong> Scope Databases<br />

The scope database is responsible for limiting the extent or reach of a discovery. The range of <strong>IP</strong> addresses<br />

and devices that can potentially be considered by the discovery process is unlimited, so unless the scope of<br />

the discovery is restricted, DISCO would eventually attempt to discover the Internet. Using the scope<br />

database you can configure a range of protocols and attributes that define zones that are to be included or<br />

excluded from the discovery process.<br />

Process Management Databases<br />

The agents and stitchers databases contain definition and configuration information for the agents<br />

and stitchers, such as a list of the types of devices that are sent to any given agent. The information in these<br />

databases is extracted by DISCO from the NCHOME/precision/disco/agents and<br />

NCHOME/precision/disco/stitchers directories.<br />

Note: NCHOME is the environment variable that contains the path to the <strong>Netcool</strong> Suite home directory. For<br />

information on how this environment variable varies with platform, see Operating System Considerations on<br />

page 10.<br />

The stitchers databases also contain information about when any given stitcher is triggered; for<br />

example, ‘start stitcher X upon completion of agent Y’ or ‘start stitcher X upon the insertion of an entry into<br />

database table Z’. It is therefore possible to start stitchers on demand by inserting their name into the<br />

appropriate actions table using OQL. The necessary agents are started automatically when a device is<br />

inserted into the despatch table of the agent.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


DISCO Subprocess Databases<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Types of Databases<br />

The finders, Details and agent databases are used actively during the discovery by the DISCO<br />

subprocesses to store information retrieved from the network.<br />

The finders, Details and AssocAddress agents must always be run, so their databases are defined in the<br />

DiscoSchema.cfg configuration file. The databases for the rest of the discovery agents are created as<br />

appropriate based on a template that is defined in the DiscoSchema.cfg configuration file.<br />

Databases for Tracking the <strong>Discovery</strong><br />

The workingEntities, instrumentation and translations databases record the known<br />

network entities and technologies, and can be used to track the progress of the discovery.<br />

The instrumentation database is a record of the different technologies that have been discovered in<br />

the network; for example, Virtual Local Area Network (VLAN) IDs and subnets.<br />

Topology Databases<br />

The fullTopology database is the first of the two topology databases. On completion of the data<br />

collection phase of the discovery, the stitchers merge the information that has been retrieved by the discovery<br />

agents to form a single topology, which at this stage is in a name-to-name format.<br />

The second topology database is the scratchTopology database, which holds the containment model<br />

deduced from the fullTopology database (and created by stitchers). This is the version of the topology<br />

that is sent to the MODEL component.<br />

Rediscovery Database<br />

The rediscoveryStore database holds information from previous discovery cycles that can be used<br />

for comparison purposes during a full or partial rediscovery.<br />

Additional Databases<br />

Further databases are also created by the stitchers when needed; for example, various topologies such as layer<br />

2, layer 3 and ATM have their own databases defined within the stitchers.<br />

425


Appendix A: The <strong>Discovery</strong> Databases<br />

A.2 Failover Recovery<br />

426<br />

This section describes the failover database. For information on starting and configuring failover,<br />

together with a full set of failover architecture diagrams, see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Installation and<br />

Deployment <strong>Guide</strong>.<br />

If the m_UseFailover column of the disco.config table is set to 1 (true), data is cached during<br />

the discovery process to enable data recovery in the event that DISCO fails. A discovery running in failover<br />

mode is slower than a standard discovery, because failover recovery involves storing data on the disk<br />

throughout the discovery process.<br />

DISCO failover recovery is not to be confused with agent and finder failover recovery, which are configured<br />

directly from the disco.config database. If selected, agent and finder failover recovery operate<br />

regardless of whether DISCO failover recovery is implemented.<br />

Ignored Cached Data<br />

If DISCO is restarted in failover recovery mode, any cached data for the following tables are ignored:<br />

disco.config<br />

disco.managedProcesses<br />

disco.agents<br />

the entire scope database<br />

failover.config<br />

failover.doNotCache<br />

failover.restartPhaseAction<br />

For the above tables, only the insertions specified in the schema file at the time of the restart are registered.<br />

The failover Database Schema<br />

Table A1 describes the failover database.<br />

Table A1: Synopsis of the failover Database (1 of 2)<br />

Database failover<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table A1: Synopsis of the failover Database (2 of 2)<br />

Defined in NCHOME/etc/precision/DiscoSchema.cfg<br />

Fully qualified database table names failover.config<br />

The config Table<br />

The config table is described in Table A2.There must never be more than one insert into the<br />

failover.config table.<br />

Table A2: failover.config Database Table Schema<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

failover.status<br />

failover.findRateDetails<br />

failover.doNotCache<br />

failover.restartPhaseAction<br />

Column name Constraints Data type Description<br />

m_InitialiseFromCache Externally<br />

defined<br />

Boolean data<br />

type<br />

Boolean<br />

Integer<br />

Failover Recovery<br />

Flag indicating whether to use the data that already<br />

exists in the cache:<br />

(0) Do not use cached data<br />

(1) Use cached data if any exists<br />

m_NumberOfRetries Integer The number of times to try using the cached data<br />

before giving up (that is, the number of subsequent<br />

times that DISCO can be restarted before starting<br />

with a clean slate).<br />

If no value is specified, DISCO always starts with<br />

clear databases.<br />

m_StoreEveryNthDevice Default = 10 Integer How often the findRateDetails table is to be<br />

updated. After the specified number of devices have<br />

been found the table is updated.<br />

427


Appendix A: The <strong>Discovery</strong> Databases<br />

428<br />

The status Table<br />

The status table is described in Table A3. This table is active, so you must not configure inserts into it.<br />

Table A3: failover.status Database Table Schema<br />

Column name Constraints Data type Description<br />

m_NumberOfAttempts NOT NULL<br />

PRIMARY KEY<br />

The findRateDetails Table<br />

The findRateDetails table is described in Table A4. The findRateDetails table gives details<br />

of devices that have been found so far. This table is active and inserts must not be made in the schema file;<br />

the table is populated automatically.<br />

Table A4: failover.findRateDetails Database Table Schema<br />

Column name Constraints Data type Description<br />

m_StartTime NOT NULL<br />

PRIMARY KEY<br />

Integer The number of times that the DISCO process has<br />

attempted to restart with cached data.<br />

This column is set to 1 when DISCO is first run in<br />

failover recovery mode and incremented each time<br />

DISCO is subsequently run in failover mode.<br />

Text The time at which the first device was found.<br />

m_LastFindTime Text The time at which the last device was found.<br />

m_DevicesFound Integer The number of devices found so far.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The doNotCache Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Failover Recovery<br />

To avoid caching a given table, it can be specified in the doNotCache table. This ensures that unnecessary<br />

cache files are not created, such as those for temporary tables defined within stitchers. The doNotCache<br />

table is shown in Table A5.<br />

Table A5: failover.doNotCache Database Table Schema<br />

Column name Constraints Data type Description<br />

m_DatabaseName NOT NULL Text The name of any database that is not to be cached<br />

during failover recovery.<br />

The restartPhaseAction Table<br />

The following tables must be cached in order to use the<br />

failover recovery mode, and therefore must not be listed<br />

in this table:<br />

disco.status<br />

failover.status<br />

The following tables must be cached, and therefore<br />

must not be listed in this table:<br />

The agent despatch and returns tables.<br />

finders.processing<br />

translations.ipToBaseName<br />

m_TableName NOT NULL Text The name of the table within the database specified in<br />

m_DatabaseName that is not to be cached.<br />

The restartPhaseAction table is shown in Table A6. This table contains the set of stitchers that are<br />

executed when restarting in a given discovery phase. Multiple stitchers can be specified, but they are executed<br />

in an arbitrary order. It is recommended that at least the FinalPhase stitcher is executed when restarting<br />

in the topology creation phase.<br />

Table A6: failover.restartPhaseAction Database Table Schema<br />

Column name Constraints Data type Description<br />

Use * to indicate all the tables of the database.<br />

m_RestartPhase NOT NULL Integer The phase in which DISCO is restarted.<br />

m_ExecuteStitcher NOT NULL Text The stitcher that is to be executed in this<br />

phase.<br />

429


Appendix A: The <strong>Discovery</strong> Databases<br />

Example failover Database <strong>Configuration</strong><br />

430<br />

The following are example OQL inserts into the failover database tables that are appended to the<br />

DiscoSchema.cfg to configure DISCO when it is launched.<br />

Example <strong>Configuration</strong> of the failover.config Table<br />

The following OQL insert indicates that:<br />

Data already in the cache is used.<br />

DISCO can be restarted up to three times before any cached data is ignored.<br />

These values are only used if disco.config.m_UseFailover=1.<br />

insert into failover.config<br />

(<br />

m_InitialiseFromCache,<br />

m_NumberOfRetries<br />

)<br />

values<br />

( 1, 3 );<br />

Example <strong>Configuration</strong> of the failover.doNotCache Table<br />

The following inserts specify that the following tables are not to be cached:<br />

The disco.config table.<br />

All the tables of the instrumentation database.<br />

insert into failover.doNotCache<br />

(<br />

m_DatabaseName,<br />

m_TableName<br />

)<br />

values<br />

(<br />

'disco', 'config'<br />

);<br />

insert into failover.doNotCache<br />

(<br />

m_DatabaseName, m_TableName<br />

)<br />

values<br />

(<br />

'instrumentation', '*'<br />

);<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


A.3 <strong>Configuration</strong> Database<br />

Table A7 describes disco, the DISCO configuration database.<br />

Table A7: Synopsis of the disco Database<br />

Database disco<br />

Defined in NCHOME/etc/precision/DiscoSchema.cfg<br />

Fully qualified database table names disco.config<br />

The config Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

disco.managedProcesses<br />

disco.status<br />

disco.agents<br />

disco.NATStatus<br />

<strong>Configuration</strong> Database<br />

The config table, described in Table A8, configures the general operation of the discovery process.<br />

Table A8: disco.config Database Table Schema (1 of 4)<br />

Column name Constraints Data type Description<br />

m_NothngFndPeriod Float The maximum time lapse, in seconds, between<br />

device discovery necessary to fulfil the find-rate<br />

depreciation criteria for the completion of the<br />

device discovery phase.<br />

m_AvgeFindPeriod Float The average amount of time between the<br />

discovery of devices needed to fulfil the find rate<br />

depreciation criteria for the completion of the<br />

device discovery phase.<br />

m_PendingPerCent Integer The maximum allowed ratio of pending devices<br />

to processing devices. A breach of this threshold<br />

condition instigates a full discovery (rather than<br />

a partial rediscovery).<br />

m_CycleLimit Integer The number of discovery cycles to complete<br />

before instigating a full rediscovery (used by the<br />

FinalPhase stitcher).<br />

m_RestartAgents Integer A flag that determines whether DISCO attempts<br />

to restart discovery agents that fail during their<br />

operation.<br />

m_RestartFinders Integer Flag to determine whether to restart a failed<br />

finder.<br />

431


Appendix A: The <strong>Discovery</strong> Databases<br />

432<br />

Table A8: disco.config Database Table Schema (2 of 4)<br />

Column name Constraints Data type Description<br />

m_DirScanIntvl Integer The time period between scans for<br />

modifications to the stitcher and agent files.<br />

m_UseFailover Externally<br />

defined<br />

Boolean data<br />

type<br />

Boolean<br />

Integer<br />

If changes are found, the stitcher and agent<br />

definitions are loaded and the appropriate<br />

changes are made to the stitchers and agents.<br />

Flag indicating whether or not failover recovery<br />

is to be implemented. Note that a discovery in<br />

failover recovery mode is slower than a standard<br />

discovery.<br />

(1) Use failover. The tables that are defined in<br />

the failover database are cached and DISCO can<br />

be restarted at any point.<br />

(0) Do not use failover. No tables are cached<br />

during the discovery and DISCO ignores any<br />

existing cache files if it is restarted.<br />

m_MinResidentSize Integer The minimum initial size of DISCO in kilobytes<br />

(KB). The maximum value you can specify is 500<br />

MB (512 000 KB).<br />

m_RebuildLayers Externally<br />

defined<br />

Boolean data<br />

type<br />

Boolean<br />

Integer<br />

Specifying an initial value speeds up the<br />

discovery by allocating the memory of DISCO in<br />

one block.<br />

Flag indicating whether or not to rebuild<br />

topology layers following partial rediscovery,<br />

that is, rediscovery of one or more individual<br />

devices.<br />

(1) Rebuild the layers. Following partial<br />

rediscovery, topology layers stitchers are run.<br />

Partial rediscovery takes longer but results in a<br />

complete topology.<br />

(0) Do not rebuild the layers. Following partial<br />

rediscovery, topology layers stitchers are not<br />

run. The result is a much quicker partial<br />

discovery; however, connectivity associated<br />

with the newly discovered device is not fully<br />

reflected in the topology.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table A8: disco.config Database Table Schema (3 of 4)<br />

Column name Constraints Data type Description<br />

m_ModelVlans Externally<br />

defined<br />

Boolean data<br />

type<br />

m_RTBasedVPNs Externally<br />

defined<br />

Boolean data<br />

type<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

default = 0<br />

m_UseIfName Externally<br />

defined<br />

Boolean data<br />

type<br />

default = 0<br />

Boolean<br />

Integer<br />

Boolean<br />

Integer<br />

Boolean<br />

Integer<br />

<strong>Configuration</strong> Database<br />

Flag indicating whether or not to switch off<br />

VLAN modelling.<br />

(1) This setting switches on VLAN modelling.<br />

When you make this setting, the<br />

AddGlobalVlans, CreateTrunkConnections and<br />

AddVlanContainers stitchers are called.<br />

(0) This setting switches off VLAN modelling.<br />

When you make this setting, the<br />

AddGlobalVlans, CreateTrunkConnections and<br />

AddVlanContainers stitchers are not called.<br />

Flag indicating which type of MPLS discovery to<br />

perform.<br />

(1) Set this value to select route target<br />

(RT)-based MPLS discovery. In this type of<br />

discovery, no label data is required, so the<br />

discovery is faster. The MPLS core view consists<br />

of all MPLS-enabled devices.<br />

(0) Set this value to select label switch path<br />

(LSP)-based MPLS discovery. In this type of<br />

discovery, label data is discovered as this data is<br />

required in order to trace LSPs. The MPLS core<br />

view shows provider edge (PE) routers and<br />

provider (P) routers retrieved by tracing the<br />

label switched paths within the VPNs in scope.<br />

For more information on how to restrict the<br />

scope of an MPLS discovery to a particular VPN,<br />

see Defining the Scope of an MPLS/VPN <strong>Discovery</strong><br />

on page 333.<br />

Flag indicating which naming strategy to use<br />

when building interfaces.<br />

(1) This setting indicates that you wish to use<br />

ifName or ifDescr to name the interfaces<br />

rather than their ifIndex, card or port<br />

information.<br />

(0) This setting indicates that you wish to to use<br />

the default naming strategy for any device<br />

interface. This strategy is as follows:<br />

baseName[[]<br />

433


Appendix A: The <strong>Discovery</strong> Databases<br />

434<br />

Table A8: disco.config Database Table Schema (4 of 4)<br />

Column name Constraints Data type Description<br />

m_UseSysName Externally<br />

defined<br />

Boolean data<br />

type<br />

The managedProcesses Table<br />

default = 0<br />

m_CheckFileFinderReturns Externally<br />

defined<br />

Boolean data<br />

type<br />

default = 0<br />

Boolean<br />

Integer<br />

Boolean<br />

Integer<br />

Flag indicating which naming strategy to use<br />

when naming devices.<br />

(1) This setting indicates that you wish to name<br />

devices using the value of the SNMP sysName<br />

variable as the main source of naming<br />

information. The sysName variable must be set<br />

and must be unique within the network.<br />

(0) This setting indicates that you do not wish to<br />

name devices using the value of the SNMP<br />

sysName variable as the main source of<br />

naming information.<br />

Flag indicating whether to use the Ping finder to<br />

check the devices specified in the flat file<br />

supplied to the File finder.<br />

(1) This setting tells the Ping finder to check the<br />

devices specified in the flat file supplied to the<br />

File finder. This setting is recommended if you<br />

have reason to doubt that some of the devices<br />

specified in the flat file are still connected to the<br />

network.<br />

(0) This setting indicates that you do not wish to<br />

perform any checking of the devices specified in<br />

the flat file supplied to the File finder.<br />

The managedProcesses table, described in Table A9, is a repository for all the subprocesses to be<br />

managed by DISCO, such as the finders. Provided that CTRL is running, processes that are inserted into<br />

this table are started and managed by DISCO.<br />

Table A9: disco.managedProcesses Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_Name PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

Text The name of the process to be managed.<br />

m_Args List of text A list of command line arguments sent to the<br />

executable.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table A9: disco.managedProcesses Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

The status Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

<strong>Configuration</strong> Database<br />

m_Host Text The name of the host machine on which to run the<br />

executable.<br />

m_LogFile Text The name of the log file to which output is written.<br />

The status table, described in Table A10, can be used to monitor the overall progress of DISCO during<br />

the discovery process. The disco.status table is used and updated internally, and you must not make<br />

inserts into this table.<br />

Table A10: disco.status Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_<strong>Discovery</strong>Mode Integer The present discovery mode:<br />

(0) Full discovery<br />

(1) Partial discovery<br />

m_Phase Integer The current phase within the present discovery cycle.<br />

During the data collection stage, the phases are as<br />

follows:<br />

(0) The discovery has not yet started.<br />

(1) The main discovery phase in which device data is<br />

retrieved. Most discovery agents complete in this<br />

phase.<br />

(2 - n) The phases in which the topology data is<br />

retrieved for the currently discovered objects. The<br />

number of phases required depends on how your<br />

discovery is configured. By default, in a layer 2<br />

discovery, phase 2 consists of the retrieval of <strong>IP</strong> to MAC<br />

address translations and phase 3 consists of the<br />

retrieval of ethernet switch topology information.<br />

During the data processing stage, the following phase<br />

is undertaken:<br />

(3) The phase in which the collected data is processed;<br />

the layers are built and the data is sent to MODEL.<br />

More detailed information about the discovery phases<br />

can be found in <strong>Discovery</strong> Stages and Phases on<br />

page 35.<br />

435


Appendix A: The <strong>Discovery</strong> Databases<br />

436<br />

Table A10: disco.status Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

m_BlackoutState Externally<br />

defined<br />

Boolean data<br />

type<br />

Boolean<br />

Integer<br />

Flag to show if the discovery process is in Blackout<br />

mode, that is, whether or not DISCO is accepting new<br />

devices from the finders in the current discovery cycle:<br />

(1) True (not accepting new devices)<br />

(0) False (accepting new devices)<br />

m_CycleCount Integer Current rediscovery cycle, that is, the current number<br />

of cycles DISCO has been through without actually<br />

building a topology.<br />

m_ProcessingNeeded Externally<br />

defined<br />

Boolean data<br />

type<br />

m_Full<strong>Discovery</strong> Externally<br />

defined<br />

Boolean data<br />

type<br />

Boolean<br />

Integer<br />

Boolean<br />

Integer<br />

In rediscovery mode, DISCO only builds a topology at<br />

the end of the last cycle (the last cycle is determined<br />

by the fact that there is nothing left in<br />

finders.pending awaiting processing).<br />

Flag to indicate whether the current topology needs<br />

reprocessing. This flag is checked when DISCO is in<br />

rediscovery mode in order to determine whether any<br />

newly found devices (that are now in the<br />

finders.pending table) necessitate the<br />

reprocessing of the entire topology:<br />

(0) The topology does not need reprocessing<br />

(1) The topology needs reprocessing<br />

Flag to indicate that the Full<strong>Discovery</strong>.stch<br />

stitcher has been called during the discovery.<br />

If the stitcher is called, the flag is set to 1 to ensure that<br />

the Full<strong>Discovery</strong>.stch stitcher is executed<br />

when the current discovery finishes (thus starting<br />

another full discovery).<br />

If the flag is set to any other value, no action is taken.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The agents Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

<strong>Configuration</strong> Database<br />

The agents table, described in Table A11, is used to specify the discovery agents that DISCO uses for the<br />

discovery. Every agent that you want to run must have an insertion into the disco.agents table within<br />

the DiscoAgents.cfg configuration file that enables that agent (sets m_Valid=1). If m_Valid=0<br />

the agent is not run.<br />

Table A11: disco.agents Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_AgentName PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

Text The unique name of the discovery agent.<br />

m_Valid Integer A flag determining whether or not the discovery agent is to<br />

be used:<br />

(1) Run the discovery agent<br />

(0) Do not run the discovery agent<br />

m_AgentClass Integer The category to which the current discovery agent<br />

belongs:<br />

(0) Routing agent<br />

(1) Switch agent<br />

(2) Hub agent<br />

(3) ILMI agent<br />

(4) FDDI agent<br />

(5) PNNI agent<br />

(6) Frame Relay agent<br />

(7) CDP agent<br />

(8) NAT agent<br />

m_IsIndirect Integer A flag indicating the type of connectivity information<br />

returned by the discovery agent:<br />

(0) Direct connectivity; for example, Routing agents<br />

(1) Indirect connectivity information; for example, Switch<br />

agents<br />

437


Appendix A: The <strong>Discovery</strong> Databases<br />

438<br />

Table A11: disco.agents Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

m_Precedence Integer An integer representation of the precedence level of the<br />

information returned by the discovery agent; the higher<br />

the integer, the higher the weighting given to the<br />

information returned.<br />

The precedence is only used if there is a conflict when<br />

merging device information to produce the<br />

workingEntities.finalEntity database table.<br />

m_HostName Text The name of the host machine on which to run the agent.<br />

m_DebugLevel Integer The level of debugging for the agent.<br />

m_LogFile Text The text file to which debugging output is written.<br />

m_NumThreads Integer The number of threads this agent runs. If not specified the<br />

default number is 10; the maximum allowed is 900.<br />

m_IsPerl Integer Set to 1 if this agent is a Perl agent. Set to 0 if this agent is<br />

not a Perl agent. If not present the agent is assumed not to<br />

be a Perl agent.<br />

The disco.agents table also indicates agent precedence, which may be used when merging device<br />

information to produce the workingEntities.finalEntity table. Precedence determines which<br />

records are used if duplicate or conflicting records are reported by different discovery agents. The following<br />

precedence applies:<br />

The Details agent has the lowest precedence as it is only designed to retrieve basic device information.<br />

Routing agents have the next highest precedence. Their connectivity information is only at the <strong>IP</strong><br />

layer, however, so it is not as accurate as that returned by the switching agents.<br />

Switching agents have next highest precedence because they can return information on the media<br />

layer (layer 2), which is more accurate than layer 3 information.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The NATStatus Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

<strong>Configuration</strong> Database<br />

The NATStatus table, described in Table A12, is used to configure the discovery system to use NAT. For<br />

more information on discovering NAT environments, see Chapter 12: Managing NAT Environments on<br />

page 341.<br />

Table A12: disco.NATStatus Database Table Schema<br />

Column name Constraints Data type Description<br />

m_UsingNAT UNIQUE<br />

NOT NULL<br />

m_NATStatus UNIQUE<br />

NOT NULL<br />

Example <strong>Configuration</strong> of the disco.config Table<br />

The following OQL insert configures the following parameters:<br />

Boolean Integer This must be set to indicate whether the discovery uses<br />

multiple address spaces. Set this value to:<br />

1 if the discovery uses multiple address spaces.<br />

The maximum period between device discovery is 300 seconds. This condition and the next<br />

condition must be satisfied in order to proceed to the next phase of the discovery cycle.<br />

The average amount of time between device discovery is 250 milliseconds.<br />

0 if the discovery does not use multiple address spaces.<br />

Integer This column is populated automatically by the<br />

discovery process, and can be used to track the process<br />

of a NAT discovery. If making inserts into this table, this<br />

column must be set to 0. Possible values are:<br />

(0) Uninitialized<br />

(1) Seeded discovery with gateways<br />

(2) Awaiting gateway returns<br />

(3) Processing NAT translations<br />

(4) NAT translations complete<br />

The maximum allowable ratio of pending to processing devices is 20 percent. If this threshold is<br />

breached, a full discovery is instigated.<br />

The cycle limit is 5, that is, a maximum of five discovery cycles are necessary to complete the<br />

discovery process. If there are more than 5 discovery cycles, a full rediscovery is initiated.<br />

The agent restart flag is 1, that is, DISCO is mandated to restart any discovery agent that fails in its<br />

operation.<br />

The finder restart flag is 1, that is, DISCO is mandated to restart any finder that fails in its operation.<br />

439


Appendix A: The <strong>Discovery</strong> Databases<br />

440<br />

Scans for updates to the agents and stitchers have been disabled. This is usually the case when you do<br />

not wish to alter the discovery data flow.<br />

This discovery is not using failover recovery.<br />

insert into disco.config<br />

(<br />

m_NothngFindPeriod,<br />

m_AvgeFindPeriod,<br />

m_PendingPerCent,<br />

m_CycleLimit,<br />

m_RestartAgents,<br />

m_RestartFinders,<br />

m_DirScanIntvl<br />

m_UseFailover<br />

)<br />

values<br />

(<br />

300,<br />

0.25,<br />

20,<br />

5,<br />

1,<br />

1,<br />

0,<br />

0<br />

);<br />

Example <strong>Configuration</strong> of the disco.managedProcesses Table<br />

The following OQL insert configures the following subprocesses to be launched and managed, provided<br />

CTRL is running:<br />

The File finder<br />

The Ping finder<br />

insert into disco.managedProcesses<br />

(<br />

m_Name, m_Args, m_Host<br />

)<br />

values<br />

(<br />

"ncp_df_file", [ ], "othello"<br />

);<br />

insert into disco.managedProcesses<br />

(<br />

m_Name, m_Args, m_Host<br />

)<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


values<br />

(<br />

);<br />

"ncp_df_ping", [ ], "othello"<br />

Example <strong>Configuration</strong> of the disco.agents Table<br />

The following OQL inserts configure the following parameters:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

<strong>Configuration</strong> Database<br />

The ArpCache discovery agent is enabled to run during the discovery (m_Valid=1), belongs to the<br />

routing class (m_AgentClass=0), returns direct connectivity information (m_IsIndirect=0)<br />

and has a precedence level of 2.<br />

The AtmForumPnni discovery agent is disabled for this discovery (m_Valid=0), belongs to the<br />

PNNI class (m_AgentClass=5), returns direct connectivity information (m_IsIndirect=0)<br />

and has a precedence level of 5.<br />

The BayEthernetHub discovery agent is disabled for this discovery (m_Valid=0), belongs to the<br />

hub class (m_AgentClass=2), returns indirect connectivity information (m_IsIndirect=1)<br />

and has a precedence level of 3.<br />

insert into disco.agents<br />

(<br />

m_AgentName, m_Valid, m_AgentClass, m_IsIndirect, m_Precedence<br />

)<br />

values<br />

(<br />

'ArpCache', 1, 0, 0, 2<br />

);<br />

insert into disco.agents<br />

(<br />

m_AgentName, m_Valid, m_AgentClass, m_IsIndirect, m_Precedence<br />

)<br />

values<br />

(<br />

'AtmForumPnni', 0, 5, 0, 5<br />

);<br />

insert into disco.agents<br />

(<br />

)<br />

values<br />

(<br />

);<br />

m_AgentName, m_Valid, m_AgentClass, m_IsIndirect, m_Precedence<br />

'BayEthernetHub', 0, 2, 1, 3<br />

441


Appendix A: The <strong>Discovery</strong> Databases<br />

A.4 <strong>Discovery</strong> Scope Database<br />

442<br />

The scope database is responsible for defining the devices and <strong>IP</strong> addresses to be considered during the<br />

discovery. You can limit the range of the discovery process to specific subnets and prevent devices from being<br />

discovered or instantiated.<br />

For example, you can specify that sensitive devices not be discovered and consequently not instantiated. A<br />

sensitive device is one that you do not want to poll. This might be because there is a security risk involved<br />

in polling the device, or that the act of polling itself might cause the device to overload.<br />

The scope Database Schema<br />

Table A13 describes the scope database.<br />

Table A13: Synopsis of the scope Database<br />

Database scope<br />

Defined in NCHOME/etc/precision/DiscoSchema.cfg<br />

Fully qualified database table names scope.zones<br />

The zones Table<br />

NCHOME/etc/precision/DiscoScope.cfg<br />

scope.detectionFilter<br />

scope.instantiateFilter<br />

The zones table, described in Table A14, allows you to define areas of the network to either be included<br />

or excluded from the discovery process. A zone is typically defined as a list of varbinds. Varbinds are name<br />

= value pairs.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

<strong>Discovery</strong> Scope Database<br />

You can define multiple zones, and you can combine inclusion and exclusion zones. However, if you define<br />

a combination of inclusion and exclusion zones, the exclusion zones must be within the scope of the<br />

inclusion zones.<br />

Table A14: scope.zones Database Table Schema<br />

Column name Constraints Data type Description<br />

m_Protocol PRIMARY KEY<br />

NOT NULL<br />

m_Action NOT NULL<br />

Externally defined<br />

netProtocol data type<br />

Externally defined<br />

filtAction data type<br />

Integer An integer representation of the network<br />

protocol used by the presently defined zone.<br />

Currently only <strong>IP</strong> is supported:<br />

(0) Undefined<br />

(1) <strong>IP</strong><br />

Integer Action to perform for current zone:<br />

(0) Undefined<br />

(1) Include<br />

(2) Exclude<br />

m_Zones List of type zone A list of varbinds (name=value) that define the<br />

present discovery zone.<br />

m_AddressSpace Text The name of the NAT address space to which<br />

the device belongs. This value is set in the<br />

translations.NATAddressSpaceIds<br />

table. If the discovery is not using NAT, or if the<br />

device is in the public domain, this value is<br />

NULL.<br />

443


Appendix A: The <strong>Discovery</strong> Databases<br />

444<br />

The detectionFilter Table<br />

The detectionFilter table is described in Table A15. If a filter is specified in the<br />

detectionFilter table, only devices matching it are discovered. Since the m_Protocol column<br />

must be unique, there must be only one insert into this table for any given protocol. Multiple filters must be<br />

defined within a single insert.<br />

Table A15: scope.detectionFilter Database Table Schema<br />

Column name Constraints Data type Description<br />

m_Protocol PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

Externally defined<br />

netProtocol data type<br />

Integer An integer representation of network protocol used by<br />

the presently defined zone. Currently only <strong>IP</strong> is<br />

supported:<br />

(0) Undefined<br />

m_Filter Text A textual representation of an attribute filter against the<br />

columns of the Details.returns table; for example,<br />

m_UniqueAddress or m_ObjectId.<br />

Although you can configure the filter condition to test any of the columns in the Details.returns<br />

table, you may need to use the <strong>IP</strong> address as the basis for the filter if you need to restrict the detection of a<br />

particular device. If the device does not grant SNMP access to the Details agent, the Details agent may not<br />

be able to retrieve MIB variables such as the Object ID.However, you are guaranteed the return of at least<br />

the <strong>IP</strong> address when the device is detected.<br />

(1) <strong>IP</strong><br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The instantiateFilter Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

<strong>Discovery</strong> Scope Database<br />

The instantiateFilter table is described in Table A16. If a filter is specified in the<br />

instantiateFilter table, only devices that pass the criteria are instantiated, that is, sent to MODEL.<br />

If no filter is specified, all discovered devices are instantiated. Since the m_Protocol column must be<br />

unique, there must be only one insert into this table for any given protocol. Multiple filters must be defined<br />

within a single insert.<br />

Table A16: scope.instantiateFilter Database Table Schema<br />

Column name Constraints Data type Description<br />

m_Protocol PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

Example scope Database <strong>Configuration</strong><br />

The example OQL inserts into the scope database tables in this section would be appended to the<br />

DiscoScope.cfg configuration file in order to configure DISCO when it is launched.<br />

Tip: In the detectionFilter and the instantiateFilter tables of the scope database, the<br />

m_Protocol column is UNIQUE. Therefore, there must be no more than one insert into either table per<br />

protocol.<br />

<strong>Configuration</strong> of the scope.zones Table<br />

The following example creates two inclusion zones for the current discovery. Both zones are defined using<br />

a single insert.<br />

insert into scope.zones<br />

(<br />

m_Protocol,<br />

m_Action,<br />

m_Zones<br />

)<br />

values<br />

(<br />

Externally defined<br />

netProtocol data type<br />

Integer An integer representation of the network protocol used<br />

by the presently-defined zone. Currently only <strong>IP</strong> is<br />

supported:<br />

(0) Undefined<br />

m_Filter Text A textual representation of an attribute filter against the<br />

columns of the<br />

scratchTopology.entityByName table; for<br />

example, m_ObjectId or m_Addresses.<br />

(1) <strong>IP</strong><br />

445


Appendix A: The <strong>Discovery</strong> Databases<br />

446<br />

);<br />

1,<br />

1,<br />

[<br />

]<br />

{<br />

},<br />

{<br />

}<br />

m_Subnet="172.16.1.0"<br />

m_NetMask=24<br />

m_Subnet="172.16.2.*"<br />

The previous OQL insert specifies the following:<br />

The network uses the Internet Protocol (m_Protocol=1).<br />

Any devices that fall into the present zone are to be included in the discovery (m_Action=1).<br />

The discovery includes:<br />

– Any device that falls within the 172.16.1.0 subnet (with a subnet mask of 24, that is, 24<br />

bits turned on and 8 bits turned off, which implies a netmask of 255.255.255.0).<br />

– Any device with an <strong>IP</strong> address starting with "172.16.2", that is, in the 172.16.2.0<br />

subnet with a mask of 255.255.255.0.<br />

Preventing the Detection of Devices<br />

The following example insert defines a detection filter. Since there must only be one insert into the<br />

scope.detectionFilter table, multiple conditions for the Internet Protocol must be defined using<br />

a single insert, as shown here. The conditions of the filter can be combined using the OQL keywords AND<br />

and OR.<br />

insert into scope.detectionFilter<br />

(<br />

m_Protocol, m_Filter<br />

)<br />

values<br />

(<br />

1,<br />

"(<br />

( m_UniqueAddress '10.10.63.234' )<br />

AND<br />

( m_ObjectId not like '1\.3\.6\.1\.4\.1\..*' )<br />

)"<br />

);<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

<strong>Discovery</strong> Scope Database<br />

The above example filter ensures that only the following are further interrogated by the discovery:<br />

Devices that do not have the <strong>IP</strong> address 10.10.63.234.<br />

Devices that do not have the Object ID 1.<strong>3.6</strong>.1.4.1.*.<br />

In the above example, the backslash is used in conjunction with the not like comparison in order to<br />

escape the . character, which would otherwise be treated as a wildcard.<br />

Restricting Instantiation Based on Object ID<br />

The following example insert defines an instantiation filter. This example prevents the instantiation of<br />

devices that match a given Object ID. The OQL not like clause indicates that only devices that pass the<br />

filter (that is, devices for which the OID is not like 1.<strong>3.6</strong>.1.4.1.*) are instantiated.<br />

insert into scope.instantiateFilter<br />

(<br />

m_Protocol,<br />

m_Filter<br />

)<br />

values<br />

(<br />

1, // The backslash is used here to escape the .<br />

"( // which would otherwise be treated<br />

// as a wildcard.<br />

( m_ObjectId not like '1\.3\.6\.1\.4\.1\..*' )<br />

)"<br />

);<br />

More Information<br />

For further information about configuring the scope of the discovery, as well as additional complex example<br />

inserts, see Chapter 7: Scoping a <strong>Discovery</strong> on page 207.<br />

447


Appendix A: The <strong>Discovery</strong> Databases<br />

A.5 Process Management Databases<br />

448<br />

On startup, DISCO populates the agent and stitcher databases with information extracted from the<br />

discovery agent and discovery stitcher files. Throughout its operation, DISCO scans for alterations to the<br />

agent and stitcher files and updates the agent and stitcher databases if necessary. The frequency of<br />

scans is set in the disco database.<br />

Configuring the Data Flow: Starting Stitchers On-Demand<br />

The information extracted by DISCO contains the full definitions of the agents and stitchers, which<br />

includes the trigger conditions. By modifying the trigger conditions, you can modify the data flow of the<br />

discovery process.<br />

You can start the discovery cycle from any point within the configured data flow by placing a stitcher into<br />

the actions table of the stitchers database.<br />

The agents Database Schema<br />

Table A17 describes the agents database.<br />

Table A17: Synopsis of the agents Database<br />

Database name agents<br />

Defined in NCHOME/etc/precision/DiscoSchema.cfg<br />

Fully qualified database table names agents.definitions<br />

agents.victims<br />

agents.status<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The definitions Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Process Management Databases<br />

The definitions table, described in Table A18, contains scheduling information for every discovery<br />

agent in <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>, extracted from the information in the discovery agent file.<br />

Table A18: agents.definitions Database Table Schema<br />

Column name Constraints Data type Description<br />

m_Name PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

m_Type Externally defined<br />

agentType data type<br />

The victims Table<br />

Text Name of the agent.<br />

Integer Agent Type:<br />

(0) Undefined<br />

(1) Precompiled<br />

(2) Text defined<br />

(3) Combination<br />

m_Text NOT NULL Text Textual description of agent rules.<br />

m_ExecuteOn Text The host on which to execute the agent.<br />

m_Phase Default = 1 Integer The discovery phase by the end of which the agent is<br />

expected to complete.<br />

m_UpdTime Long integer The time of the last modification, which determines<br />

whether the agent has changed since its definition<br />

was stored.<br />

The victims table, described in Table A19, contains an extraction of the criteria that determine which<br />

devices get sent to the agent.<br />

Table A19: agents.victims Database Table Schema<br />

Column name Constraints Data type Description<br />

m_Name PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

Text Name of the agent.<br />

m_Filter Text The filter condition that determines which devices are<br />

sent to the agent.<br />

449


Appendix A: The <strong>Discovery</strong> Databases<br />

450<br />

The status Table<br />

The status table, described in Table A20, contains information about the present status of the agent.<br />

Table A20: agents.status Database Table Schema<br />

Column name Constraints Data type Description<br />

m_Name PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

m_State Externally defined<br />

agentState data type.<br />

Default = 0<br />

The stitchers Database Schema<br />

Table A21 describes the stitchers database.<br />

Text Name of the agent.<br />

Integer The current state of the agent:<br />

(0) Undefined<br />

(1) Not running<br />

(2) Start up<br />

(3) Running<br />

(4) Finished<br />

(5) Died<br />

m_NumConnects Default = 0 Integer The number of times that DISCO has connected to<br />

the agent.<br />

Table A21: Synopsis of the stitchers Database<br />

Database name stitchers<br />

Defined in NCHOME/etc/precision/DiscoSchema.cfg<br />

Fully qualified database table names stitchers.definitions<br />

stitchers.triggers<br />

stitchers.status<br />

stitchers.actions<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The definitions Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Process Management Databases<br />

The definitions table, described in Table A22, contains the scheduling information for every<br />

discovery stitcher.<br />

Table A22: stitchers.definitions Database Table Schema<br />

Column name Constraints Data type Description<br />

m_Name PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

m_Type Externally defined<br />

stitcherType data type<br />

The triggers Table<br />

Text Name of the stitcher.<br />

Integer Stitcher Type:<br />

(0) Undefined<br />

(1) Precompiled<br />

(2) Text defined<br />

m_Text Text Textual description of stitcher rules.<br />

m_Phase Default = 0 Integer The discovery phase by the end of which the<br />

stitcher is expected to complete.<br />

m_UpdTime Long integer The time of the last modification to the stitcher.<br />

The triggers table, described in Table A23, contains an extraction of the criteria that determine the<br />

trigger for the stitcher.<br />

Table A23: stitchers.triggers Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_Name PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

Text Name of the stitcher.<br />

451


Appendix A: The <strong>Discovery</strong> Databases<br />

452<br />

Table A23: stitchers.triggers Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

m_Type Integer The type of stitcher trigger:<br />

m_Trigger Externally defined<br />

ruleTrigger data type<br />

The status Table<br />

The status table, described in Table A24, contains the information about the present status of the<br />

stitcher.<br />

Table A24: stitchers.status Database Table Schema<br />

The actions Table<br />

(0) Undefined<br />

(1) On the completion of some other activity; for<br />

example, another stitcher or a discovery phase<br />

(2) On a table insert<br />

(3) On demand<br />

(4) On a timer<br />

Object Description of the stitcher trigger.<br />

Column name Constraints Data type Description<br />

m_Name PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

m_State Externally defined<br />

stchrState data type<br />

Default = 0<br />

Text Name of the stitcher.<br />

Integer The current state of the stitcher:<br />

(0) Undefined<br />

(1) Start up<br />

(2) Running<br />

(3) Finished<br />

(4) Not maintained (the stitcher is not having its state<br />

maintained)<br />

The actions table is described in Table A25. If a stitcher is inserted into this table, DISCO runs the<br />

stitcher. Once the stitcher has completed, its entry is deleted from the actions table. Any stitchers<br />

triggered to execute from the stitcher that has been inserted, or upon completion of the stitcher, are also<br />

executed.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Process Management Databases<br />

You can also configure other actions to take place on completion of the stitcher, so that the discovery cycle<br />

completes from that point onwards.<br />

Table A25: stitchers.actions Database Table Schema<br />

Column name Constraints Data type Description<br />

m_Name PRIMARY KEY<br />

NOT NULL<br />

Text Name of the stitcher.<br />

453


Appendix A: The <strong>Discovery</strong> Databases<br />

A.6 Subprocess Databases<br />

454<br />

This section focuses on the databases used by the discovery subprocesses. These databases are defined within<br />

the DISCO configuration file, DiscoSchema.cfg, and include:<br />

The finders database, used by the finders to store information about device existence.<br />

The Details database, used by the Details agent to store basic device information.<br />

The discovery agent databases, which are created using a template.<br />

The finders Database Schema<br />

Table A26 describes of the finders database.<br />

Table A26: Synopsis of the finders Database<br />

Database finders<br />

Defined in NCHOME/etc/precision/DiscoSchema.cfg<br />

Fully qualified database table names finders.despatch<br />

finders.returns<br />

finders.pending<br />

finders.processing<br />

finders.rediscovery<br />

The finders database is the central monitoring and management point for finders operating during<br />

discovery. The finders discover the existence of devices and report these devices back to the finders<br />

database but do not discover connections. Network entities reported by the finders are usually sent to the<br />

Details agent for retrieval of basic device information, although the discovery data flow is fully configurable,<br />

as described in An Overview of the <strong>Discovery</strong> Process on page 25.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The despatch Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Subprocess Databases<br />

The despatch table contains a record of all the requests sent to the finders and the current status of the<br />

requests.<br />

Table A27: finders.despatch Database Table Schema<br />

Column name Constraints Data type Description<br />

m_Finder PRIMARY KEY<br />

The returns Table<br />

NOT NULL<br />

m_FindRequest PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

Text The name of the finder responsible for the request.<br />

Text The OQL request sent to the finder named above.<br />

m_Request Status Integer The current status of the request sent to the finder.<br />

When a finder finds a device it returns the information to the returns table, provided that the discovery<br />

is still in the device discovery phase, that is, data collection phase one. If the discovery is in the blackout state,<br />

described in The Blackout State on page 35, the finders return the information to the pending table.<br />

The returns table, described in Table A28, serves as a transfer point, notifying the system that a device<br />

exists. By default, a stitcher sends the device information to the Details agent to discover basic device<br />

information.<br />

Table A28: finders.returns Database Table Schema<br />

Column name Constraints Data type Description<br />

m_UniqueAddress PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

Text The <strong>IP</strong> address of the discovered network entity.<br />

m_Name Text The unique name of the network entity.<br />

m_Creator Text The finder that created this record.<br />

m_Protocol Integer The protocol of the discovered device:<br />

(1) <strong>IP</strong><br />

(2) <strong>IP</strong>-NAT<br />

455


Appendix A: The <strong>Discovery</strong> Databases<br />

456<br />

The pending Table<br />

The finders operate throughout the discovery process, so the pending table exists to accept device<br />

information when the returns table has been locked out by DISCO. The returns table has to be<br />

locked during data processing because the fact that the data collection stage has completed does not<br />

necessarily mean that all the devices on the network have been discovered.<br />

Network entities that have been sent to the pending table, described in Table A29, are processed after the<br />

current discovery cycle has been completed.<br />

Table A29: finders.pending Database Table Schema<br />

Column name Constraints Data type Description<br />

m_UniqueAddress PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

The processing Table<br />

Text The <strong>IP</strong> address of the discovered network entity.<br />

m_Name Text The unique name of the network entity.<br />

m_Creator Text The finder that created this record in the table.<br />

m_Protocol Integer The protocol of the discovered device:<br />

The processing table contains a record of all the discovered entities that are currently being processed<br />

by DISCO. Any device that has been reported to the returns table and is awaiting the next action to take<br />

place has an entry in the processing table.<br />

(1) <strong>IP</strong><br />

(2) <strong>IP</strong>-NAT<br />

m_AddressSpace Text The name of the NAT address space to which the device<br />

belongs. This value is set in the<br />

translations.NATAddressSpaceIds table. If the<br />

discovery is not using NAT, or if the device is in the public<br />

domain, this value is NULL.<br />

Table A30: finders.processing Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_UniqueAddress PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

Text The <strong>IP</strong> address of the discovered network entity.<br />

m_Name Text The unique name of the network entity.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table A30: finders.processing Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

The rediscovery Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Subprocess Databases<br />

m_Creator Text The finder that created this record in the table.<br />

m_Protocol Integer The protocol of the discovered device:<br />

The rediscovery table can hold nodes and subnets that you want to rediscover. Any device inserted<br />

into this table is sent to the Ping finder for processing.<br />

The Details Database Schema<br />

Table A32 describes the details database. The Details agent is responsible for retrieving basic<br />

information about devices discovered by the finders when information from the finders is placed in the<br />

despatch table. The Details agent retrieves the appropriate device information and places the results in<br />

the returns table.<br />

(1) <strong>IP</strong><br />

(2) <strong>IP</strong>-NAT<br />

m_AddressSpace Text The name of the NAT address space to which the device<br />

belongs. This value is set in the<br />

translations.NATAddressSpaceIds table. If<br />

the discovery is not using NAT, or if the device is in the<br />

public domain, this value is NULL.<br />

Table A31: finders.rediscovery Database Table Schema<br />

Column name Constraints Data type Description<br />

m_Address PRIMARY KEY<br />

NOT NULL<br />

Text The address to ping.<br />

m_RequestType Int The type of address:<br />

(1) Individual<br />

(2) Subnet<br />

m_NetMask Text The net mask if the Address refers to a subnet.<br />

Table A32: Synopsis of the Details Database (1 of 2)<br />

Database Details<br />

457


Appendix A: The <strong>Discovery</strong> Databases<br />

458<br />

Table A32: Synopsis of the Details Database (2 of 2)<br />

Defined in NCHOME/etc/precision/DiscoSchema.cfg<br />

Fully qualified database table names Details.despatch<br />

A stitcher takes the information from the Details.returns table and sends it to the Associated<br />

Address agent and ultimately the appropriate discovery agent.<br />

The despatch Table<br />

The despatch table contains basic information about devices that have been detected by the finders.<br />

When data is placed in this table, the Details agent automatically interrogates the network for more detailed<br />

device information.<br />

Table A33: Details.despatch Database Table Schema<br />

The returns Table<br />

Details.returns<br />

Column name Constraints Data type Description<br />

m_UniqueAddress PRIMARY KEY<br />

NOT NULL<br />

Text Unique <strong>IP</strong> address of the network entity.<br />

m_Name Text Unique name of an entity on the network.<br />

m_Protocol Integer The protocol of the discovered device:<br />

The returns table is an active table that holds detailed device information retrieved by the Details agent.<br />

Information inserted into this table is automatically processed by the stitchers so that the device connectivity<br />

can be discovered by the appropriate discovery agent.<br />

(1) <strong>IP</strong><br />

(2) <strong>IP</strong>-NAT<br />

m_AddressSpace Text The name of the NAT address space to which the<br />

device belongs. This value is set in the<br />

translations.NATAddressSpaceIds table. If<br />

the discovery is not using NAT, or if the device is in<br />

the public domain, this value is NULL.<br />

Table A34: Details.returns Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_Name Text Unique name of an entity on the network.<br />

m_UniqueAddress NOT NULL Text Layer 3 address.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table A34: Details.returns Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

m_Protocol Integer The protocol of the discovered device:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

(1) <strong>IP</strong><br />

(2) <strong>IP</strong>-NAT<br />

Subprocess Databases<br />

m_ObjectId Text Textual representation of the device class (an ASN.1<br />

address).<br />

m_Description Text Value of sysDescr MIB variable of the entity.<br />

m_HaveAccess Externally defined<br />

Boolean data type<br />

Integer Flag indicating whether there is SNMP access to the<br />

device:<br />

(1) Have Access<br />

(0) No Access<br />

m_UpdAgent Text The agent that updated this device.<br />

m_LastRecord Externally defined<br />

Boolean data type<br />

Boolean<br />

Integer<br />

A flag indicating whether this is the last record for<br />

this entity (that is, whether the entity has been<br />

completely processed):<br />

(1) True<br />

(0) False<br />

m_AddressSpace Text The name of the NAT address space to which the<br />

device belongs. This value is set in the<br />

translations.NATAddressSpaceIds table. If<br />

the discovery is not using NAT, or if the device is in<br />

the public domain, this value is NULL.<br />

m_ExtraInfo Externally defined<br />

vblist data type<br />

Object Any extra information.<br />

459


Appendix A: The <strong>Discovery</strong> Databases<br />

A.7 Tracking <strong>Discovery</strong> Databases<br />

460<br />

During the course of the discovery process, DISCO keeps a record of every element discovered in the<br />

network regardless of whether it has been processed or not. The instrumentation and<br />

translations databases are used for this purpose. These databases can be interrogated at any time to<br />

view the number of device types and categories that have been discovered. For more information on these<br />

databases, see the following sections:<br />

The translations Database on page 460.<br />

The instrumentation Database Schema on page 463.<br />

The workingEntities database provides a central repository for information about discovered entities<br />

and the containment details associated with each of these entities. However, this database is only populated<br />

at the end of the discovery process. This database is described in The workingEntities database on page 467.<br />

The translations Database<br />

Table A35 describes the translations database.<br />

Table A35: Synopsis of the translations database<br />

Database name translations<br />

Defined in NCHOME/etc/precision/DiscoSchema.cfg<br />

Fully qualified database table name translations.ipToBaseName<br />

translations.vlans<br />

translations.NAT<br />

translations.NATtemp<br />

translations.NATAddressSpaceIds<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The ipToBaseName Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Tracking <strong>Discovery</strong> Databases<br />

The translations.ipToBaseName table is a registry of discovered devices and the <strong>IP</strong> addresses<br />

associated with those devices. Where a device has multiple interfaces, and therefore multiple <strong>IP</strong> addresses,<br />

the Associated Address agent downloads all the associated addresses, stores them in the ipToBaseName<br />

table and allows the appropriate discovery agents to discover the device. Any subsequent attempt to discover<br />

the device by means of another of its <strong>IP</strong> addresses is halted when the Associated Address agent checks the<br />

ipToBaseName table, that is, before the device details are passed to the appropriate discovery agent.<br />

Table A36: translations.ipToBaseName Database Table Schema<br />

Column name Constraints Data type Description<br />

m_BaseName NOT NULL Text Base name of the discovered entity.<br />

m_BaseAddress NOT NULL Text Base address of the discovered entity.<br />

m_WorkAddress NOT NULL Text The address that was used for data retrieval.<br />

m_IpAddress NOT NULL Text <strong>IP</strong> address of the entity.<br />

m_AddressSpace Text The name of the NAT address space to which the device<br />

belongs. This value is set in the<br />

translations.NATAddressSpaceIds table. If the<br />

discovery is not using NAT, or if the device is in the public<br />

domain, this value is NULL.<br />

The vlans Table<br />

The translations.vlans table holds a list of devices that are part of Virtual Local Area Networks<br />

(VLANs). Each record in the vlans table maps the device to the VLAN it is part of.<br />

Table A37: translations.vlans Database Table Schema<br />

Column name Constraints Data type Description<br />

m_Name NOT NULL<br />

PRIMARY KEY<br />

m_VlanID NOT NULL<br />

PRIMARY KEY<br />

Text The name of the device associated with this entry.<br />

Text The VLAN identifier on the device.<br />

m_Subnet Text The subnet the VLAN appears to be associated with.<br />

m_NetMask Text The subnet mask.<br />

m_AddressSpace Text The name of the NAT address space to which the<br />

device belongs. This value is set in the<br />

translations.NATAddressSpaceIds table. If<br />

the discovery is not using NAT, or if the device is in<br />

the public domain, this value is NULL.<br />

461


Appendix A: The <strong>Discovery</strong> Databases<br />

462<br />

The NAT Table<br />

The translations.NAT table is used to hold static NAT mappings. The mapped devices are<br />

discovered even if they are outside the scope of the discovery. For example inserts into this table, see Enabling<br />

NAT Translation on page 346.<br />

Table A38: translations.NAT Database Table Schema<br />

Column name Constraints Data type Description<br />

m_OutsideGlobalAddr PRIMARY KEY<br />

The NATtemp Table<br />

NOT NULL<br />

Text The public address.<br />

m_InsideLocalAddr NOT NULL Text The private address.<br />

m_InsideGlobalAddr Text This column is currently not used.<br />

m_OutsideLocalAddr Text This column is currently not used.<br />

m_AddressSpace Text The name of the NAT address space to which<br />

the device belongs. This value is set in the<br />

translations.NATAddressSpaceId<br />

s table. If the discovery is not using NAT, or if<br />

the device is in the public domain, this value<br />

is NULL.<br />

The translations.NATtemp table is used to hold NAT mappings from a particular NAT gateway.<br />

This enables the discovery process to compare the old and new NAT mappings and initiate a partial or full<br />

rediscovery if necessary.<br />

Table A39: translations.NATtemp Database Table Schema<br />

Column name Constraints Data type Description<br />

m_OutsideAddr PRIMARY KEY<br />

NOT NULL<br />

Text The public address of the device.<br />

m_InsideAddr NOT NULL Text The private address of the device.<br />

m_AddressSpace Text The name of the NAT address space to which the<br />

device belongs. This value is set in the<br />

translations.NATAddressSpaceIds table.<br />

If the discovery is not using NAT, or if the device is in<br />

the public domain, this value is NULL.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The NATAddressSpaceIds Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Tracking <strong>Discovery</strong> Databases<br />

The translations.NATAddressSpaceIds table is used to identify the <strong>IP</strong> addresses of NAT<br />

gateways and specify an address space identifier for each one. For example insert into this table, see Defining<br />

Address Spaces for Each Domain on page 346.<br />

Table A40: translations.NATAddressSpaceIds Database Table Schema<br />

Column name Constraints Data type Description<br />

m_NATGateway<strong>IP</strong> PRIMARY KEY<br />

NOT NULL<br />

The instrumentation Database Schema<br />

Table A41 describes the instrumentation database.<br />

Text The <strong>IP</strong> address of the gateway.<br />

m_AddressSpaceId Text The address space identifier to be used for all<br />

devices in the NAT domain belonging to the<br />

gateway whose <strong>IP</strong> address is specified in<br />

m_NATGateway<strong>IP</strong>.<br />

Table A41: Synopsis of the instrumentation Database<br />

Database name instrumentation<br />

Defined in NCHOME/etc/precision/DiscoSchema.cfg<br />

Fully qualified database table names instrumentation.ipAddresses<br />

instrumentation.name<br />

instrumentation.subNet<br />

instrumentation.vlan<br />

instrumentation.frameRelay<br />

instrumentation.ciscoFrameRelay<br />

instrumentation.hsrp<br />

instrumentation.pnniPeerGroup<br />

instrumentation.fddi<br />

The instrumentation database provides a list of discovered devices grouped by technology. You can<br />

therefore perform OQL queries to retrieve the names of all discovered subnets, VLANs, Frame Relay<br />

devices, and so on.<br />

463


Appendix A: The <strong>Discovery</strong> Databases<br />

464<br />

The ipAddresses Table<br />

The ipAddresses table contains a record of the unique <strong>IP</strong> addresses discovered in the network.<br />

Table A42: instrumentation.ipAddresses Database Table Schema<br />

Column name Constraints Data type Description<br />

m_UniqueAddress PRIMARY KEY<br />

The name Table<br />

The name table contains a record of the unique name of every discovered device.<br />

The subNet Table<br />

UNIQUE<br />

NOT NULL<br />

Table A43: instrumentation.name Database Table Schema<br />

Column name Constraints Data type Description<br />

m_Name PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

Text The <strong>IP</strong> address of a discovered network entity.<br />

The subNet table contains a record of every discovered subnet address and mask.<br />

Table A44: instrumentation.subNet Database Table Schema<br />

Text The name of a discovered network entity.<br />

Column name Constraints Data type Description<br />

m_SubNet PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

m_NetMask UNIQUE<br />

NOT NULL<br />

Text The subnet address of a discovered subnet.<br />

Text The subnet mask of a discovered subnet.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The vlan Table<br />

The vlan table contains a record of every discovered VLAN.<br />

Table A45: instrumentation.vlan Database Table Schema<br />

Column name Constraints Data type Description<br />

m_Vlan UNIQUE Integer The ID of the discovered VLAN.<br />

The frameRelay Table<br />

The frameRelay table contains a record of every discovered Frame Relay device.<br />

Table A46: instrumentation.frameRelay Database Table Schema<br />

Column name Constraints Data type Description<br />

m_IfDlci PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

m_IfIndex PRIMARY KEY<br />

NOT NULL<br />

The ciscoFrameRelay Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Tracking <strong>Discovery</strong> Databases<br />

Integer The Frame Relay device Data Link Connection<br />

Identifier.<br />

Integer The unique value for each device interface.<br />

The ciscoFrameRelay table contains a record of every discovered Cisco Frame Relay device.<br />

Table A47: instrumentation.ciscoFrameRelay Database Table Schema<br />

Column name Constraints Data type Description<br />

m_UniqueKey UNIQUE<br />

NOT NULL<br />

m_FRIfIndex PRIMARY KEY<br />

NOT NULL<br />

m_FRDlci PRIMARY KEY<br />

UNIQUE<br />

NOT NULL<br />

Text A combination of the <strong>IP</strong> Address, the FRIfIndex, and<br />

the FRDlci.<br />

Integer The unique value for each device interface.<br />

Integer The Frame Relay device Data Link Connection<br />

Identifier.<br />

465


Appendix A: The <strong>Discovery</strong> Databases<br />

466<br />

The hsrp Table<br />

The hsrp table contains a record of every discovered Hot Standby Router Protocol (HSRP) device.<br />

Table A48: instrumentation.hsrp Database Table Schema<br />

Column name Constraints Data type Description<br />

m_GroupAddress PRIMARY KEY<br />

The pnniPeerGroup Table<br />

The pnniPeerGroup table contains the lowest level Peer Group Identifiers of PNNI devices that have<br />

been discovered. Logical PNNI Peer Groups IDs are not stored.<br />

The fddi Table<br />

NOT NULL<br />

UNIQUE<br />

Text The group address of the device.<br />

m_PrimaryAddress Text The primary address of the device.<br />

m_StandbyAddress Text The standby address of the device.<br />

Table A49: instrumentation.pnniPeerGroup Database Table Schema<br />

Column name Constraints Data type Description<br />

m_PeerGroupId PRIMARY KEY<br />

NOT NULL<br />

UNIQUE<br />

The fddi table contains the Fibre Distributed Data Interface (FDDI) nodes that have been discovered.<br />

Table A50: instrumentation.fddi Database Table Schema<br />

Text The lowest level PNNI peer group identifier.<br />

Column name Constraints Data type Description<br />

m_UniqueAddress PRIMARY KEY<br />

NOT NULL<br />

m_StationManagmentTask PRIMARY KEY<br />

NOT NULL<br />

Text The unique address of the node.<br />

Integer The station management task for that node.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The workingEntities database<br />

Table A33 describes the workingEntities database.<br />

Table A51: Synopsis of the workingEntities Database<br />

Database name workingEntities<br />

Defined in NCHOME/etc/precision/DiscoSchema.cfg<br />

Fully qualified database table name workingEntities.finalEntity<br />

The finalEntity Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

workingEntities.containment<br />

Tracking <strong>Discovery</strong> Databases<br />

The workingEntities.finalEntity table is a central repository for information about discovered<br />

entities.<br />

Table A52: workingEntities.finalEntity Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_Name PRIMARY KEY<br />

NOT NULL<br />

UNIQUE<br />

Text Unique name of the discovered entity.<br />

m_Creator NOT NULL Text Name of agent (or finder) that discovered the<br />

entity.<br />

m_ObjectId Text Device class (a textual representation of the ASN.1<br />

address).<br />

m_Description Text Description of the device, taken from the<br />

sysDescr MIB variable for the entity.<br />

m_UniqueAddress Text <strong>IP</strong> address of the network entity.<br />

m_IsActive Externally defined<br />

Boolean data type<br />

m_HaveAccess Externally defined<br />

Boolean data type<br />

Boolean Integer Indicates whether the entity is active:<br />

(2) Indicates that the entity is discovered but is not<br />

in scope. Entities that are not in scope are not<br />

monitored by <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>.<br />

(1) Entity is active.<br />

(0) Entity is inactive.<br />

Boolean Integer Flag indicating whether SNMP access to the device<br />

is available:<br />

(1) SNMP access is available<br />

(0) No SNMP Access<br />

467


Appendix A: The <strong>Discovery</strong> Databases<br />

468<br />

Table A52: workingEntities.finalEntity Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

m_EntityType Externally defined<br />

entityType data type<br />

The containment Table<br />

The workingEntities.containment table is a central repository for information about<br />

containment information for discovered entities.It shows the containment relationships between all entities<br />

in the workingEntities.finalEntity table.<br />

For example, assume the workingEntities.finalEntity table contains a number of distinct<br />

entities, including the following:<br />

A device with <strong>IP</strong> address 1.2.3.4<br />

An interface on this device, 1.2.3.4[0[1]]<br />

The workingEntities.finalEntity table provides no containment information for these two<br />

entities. In other words, it does not indicate that the interface 1.2.3.4[0[1]] is physically contained<br />

within the device 1.2.3.4. This containment information is held within the<br />

workingEntities.containment table, as follows:<br />

m_Container=’1.2.3.4’<br />

m_Part=’1.2.3.4[0[1]]’<br />

m_IsPhysical=1<br />

m_LinkType=1<br />

Integer Element type description of the discovered entity:<br />

(0) Unknown type<br />

(1) Base entity<br />

(2) Local neighbor<br />

(3) Remote neighbor<br />

m_BaseName Text The name of the Base Entity for this device.<br />

m_AddressSpace Text The name of the NAT address space to which the<br />

device belongs. This value is set in the<br />

translations.NATAddressSpaceIds table.<br />

If the discovery is not using NAT, or if the device is<br />

in the public domain, this value is NULL.<br />

m_ExtraInfo Externally defined<br />

vblist data type<br />

m_LocalNbr Externally defined<br />

vblist data type<br />

Object Extra information requested by the agent.<br />

Object Information about the local neighbor.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Tracking <strong>Discovery</strong> Databases<br />

Note that m_Container and m_Part are each unique names of entities on the network, each with a<br />

unique m_Name in the workingEntities.finalEntity table.<br />

Table A53: workingEntities.finalEntity Database Table Schema<br />

Column name Constraints Data type Description<br />

m_Container PRIMARY KEY<br />

NOT NULL<br />

m_Part PRIMARY KEY<br />

NOT NULL<br />

Text The name of an object which contains something.<br />

This object refers to an entity on the network and<br />

corresponds to an entity with its own entry and<br />

unique m_Name in the<br />

workingEntities.finalEntity table.<br />

Text The name of the object which is contained. This<br />

object refers to an entity on the network and<br />

corresponds to an entity with its own entry and<br />

unique m_Name in the<br />

workingEntities.finalEntity table.<br />

m_IsPhysical Boolean Integer Flag indicating whether the containment is physical<br />

or logical:<br />

(1) Physical Containment<br />

(0) Logical Containment<br />

m_LinkType Int Value indicating mode of data transfer between<br />

m_Container and m_Part. The following values<br />

are possible:<br />

(0) No data is transmitted.<br />

(1) Data is transmitted both ways.<br />

(2) Data travels from m_Container to m_Part.<br />

(3) Data travels from m_Part to m_Container.<br />

469


Appendix A: The <strong>Discovery</strong> Databases<br />

A.8 Topology Databases<br />

470<br />

DISCO employs a series of databases to perform the data processing stages of the discovery cycle. Stitchers<br />

operate on these databases to knit together a network topology and create the containment model.<br />

The stitchers produce the various network topologies, such as layer 2 and layer 3 topologies, by<br />

amalgamating the information in the discovery agents returns tables into a single cumulative topology<br />

within the fullTopology database. When the full topology has been generated, another stitcher<br />

generates the containment model and stores the information in containers in the scratchTopology<br />

database, which is then sent to MODEL.<br />

The fullTopology Database Schema<br />

Table A54 describes the fullTopology database schema.<br />

Table A54: Synopsis of the fullTopology Database<br />

Database fullTopology<br />

Defined in NCHOME/etc/precision/DiscoSchema.cfg<br />

Fully qualified database table names fullTopology.entityByNeighbor<br />

The entityByNeighbor Table<br />

The entityByNeighbor table contains information about connectivity between discovered devices.<br />

Table A55: fullTopology.entityByNeighbor Database Table Schema<br />

Column name Constraints Data type Description<br />

m_Name PRIMARY KEY<br />

NOT NULL<br />

m_NbrName PRIMARY KEY<br />

NOT NULL<br />

m_NbrType Externally defined<br />

connectionType<br />

data type<br />

Text Unique name of an entity on the network.<br />

Text The name of the device that is connected to the<br />

unique network entity.<br />

Integer Integer representation of the type of connection<br />

between the network entity and its neighbor:<br />

(2) Main-to-Local<br />

(3) Local-to-Remote<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


The scratchTopology Database Schema<br />

Table A56 describes the scratchTopology database.<br />

Table A56: Synopsis of the scratchTopology Database<br />

Database name scratchTopology<br />

Defined in NCHOME/etc/precision/DiscoSchema.cfg<br />

Fully qualified database table name scratchTopology.entityByName<br />

The entityByName Table<br />

The entityByName table contains the deduced network model.<br />

Table A57: scratchTopology.entityByName Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_Name PRIMARY KEY<br />

NOT NULL<br />

UNIQUE<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Text Unique name of the network entity.<br />

Topology Databases<br />

m_Addresses List of text List of OSI model layer 1-7 addresses for the entity.<br />

m_Description Text Value of sysDescr MIB variable or other suitable<br />

description of the entity.<br />

m_Type Externally defined<br />

entityTypes data<br />

type<br />

Integer Element type of the entity:<br />

(0) Unknown<br />

(1) Chassis<br />

(2) Interface<br />

(3) Logical interface<br />

(4) Vlan object<br />

(5) Card<br />

(6) PSU<br />

(7) Subnet<br />

(8) Module<br />

m_ObjectId Text The device class to which the network entity<br />

belongs. This is a textual representation of the<br />

ASN.1 address.<br />

471


Appendix A: The <strong>Discovery</strong> Databases<br />

472<br />

Table A57: scratchTopology.entityByName Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

m_State Externally defined<br />

Boolean data type<br />

The impactTopology Database Schema<br />

Table A58 describes the impactTopology database.<br />

The entityByName Table<br />

Boolean Integer Flag indicating the state of the entity:<br />

(1) Active<br />

(0) Not Active<br />

m_Contains List of text List of elements or other containers contained<br />

within the current network entity.<br />

m_Upward<br />

Connections<br />

List of text List of containers that contain this entity.<br />

m_RelatedTo List of text List of entities that are connected to the network<br />

entity.<br />

m_HaveAccess Externally defined<br />

Boolean data type<br />

m_ExtraInfo Externally defined<br />

vblist data type<br />

Table A58: Synopsis of the impactTopology Database<br />

Database name impactTopology<br />

Boolean Integer Flag indicating whether SNMP access to the entity is<br />

available:<br />

(1) Have Access<br />

(0) No Access<br />

Any additional information.<br />

Defined in NCHOME/etc/precision/DiscoSchema.cfg<br />

Fully qualified database table name impactTopology.entityByName<br />

The entityByName table is an exact copy of the scratchTopology.entityByName database<br />

table.<br />

By default, the stitched topology from the scratchTopology DISCO database is considered the final<br />

topology and is passed to MODEL. Experienced users might wish to preview and approve the topology<br />

before it is passed to MODEL. For example, if you have configured a rediscovery with different parameters<br />

to your initial discovery, you may wish to preview the results before overwriting the current topology held<br />

in MODEL.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Topology Databases<br />

Instructions on how to do this by copying the topology from the scratchTopology database to the<br />

impactTopology database are given in the comments in CreateAndSendTopology.stch.<br />

These instructions, and the impactTopology database, are provided for the convenience of advanced<br />

users only. Previewing the topology would involve writing your own stitcher and is not supported by<br />

Micromuse.<br />

Table A59: impactTopology.entityByName Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_Name PRIMARY KEY<br />

NOT NULL<br />

UNIQUE<br />

Text Unique name of an entity on the network.<br />

m_Addresses List of text List of OSI model layer 1-7 addresses for the entity.<br />

m_Description Text Value of sysDescr MIB variable or other suitable<br />

description of the entity.<br />

m_Type Externally<br />

defined<br />

entityTypes<br />

data type<br />

Integer Element type of the entity:<br />

(0) Unknown<br />

(1) Chassis<br />

(2) Interface<br />

(3) Logical interface<br />

(4) Vlan object<br />

(5) Card<br />

(6) PSU<br />

(7) Subnet<br />

(8) Module<br />

m_ObjectId Text The device class to which the network entity belongs. This<br />

is a textual representation of the ASN.1 address.<br />

m_State Externally<br />

defined<br />

Boolean data<br />

type<br />

Boolean<br />

Integer<br />

Flag indicating the state of the entity:<br />

(1) Active<br />

(0) Not Active<br />

m_Contains List of text List of elements or other containers contained within the<br />

current network entity.<br />

m_UpwardConnections List of text List of containers that contain this entity.<br />

m_RelatedTo List of text List of entities that are connected to the network entity.<br />

473


Appendix A: The <strong>Discovery</strong> Databases<br />

474<br />

Table A59: impactTopology.entityByName Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

m_HaveAccess Externally<br />

defined<br />

Boolean data<br />

type<br />

m_ExtraInfo Externally<br />

defined vblist<br />

data type<br />

Boolean<br />

Integer<br />

Object type<br />

vblist<br />

Flag indicating whether SNMP access to the entity is<br />

available:<br />

(1) Have Access<br />

(0) No Access<br />

Any additional information.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


A.9 Rediscovery Database<br />

The rediscoveryStore database is used for comparison purposes in rediscovery mode.<br />

Table A60: Synopsis of the rediscoveryStore database<br />

Database Defined in Fully qualified database table names<br />

rediscoveryStore NCHOME/etc/precision/<br />

DiscoSchema.cfg<br />

The dataLibrary Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Rediscovery Database<br />

The dataLibrary table is used as a reference point during rediscovery mode to compare the previous<br />

and present states.<br />

Table A61: rediscoveryStore.dataLibrary Database Table Schema<br />

Column name Constraints Data type Description<br />

The rediscoveredEntities Table<br />

rediscoveryStore.dataLibrary<br />

rediscoveryStore.rediscoveredEntities<br />

m_Name Text Unique name of an entity on the network.<br />

m_UniqueAddress Text The <strong>IP</strong> address of a discovered network entity.<br />

m_CompareDb NOT NULL Text The entity that is used to compare this network entity.<br />

The rediscoveredEntites table stores entities found during a rediscovery.<br />

Table A62: rediscoveryStore.rediscoveredEntities Database Table Schema<br />

Column name Constraints Datatype Description<br />

m_Name Text Unique name of an entity on the network.<br />

m_UniqueAddress Text The <strong>IP</strong> address of a discovered network<br />

entity.<br />

m_PhysAddr Text The physical address of the entity.<br />

m_OldBaseName The base name of the entity prior to<br />

rediscovery<br />

m_NewBaseName The base name of the entity after<br />

rediscovery.<br />

475


Appendix A: The <strong>Discovery</strong> Databases<br />

A.10 Additional Databases<br />

476<br />

The databases of each discovery agent are based on a template called the agentTemplate database.<br />

The agentTemplate Database Schema<br />

Table A63 describes the agentTemplate database.<br />

Table A63: Synopsis of the agentTemplate database<br />

Database name agentTemplate<br />

Defined in NCHOME/etc/precision/DiscoSchema.cfg<br />

Fully qualified database table names agentTemplate.despatch<br />

The <strong>Discovery</strong> Agent Despatch Table<br />

agentTemplate.returns<br />

When a device has been interrogated by the Details agent it is passed to the Associated Address agent to<br />

check that the device has not already been discovered. Provided the device has not already been discovered,<br />

the device details are processed and sent by a stitcher to the despatch table of the appropriate agent. The<br />

despatch table is described in Table A64.<br />

As soon as the device details are placed in the despatch table, the agent attempts to retrieve connectivity<br />

information pertaining to the device.<br />

Table A64: agentTemplate.despatch Database Table Template (1 of 2)<br />

Column name Constraints Data type Description<br />

m_Name PRIMARY KEY<br />

NOT NULL<br />

Text Unique name of an entity on the network.<br />

m_UniqueAddress NOT NULL Text Unique <strong>IP</strong> address of the network entity.<br />

m_Protocol Integer The protocol of the discovered device:<br />

(1) <strong>IP</strong><br />

(2) <strong>IP</strong>-NAT<br />

m_ObjectId Text Textual representation of the device class (an<br />

ASN.1 address).<br />

m_SnmpAccess<strong>IP</strong> Text If present, overrides the <strong>IP</strong> address used for SNMP<br />

access to devices using the Helper Server.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table A64: agentTemplate.despatch Database Table Template (2 of 2)<br />

Column name Constraints Data type Description<br />

The <strong>Discovery</strong> Agent Returns Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Additional Databases<br />

m_AddressSpace Text The name of the NAT address space to which the<br />

device belongs. This value is set in the<br />

translations.NATAddressSpaceIds<br />

table. If the discovery is not using NAT, or if the<br />

device is in the public domain, this value is NULL.<br />

m_HaveAccess Externally defined<br />

Boolean data type<br />

Boolean<br />

Integer<br />

Flag indicating whether there is SNMP access to<br />

the device:<br />

(1) Have Access<br />

(0) No Access<br />

Returned device connectivity details are placed in the returns table of the agent. These details are used<br />

to populate the topology databases. The returns table is described in Table A65.<br />

Table A65: agentTemplate.returns Database Table Schema (1 of 2)<br />

Column name Constraints Data type Description<br />

m_Name NOT NULL Text Unique name of an entity on the network.<br />

m_UniqueAddress NOT NULL Text Layer 3 address of this entity.<br />

m_Protocol Integer The protocol of the discovered device:<br />

(1) <strong>IP</strong><br />

(2) <strong>IP</strong>-NAT<br />

m_ObjectId Text Textual representation of the device class (an<br />

ASN.1 address).<br />

m_HaveAccess Externally defined<br />

Boolean data type<br />

m_ExtraInfo Externally defined<br />

vblist data type<br />

m_LocalNbr Externally defined<br />

neighbor data type<br />

m_RemoteNbr Externally defined<br />

nbrsNeighbor data<br />

type<br />

Boolean Integer Flag indicating whether there is SNMP access to<br />

the device:<br />

(1) Have Access<br />

(0) No Access<br />

Object Any extra information specified by the user in<br />

the agent definition file.<br />

Object Direct neighbors (interfaces).<br />

Object Remote neighbors connected to interfaces.<br />

m_UpdAgent Text The agent that updated this device.<br />

477


Appendix A: The <strong>Discovery</strong> Databases<br />

478<br />

Table A65: agentTemplate.returns Database Table Schema (2 of 2)<br />

Column name Constraints Data type Description<br />

m_SnmpAccess<strong>IP</strong> Text If present, overrides the <strong>IP</strong> address used for<br />

SNMP access to devices using the Helper Server.<br />

m_AddressSpace Text The name of the NAT address space to which the<br />

device belongs. This value is set in the<br />

translations.NATAddressSpaceIds<br />

table. If the discovery is not using NAT, or if the<br />

device is in the public domain, this value is NULL.<br />

m_LastRecord Externally defined<br />

Boolean data type<br />

Boolean Integer Is this the last record for this entity:<br />

(1) True<br />

(0) False<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


B. Object_Query_Language.fm August 16, 2006<br />

Appendix B: The Object Query Language<br />

This chapter describes the Object Query Language (OQL), which <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> uses to manipulate<br />

and store data in databases.<br />

This chapter contains the following sections:<br />

Introduction to OQL on page 480<br />

Creating a Database or Table on page 485<br />

Inserting Data into a Table on page 490<br />

Selecting Data from a Table on page 493<br />

Conditional Tests in OQL on page 495<br />

Using Select to Perform Subqueries on page 498<br />

Selecting Data into Another Table on page 501<br />

Updating a Record in a Table on page 503<br />

Listing the Databases or Tables on page 505<br />

Deleting a Record from a Database Table on page 507<br />

Deleting a Database or Table on page 508<br />

The Eval Statement on page 509<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 479


Appendix B: The Object Query Language<br />

B.1 Introduction to OQL<br />

480<br />

OQL is a version of the Structured Query Language (SQL) that has been designed for use in<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>. The components create and interact with their databases using OQL.<br />

You can use OQL to create new databases or insert data into existing databases (to configure the operation<br />

of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> components) by amending the component schema files. You can also issue OQL<br />

statements using the OQL Service Provider, for example, to create or modify databases, insert data into<br />

databases and retrieve data. The OQL Service Provider is described in Chapter 5: Querying <strong>Netcool</strong>/<strong>Precision</strong><br />

<strong>IP</strong> Databases on page 165.<br />

Key Differences Between OQL and SQL<br />

OQL differs from SQL in that:<br />

OQL supports object referencing within tables. Objects can be nested within objects.<br />

Not all SQL keywords are supported within OQL. Keywords that are not relevant to<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> have been removed from the syntax.<br />

OQL can perform mathematical computations within OQL statements.<br />

General Rules of OQL<br />

The following rules apply to OQL statements:<br />

Quotes in OQL<br />

All complete statements must be terminated by a semi-colon.<br />

A list of entries in OQL is usually separated by commas but not terminated by a comma.<br />

Strings of text are enclosed by matching quotation marks. The rules for quotation mark usage are<br />

described below.<br />

In OQL the TEXT datatype must be enclosed by matching quotation marks (either single or double quotes).<br />

The example below is a standard OQL insert into the CTRL services.inTray table, showing values<br />

of the TEXT data type enclosed in double quotes, an integer value that is not enclosed in any quotation<br />

marks, and a LIST OF TYPE TEXT that is enclosed in square brackets. The comma separated data within<br />

the list is enclosed in double quotes.<br />

insert into services.inTray<br />

(<br />

serviceName, servicePath, domainName, argList, retryCount<br />

)<br />

values<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


(<br />

);<br />

"ncp_disco", "/opt/netcool/precision/Solaris2/bin", "MYDOMAIN",<br />

[ "-domain" , "NCOMS" , "-latency" , "60000" ], 5<br />

Punctuation Used in OQL<br />

Table B1 shows the punctuation used in the OQL syntax.<br />

Table B1: Punctuation Used in the OQL Syntax<br />

Symbol Meaning<br />

- Subtraction, negative.<br />

+ Addition, positive.<br />

* Multiplication or a wild card that matches any characters within its expression.<br />

( Encloses items in a list, for example, following the insert into statement.<br />

) Encloses items in a list, for example, following the insert into statement.<br />

, Separates entries in a list.<br />

[ ] Encloses items of the list datatype.<br />

{ } Encloses items of the object datatype.<br />

. Separates database, table and column names.<br />

; Terminates OQL statements.<br />

~ Matches regular expressions.<br />

-> Retrieves a sub value of an object.<br />

Comments in OQL<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Introduction to OQL<br />

Comments in OQL are introduced by -- or //. If a comment requires a carriage return, the characters on<br />

the next line must also be commented out.<br />

-- This is a valid OQL comment.<br />

// This is also a valid OQL comment.<br />

481


Appendix B: The Object Query Language<br />

Logical operators of OQL<br />

482<br />

Table B2 describes the logical operators you can use in OQL.<br />

Table B2: Logical Operators of OQL<br />

Keyword Brief description<br />

AND Combines search conditions, all of which must be true in order for the condition to be passed.<br />

OR Combine search conditions, one of which must be true in order for the condition to be passed.<br />

Precedence and Association of Operators<br />

The rules for precedence and association of operators determine the grouping of operators with operands,<br />

and indicate the order in which the operators in an expression are executed. For complex expressions, use<br />

parentheses to avoid ambiguity. Table B3 describes the operators that are used in the Object Query<br />

Language.<br />

Table B3: OQL Operators in Order of Decreasing Precedence<br />

Operator Description Associativity Precedence<br />

- Negative sign Non-associative 1 (Highest)<br />

* Multiplication Left 2<br />

/ Division Left 2<br />

OR Logical OR Left 3<br />

AND Logical AND Left 4<br />

NOT Logical NOT Left 5<br />

= Equal to Left 6<br />

Not equal to Left 6<br />

< Less than Left 6<br />

> Greater than Left 6<br />

= Greater than or equal to Left 6<br />

+ Addition Left 7<br />

- Subtraction Left 7 (Lowest)<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Conventions Used in This Chapter<br />

The following conventions have been used in this chapter to explain the OQL syntax:<br />

OQL keywords and their required punctuation are shown in bold in examples.<br />

Parameters are shown in italics.<br />

[ Optional parameters are shown enclosed by square brackets ].<br />

OQL commands are terminated with a semicolon.<br />

... following a list of parameters indicates that you can continue the list if necessary.<br />

OQL Service Provider command lines are shown with the example command line prompt<br />

|phoenix:1.> followed by relevant sample output.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Introduction to OQL<br />

The system name within the prompt appears as phoenix within this manual. This is replaced by an<br />

appropriate value for your system, such as the host name.<br />

Sample Databases Used in This Appendix<br />

To illustrate the OQL keywords in use, this appendix uses a sample database, the staff database, which<br />

contains three tables: managers, employees and contractors. The data in this database (which is<br />

used throughout the examples in this chapter) is listed in Table B4, Table B5, and Table B6.<br />

Table B4: Data in the staff.managers Database Table<br />

EmployeeID Name Department Gender Age<br />

1 Matt Development M 28<br />

2 Irene Customer Services F 52<br />

3 Ernie Sales M 23<br />

4 Paul Marketing M 26<br />

5 Jim Support M 27<br />

Table B5: Data in the staff.employees Database Table<br />

EmployeeID Name Skills Gender Age<br />

6 Paul HTML, C++, Java M 26<br />

7 Carl Perl M 32<br />

8 Rob UNIX, Perl M 23<br />

9 Sarah Java, C++ F 24<br />

10 Lisa UNIX, HTML F 25<br />

483


Appendix B: The Object Query Language<br />

484<br />

Table B6: Data in the staff.contractors Database Table<br />

EmployeeID Name Gender Age ExtraInfo<br />

11 James M 22 ContractLength = 6 months; Department = Marketing;<br />

12 Karen F 25 ContractLength = 5 months; Department = Sales;<br />

13 Jane F 26 ContractLength = 7 months; Department = Development;<br />

14 Richard M 23 ContractLength = 1 month; Department = Operations;<br />

15 Glenn M 28 ContractLength = 2 months; Department = Operations;<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


B.2 Creating a Database or Table<br />

Datatypes<br />

Databases and tables are created using the create command.<br />

create database database_name ;<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Creating a Database or Table<br />

When creating a table, you must define all the columns of the table, specifying a datatype (for example, text<br />

or integer) and if applicable the column constraints and any default value.<br />

create table database_name.table_name<br />

(<br />

column_name [ constraints ] [ default default ] ,<br />

[ column_name [ constraints ] [ default default ] , ]<br />

[ additional_columns ]<br />

[ unique ( column_name ) , ]<br />

[ counter ( column_name ) , ]<br />

[ timestamp ( column_name ) , ]<br />

);<br />

The entries within the brackets are separated by commas, although the last entry is not terminated by a<br />

comma.<br />

All columns must have an associated datatype that indicates the acceptable input for that column. Table B7<br />

shows the datatypes that are used in OQL:<br />

Table B7: Datatypes of OQL (1 of 2)<br />

Datatype Description<br />

TEXT Holds plain text.<br />

INT Holds integer values.<br />

INT TYPE datatype Holds a conversion of the declared datatype to an integer.<br />

FLOAT Holds decimal values.<br />

LONG Holds a 32-bit numerical value.<br />

LONG64 Holds a 64-bit numerical value.<br />

DATA Holds opaque data, typically of the binary format.<br />

LIST TYPE datatype Holds a list of particular datatypes. The list is enclosed in square brackets, [].<br />

OBJECT TYPE datatype Holds objects of particular datatypes. The object is enclosed in curly braces, {}.<br />

Objects hold a list of varbinds (name/value pairs).<br />

485


Appendix B: The Object Query Language<br />

486<br />

Table B7: Datatypes of OQL (2 of 2)<br />

Datatype Description<br />

TIME Holds information pertaining to time. Although the TIME datatype is acceptable,<br />

it is evaluated by the OQL parser to LONG.<br />

<strong>IP</strong>ADDRESS Holds <strong>IP</strong> addresses. Although the <strong>IP</strong>ADDRESS datatype is acceptable, it is<br />

evaluated by the OQL parser to LONG. Therefore the <strong>IP</strong> address is stored as an<br />

integer value, like that produced by inet_addr(), instead of the more<br />

common period-separated string format.<br />

Objects and Varbinds<br />

An object is a comma separated list of varbinds enclosed by curly braces, where a varbind is a name/value<br />

pair, for example, ifIndex=20 or ifDescr="utp10/100". You can perform operations on one of<br />

the varbinds in an object using the -> symbol, as demonstrated in the examples in Selecting Based on Part of<br />

an Object on page 497 and Updating an Object on page 503.<br />

External Datatypes<br />

It is possible to define additional datatypes that map integers to the possible values of a column; these<br />

datatypes are referred to as external datatypes, since they are defined externally to the present schema.<br />

In order to use a datatype that has been defined in a previously loaded schema, the current schema must<br />

contain a statement of the following structure.<br />

data type datatype is external datatype ;<br />

Examples of the datatype declaration are shown below.<br />

data type boolean is external boolean<br />

data type entityTypes is external entityTypes<br />

After you have made these declarations you can use the datatypes boolean and entityTypes in the<br />

current schema, provided that they have also been defined in a previously loaded schema.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Column Constraints<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Creating a Database or Table<br />

Column constraints are restrictions on the data that can be inserted into a given column. Any of the<br />

constraints shown in Table B8 can be applied to any column.<br />

If multiple constraints are being specified for a single column, NOT NULL must be specified before<br />

PRIMARY KEY.<br />

Default Values<br />

Unique<br />

Counter<br />

Table B8: Column Constraints<br />

Constraint Description<br />

NOT NULL Indicates that the column must be assigned a value.<br />

NULL is not the same as zero or white space.<br />

PRIMARY KEY Denotes that the column is a primary key for the table. The primary keys can be used to join<br />

related tables in a multiple table query.<br />

The combination of data in the PRIMARY KEY columns of a given table must be unique,<br />

although the data in each individual column does not necessarily have to be unique. For<br />

example, the primary key might comprise the multiple fields of forename, surname, and age.<br />

The primary key is internally indexed and so provides faster query times, but slower insert<br />

and delete times. Unique and indexed fields are also internally indexed.<br />

List and object fields cannot be indexed, thus they cannot be set as primary keys, unique<br />

fields, nor as part of an index definition.<br />

A default value can be applied to a column when it is created with the default keyword. If an explicit value<br />

is not provided for that column when data is inserted, the specified default value is used.<br />

The optional unique column constraint ensures that all entries in the specified column are unique. The<br />

unique column is internally indexed and so provides faster query times, but slower insert and delete times.<br />

List and object fields cannot be indexed, thus they cannot be set as unique fields, nor as part of an index<br />

definition.<br />

The optional counter column constraint delegates the responsibility of counting duplicate records to the<br />

specified column. If you attempt to insert a duplicate record into the table, the insertion of the duplicate<br />

entry is suppressed and the value of the specified column is incremented in the record that already exists.<br />

487


Appendix B: The Object Query Language<br />

Timestamp<br />

488<br />

The optional timestamp column constraint stores the date and time information for the creation of the<br />

record in the specified column of the database table. The timestamp properties are:<br />

Format: YYYY-MM-DD HH:MM:SS.nnnnn....<br />

Range: 0001-01-01 00:00:00.......to 9999-12-31 23:59:59.999999.......<br />

Example of Database and Table Creation<br />

The following examples use the create keyword to create the sample staff database and define the tables.<br />

These example OQL statements illustrate the use of the column constraints and the default keyword.<br />

create database staff; // creates the staff database<br />

The following insert defines the managers table.<br />

create table staff.managers<br />

(<br />

EmployeeID int NOT NULL PRIMARY KEY,<br />

Name text NOT NULL,<br />

Department text default "Sales",<br />

Gender text,<br />

Age int,<br />

unique ( EmployeeID ) // indicates that the data in the<br />

// EmployeeID column must be unique.<br />

);<br />

For the managers table:<br />

The EmployeeID and Name columns cannot be NULL.<br />

The EmployeeID column is the primary key and must be unique.<br />

If no value is inserted into the Department column for a given record it takes the value "Sales".<br />

The following insert creates the staff.employees table.<br />

create table staff.employees<br />

(<br />

EmployeeID int NOT NULL PRIMARY KEY,<br />

Name text NOT NULL,<br />

Skills list type text,<br />

Gender text,<br />

Age int // There is no comma here because this<br />

// is the last entry.<br />

);<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


For the staff.employees table:<br />

The EmployeeID and Name columns cannot be NULL.<br />

The Skills column is a list of text strings.<br />

The following insert creates the staff.contractors table.<br />

create table staff.contractors<br />

(<br />

EmployeeID int NOT NULL PRIMARY KEY,<br />

Name text NOT NULL,<br />

Gender text,<br />

Age int,<br />

ExtraInfo object type vblist,<br />

volatile<br />

);<br />

For the staff.contractors table:<br />

The ExtraInfo column contains a list of varbinds.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Creating a Database or Table<br />

489


Appendix B: The Object Query Language<br />

B.3 Inserting Data into a Table<br />

490<br />

The following example shows how to insert data into a table using the insert keyword:<br />

insert into database_name.table_name<br />

(<br />

column<br />

[ , column ]<br />

[ , column ]<br />

[ ... ]<br />

)<br />

values<br />

(<br />

data<br />

[ , data ]<br />

[ , data ]<br />

[ ... ]<br />

);<br />

Each data value is inserted into the corresponding column name, so the number of data values (and the data<br />

types) must correspond with the number of column names specified. Although it is not good practice, it is<br />

acceptable to omit the list of column names. If you choose to omit the column names, the first value<br />

specified after the values keyword is inserted into the first column of the database, the second value into the<br />

second column, and so on. Additionally, if you omit the column names, the number of values must<br />

correspond to the number of columns in the database, so you must either insert a value into each database<br />

column or explicitly specify NULL for columns into which you do not wish to insert a value.<br />

Example of Inserting Data into a Database<br />

The population of the sample databases with data is shown in the examples below, which highlight some of<br />

the different valid forms of the insert statement. The following example specifies all the column names:<br />

insert into staff.managers<br />

(<br />

EmployeeID, Name, Department, Gender, Age<br />

)<br />

values<br />

(<br />

1, "Matt", "Development", "M", 28<br />

);<br />

The following example does not specify column names, but is still a valid insert because a value has been<br />

specified for each column of the database.<br />

insert into staff.managers<br />

values<br />

(<br />

2, "Janet", "Customer Services", "F", 27<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


);<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

// no column names are specified, so the values are inserted<br />

// into the columns in order.<br />

Inserting Data into a Table<br />

The following example specifies no value for the Department column, which is populated with the<br />

default value instead:<br />

insert into staff.managers<br />

(<br />

EmployeeID, Name, Gender, Age<br />

)<br />

values<br />

(<br />

3, "Phil", "M", 25<br />

// No value for Department has been specified. The column<br />

// therefore takes the default value "Sales" that was specified<br />

// when the table was created.<br />

);<br />

Example of an Invalid Insert<br />

Since staff.managers is unique on the EmployeeID column, the following insert would now be<br />

invalid. The following example would therefore be rejected, because there is already a record with<br />

EmployeeID=3.<br />

insert into staff.managers<br />

(<br />

EmployeeID, Name, Department, Gender, Age<br />

)<br />

values<br />

(<br />

3, "John", "Marketing", "M", 26<br />

);<br />

List and Object Data Types<br />

The following examples show the use of the list and object datatypes. The following example is an insert into<br />

the staff.employees table, where the Skills column has been defined as list type text.<br />

insert into staff.employees<br />

(<br />

EmployeeID, Name, Skills, Gender, Age<br />

)<br />

values<br />

(<br />

6, "Matt", [ "HTML", "C++", "Java" ], "M", 24<br />

);<br />

491


Appendix B: The Object Query Language<br />

492<br />

The following example is an insert into the staff.contractors table, where the ExtraInfo<br />

column has been defined as object type vblist:<br />

insert into staff.contractors<br />

(<br />

EmployeeID, Name, Gender, Age, ExtraInfo<br />

)<br />

values<br />

(<br />

11, "James", "M", 22, { ContractLength=6, Department="Marketing" }<br />

);<br />

These inserts are shown for illustrative purposes. The remaining examples in this chapter assume that all the<br />

data shown in Table B4 on page 483, Table B5 on page 483 and Table B6 on page 484 has been inserted<br />

into the managers, employees and contractors tables of the staff database.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


B.4 Selecting Data from a Table<br />

You can query the data in a table using the select keyword.<br />

select comma_separated_column_list_or_wildcard<br />

from database_name.table_name<br />

[ where conditional_test ] ;<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Selecting Data from a Table<br />

The * symbol can be used as a wildcard in a select statement to return all the columns of the table.<br />

Alternatively a comma-separated list of columns can be specified. The select statement is shown below in use<br />

within the OQL Service Provider to query the staff.managers table (the following example output is<br />

for illustration only and has been abbreviated).<br />

|phoenix:1.> select * from staff.managers;<br />

|phoenix:2.> go<br />

.....<br />

{<br />

EmployeeID=1;<br />

Name='Matt';<br />

Department='Development';<br />

Gender='M';<br />

Age=28;<br />

}<br />

{<br />

EmployeeID=2;<br />

....<br />

....<br />

}<br />

( 5 record(s) : Transaction complete )<br />

The following example shows a select statement that retrieves only specific fields from the<br />

staff.managers table.<br />

|phoenix:1.> select Name, Gender from staff.managers;<br />

|phoenix:2.> go<br />

.....<br />

{<br />

Name='Matt';<br />

Gender='M';<br />

}<br />

{<br />

Name='Irene';<br />

Gender='F';<br />

}<br />

{<br />

Name='Ernie';<br />

....<br />

....<br />

}<br />

( 5 record(s) : Transaction complete )<br />

493


Appendix B: The Object Query Language<br />

494<br />

The following example uses a where clause to restrict the results.<br />

|phoenix:1.> select EmployeeID, Name from staff.managers<br />

|phoenix:2.> where Department = "Marketing";<br />

|phoenix:3.> go<br />

.<br />

{<br />

EmployeeID=4;<br />

Name='John';<br />

}<br />

( 1 record(s) : Transaction complete )<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


B.5 Conditional Tests in OQL<br />

The tests in Table B9 can be used in OQL, for example, in a select where statement.<br />

Table B9: Comparison Operators in OQL<br />

Symbol Description<br />

= Equal to.<br />

Not equal to.<br />

< Less than.<br />

> Greater than.<br />

= Greater than or equal to.<br />

Example Uses of the like Operator<br />

The following example query would return the complete records of all employees listed in the<br />

contractors table whose name begins with an upper-case letter J.<br />

|phoenix:1.> select EmployeeID, Name from staff.contractors<br />

|phoenix:2.> where Name like "J";<br />

|phoenix:3.> go<br />

..<br />

{<br />

EmployeeID=11;<br />

Name='James';<br />

}<br />

{<br />

EmployeeID=13;<br />

Name='Jane';<br />

}<br />

( 2 record(s) : Transaction complete )<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Conditional Tests in OQL<br />

like Compares for similarity using UNIX-style regular expressions. The like operator is<br />

more powerful than the traditional SQL implementations that use the more limited<br />

token matching for comparison.<br />

in Searches for the presence of a record within a specified table (using a subquery).<br />

The in operator can also be used to determine whether a specified value is<br />

contained in a list field.<br />

is null Tests whether the specified column is null (that is, has not been assigned a value).<br />

495


Appendix B: The Object Query Language<br />

496<br />

The following example query identifies the records in the employees table that contain the lower-case<br />

letter r in the Name column.<br />

|phoenix:1.> select Name from staff.employees<br />

|phoenix:2.> where Name like ".*[r].*";<br />

|phoenix:3.> go<br />

..<br />

{<br />

Name='Carl';<br />

}<br />

{<br />

Name='Sarah';<br />

}<br />

( 2 record(s) : Transaction complete )<br />

The following example query identifies the records in the employees table for which the Name column<br />

begins with an upper-case C or upper-case R.<br />

|phoenix:1.> select Name from staff.employees<br />

|phoenix:2.> where Name like "^[CR]";<br />

|phoenix:3.> go<br />

..<br />

{<br />

Name='Carl';<br />

}<br />

{<br />

Name='Rob';<br />

}<br />

( 2 record(s) : Transaction complete )<br />

Example Use of the and Operator<br />

The following example uses the conjunctive operator and to combine two search conditions.<br />

|phoenix:1.> select Name, Gender from staff.managers<br />

|phoenix:2.> where Gender "M" and Gender "Male";<br />

|phoenix:3.> go<br />

.<br />

{<br />

Name='Janet';<br />

Gender='F';<br />

}<br />

( 1 record(s) : Transaction complete )<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Example Use of the or Operator<br />

The following example uses the or operator to combine two search conditions.<br />

|phoenix:1.> select Name, Age from staff.employees<br />

|phoenix:2.> where Name="Carl" or Name="Matt";<br />

|phoenix:3.> go<br />

..<br />

{<br />

Name='Matt';<br />

Age=24;<br />

}<br />

{<br />

Name='Carl';<br />

Age=28;<br />

}<br />

( 2 record(s) : Transaction complete )<br />

Selecting Based on Part of an Object<br />

The following example retrieves records from the staff.contractors table where<br />

Department="Operations" within the ExtraInfo column.<br />

|phoenix:1.> select Name, Age from staff.employees<br />

|phoenix:2.> where ExtraInfo->Department="Operations";<br />

|phoenix:3.> go<br />

..<br />

{<br />

Name='Richard';<br />

Age=23;<br />

}<br />

{<br />

Name='Glenn';<br />

Age=28;<br />

}<br />

( 2 record(s) : Transaction complete )<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Conditional Tests in OQL<br />

497


Appendix B: The Object Query Language<br />

B.6 Using Select to Perform Subqueries<br />

498<br />

Subqueries are queries embedded within queries using double brackets.<br />

The example below retrieves the Name and Age columns from any record in the staff.employees<br />

table whose Name also exists in the Name column of the staff.managers table.<br />

|phoenix:1.> select Name, Age from staff.employees<br />

|phoenix:2.> where Name in<br />

|phoenix:3.> ( ( select Name from staff.managers ) );<br />

|phoenix:4.> go<br />

..<br />

{<br />

Name='Matt';<br />

Age=24;<br />

}<br />

{<br />

Name='Rob';<br />

Age=23;<br />

}<br />

( 2 record(s) : Transaction complete )<br />

Any valid query can be embedded within the double brackets.<br />

The following example subquery retrieves the Name and Age columns of the managers table where the<br />

value of the staff.managers.Age column matches one of the staff.employees.Age columns<br />

and is greater than 25.<br />

|phoenix:1.> select Name, Age from staff.managers<br />

|phoenix:2.> where Age in<br />

|phoenix:3.> (<br />

|phoenix:4.> (<br />

|phoenix:5.> select Age from staff.employees<br />

|phoenix:6.> where Age > 25<br />

|phoenix:7.> )<br />

|phoenix:8.> );<br />

|phoenix:9.> go<br />

.<br />

{<br />

Name='Matt';<br />

Age=28;<br />

}<br />

( 1 record(s) : Transaction complete )<br />

The query returns only one record. Although two records from the managers table have ages that match<br />

the employees table, only one of the matches is also over 25.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Using Subqueries to Search a List<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Using Select to Perform Subqueries<br />

The following example uses a subquery to search a list, the Skills column of the staff.employees<br />

table. The name of the field to be searched is enclosed in parentheses.<br />

|phoenix:1.> select Name, Skills from staff.employees<br />

|phoenix:2.> where ( "C++" in (Skills) );<br />

|phoenix:3.> go<br />

..<br />

{<br />

Name='Matt';<br />

Skills=['HTML','C++','Java'];<br />

}<br />

{<br />

Name='Sarah';<br />

Skills=['Java','C++'];<br />

}<br />

( 2 record(s) : Transaction complete )<br />

Selecting Based on Part of a List<br />

You can use the list operators all, *, and any and a conditional test to select records based on part of a list,<br />

although these list operators can only be used at the end of an object definition. all and * return records<br />

where the conditional test is true for all items in a list. A query using the keyword any returns records where<br />

the conditional test is true for any of the items in the list.<br />

The following example retrieves all the records that contain "C++" anywhere in the list of Skills.<br />

|phoenix:1.> select Name, Skills from staff.employees<br />

|phoenix:2.> where Skills (any) = "C++";<br />

|phoenix:3.> go<br />

..<br />

{<br />

Name='Matt';<br />

Skills=['HTML','C++','Java'];<br />

}<br />

{<br />

Name='Sarah';<br />

Skills=['Java','C++'];<br />

}<br />

( 2 record(s) : Transaction complete )<br />

The following example returns the records that contain only "Perl" in the list of Skills.<br />

|phoenix:1.> select Name, Skills from staff.employees<br />

|phoenix:2.> where Skills (*) = "Perl";<br />

|phoenix:3.> go<br />

.<br />

{<br />

499


Appendix B: The Object Query Language<br />

500<br />

Name='Carl';<br />

Skills=['Perl'];<br />

}<br />

( 1 record(s) : Transaction complete )<br />

The list operators can also be used in table joins, as described on Using any, *, and all to Perform Table Joins<br />

on page 501.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


B.7 Selecting Data into Another Table<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Selecting Data into Another Table<br />

The select into statement retrieves data from one table and inserts it into another. The select into<br />

command does not delete the existing record.<br />

select column_or_wildcard [ , column ... ]<br />

into destination_database_name.destination_table_name<br />

from source_database_name.source_table_name<br />

[ where conditional_test ] ;<br />

The columns selected from the source table are inserted into the destination table in order, regardless of the<br />

column names and structure of the destination table. Omitting the optional where condition selects all the<br />

records from the source table.<br />

If you use a wildcard, all the columns from the source table are selected and inserted in order into the<br />

destination table. Any null columns in the source table are skipped in both the source and destination tables,<br />

for example, if the fourth column of the source table is null, the fourth column in the destination table is<br />

skipped.<br />

If you explicitly specify a list of columns to select from the source table, they are inserted into the destination<br />

table in the order in which they are specified (even if the order in which they are specified is not the order<br />

in which they exist in the source table).<br />

For example, the following statement would select the values of the Age and Gender columns of the<br />

staff.managers table and insert the values into the first two columns of the staff.employees<br />

table.<br />

select Age, Gender into staff.employees from staff.managers;<br />

The following example selects EmployeeID and Name from any record in the staff.employees<br />

table for which Name="Carl" and inserts the values into the first two columns of the<br />

staff.managers table.<br />

|phoenix:1.> select EmployeeID, Name<br />

|phoenix:2.> into staff.managers from staff.employees<br />

|phoenix:3.> where Name="Carl";<br />

|phoenix:4.> go<br />

Using any, *, and all to Perform Table Joins<br />

The examples in this section show how the operators can also be used to perform table joins.<br />

501


Appendix B: The Object Query Language<br />

502<br />

Matching Every Entry in Multiple Lists<br />

The following example only returns records where every entry in db.table1.m_List is equal to every<br />

entry in db.table2.m_OtherList. For example, if m_List = [ 1, 1, 1 ] and<br />

m_OtherList = [ 1, 1 ] they match, but if m_List = [ 1, 2, 1] and m_OtherList<br />

= [1, 1], they do not match.<br />

|phoenix:1.> select * from db.table1 , db.table2<br />

|phoenix:2.> where (db.table1.m_List( * ) = db.table2.m_OtherList( * );<br />

|phoenix:3.> go<br />

Matching Any Entry in Multiple Lists<br />

The following example returns any record where any item in db.table1.m_List matches any item in<br />

db.table2.m_OtherList. For example, if m_List = [ 1, 2, 3 ] and m_OtherList =<br />

[ 3, 4 ] they match because 3 is in both lists. However, if m_List = [ 1, 2, 3 ] and<br />

m_OtherList = [ 4, 5] they do not match.<br />

|phoenix:1.> select * from db.table1 , db.table2<br />

|phoenix:2.> where (db.table1.m_List( any ) = db.table2.m_OtherList( any );<br />

|phoenix:3.> go<br />

Matching All the Entries in One List with Any Entry in Another List<br />

The following example returns any record where all the entries in db.table1.m_List match any of the<br />

entries in db.table2.m_OtherList. For example, if m_List = [ 1, 2, 3 ] and<br />

m_OtherList = [ 3, 1, 2, 4 ] they match, because all the entries in m_List match an entry<br />

in m_OtherList. However, if m_List = [ 1, 2, 3 ] and m_OtherList = [ 3, 2, 4<br />

] then they do not match because not all the entries in m_List have a match in m_OtherList.<br />

|phoenix:1.> select * from db.table1 , db.table2<br />

|phoenix:2.> where (db.table1.m_List( * ) = db.table2.m_OtherList( any );<br />

|phoenix:3.> go<br />

Matching Any of the Entries in One List with All the Entries in the Second List<br />

The following example returns any record where any of the entries in db.table1.m_List match all of<br />

the entries in db.table2.m_OtherList. For example, if m_List = [ 1, 2, 3 ] and<br />

m_OtherList = [ 2, 2 ] they match because one of the entries in m_List matches all the entries<br />

in m_OtherList. However, if m_List = [ 1, 2, 3 ] and m_OtherList = [ 1, 2, 3<br />

] they do not match, because there is no entry in m_List that is equal to every entry in m_OtherList.<br />

|phoenix:1.> select * from db.table1 , db.table2<br />

|phoenix:2.> where (db.table1.m_List( any ) = db.table2.m_OtherList( * );<br />

|phoenix:3.> go<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


B.8 Updating a Record in a Table<br />

Use the update keyword to update an existing record in a table.<br />

update database_name.table_name<br />

set column = value<br />

[ , column = value ... ]<br />

[ where conditional_test ] ;<br />

If the update statement is used without a where condition, all records are updated.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Updating a Record in a Table<br />

The following example updates the Age column of the staff.managers table for any records where<br />

Name="John".<br />

|phoenix:1.> update staff.managers<br />

|phoenix:2.> set Age=27<br />

|phoenix:3.> where Name="John";<br />

|phoenix:4.> go<br />

Updating a List<br />

The following example updates the Age and Skills columns of the staff.employees table where<br />

Name="Lisa". The following example updates a column of datatype LIST by updating the entire list.<br />

|phoenix:1.> update staff.employees<br />

|phoenix:2.> set Age=26, Skills=["UNIX", "HTML", "C"]<br />

|phoenix:3.> where Name="Lisa";<br />

|phoenix:4.> go<br />

It is also possible to update a single item within the list, referencing the item using an integer that indicates<br />

its position in the list (where 0 is the first item).<br />

The following example updates the Skills column, modifying any existing list where "C" is the third<br />

item and changing that item in the list to "C++".<br />

|phoenix:1.> update staff.employees<br />

|phoenix:2.> set Skills(2)=["C++"]<br />

|phoenix:3.> where Skills(2)="C";<br />

|phoenix:4.> go<br />

Updating an Object<br />

The following example updates part of an object, referencing the varbind to be updated using the -><br />

symbol.<br />

|phoenix:1.> update staff.contractors<br />

|phoenix:2.> set ExtraInfo->ContractLength=2<br />

503


Appendix B: The Object Query Language<br />

504<br />

|phoenix:3.> where ExtraInfo->ContractLength=1;<br />

|phoenix:4.> go<br />

ContractLength is updated to 2 in any records where the ContractLength within the<br />

ExtraInfo field was set to 1.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


B.9 Listing the Databases or Tables<br />

Examples<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Listing the Databases or Tables<br />

The show keyword lists the databases, columns, or tables of the current service, as shown in the following<br />

examples:<br />

show databases ;<br />

show tables from database_name ;<br />

show table database_name.table_name ;<br />

The following example shows all the databases of the current service.<br />

|phoenix:1.> show databases;<br />

|phoenix:2.> go<br />

.<br />

{<br />

databases = [ 'staff' ]<br />

}<br />

( 1 Record(s) : Transaction complete )<br />

The following example shows all the tables from the staff database.<br />

|phoenix:1.> show tables from staff;<br />

|phoenix:2.> go<br />

.<br />

{<br />

tables = [ 'managers', 'employees', 'contractors' ]<br />

}<br />

( 1 Record(s) : Transaction complete )<br />

The following example shows the full schema of the staff.managers table.<br />

|phoenix:1.> show table staff.managers;<br />

|phoenix:2.> go<br />

.....<br />

{<br />

schema = {<br />

EmployeeID = {<br />

DataType = 'text';<br />

NotNull = 'Y';<br />

PrimaryKey = 'Y';<br />

Indexed = 'N';<br />

Unique = 'Y';<br />

}<br />

Name = {<br />

Datatype = 'text';<br />

.....<br />

.....<br />

};<br />

505


Appendix B: The Object Query Language<br />

506<br />

}<br />

( 5 Record(s) : Transaction complete )<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


B.10 Deleting a Record from a Database Table<br />

!<br />

You can delete a record from a table using the delete command, as in the example below.<br />

delete from database_name.table_name<br />

[ where conditional_test ] ;<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Deleting a Record from a Database Table<br />

Warning: Although the where condition is optional, omitting it deletes all the records in the table.<br />

Basic Example of Deletion<br />

The following example deletes all records from the staff.contractors table where<br />

Name="James".<br />

|phoenix:1.> delete from staff.contractors<br />

|phoenix:2.> where Name="James";<br />

|phoenix:3.> go<br />

Deleting on Part of Object or List<br />

The following example removes records based on part of the contents of an object.<br />

|phoenix:1.> delete from staff.contractors // Delete records where<br />

|phoenix:2.> where ExtraInfo->Department="Marketing";// the Department in<br />

|phoenix:3.> go // ExtraInfo is Marketing.<br />

The following example removes records based on part of the contents of a list.<br />

|phoenix:1.> delete from staff.employees<br />

|phoenix:2.> where Skills(0)="Perl"; // Delete records where "Perl"<br />

|phoenix:3.> go // is the first list item.<br />

The following example removes records based on the entire contents of a list.<br />

|phoenix:1.> delete from staff.employees<br />

|phoenix:2.> where Skills=["HTML", "C++", "Java"];<br />

|phoenix:3.> go<br />

507


Appendix B: The Object Query Language<br />

B.11 Deleting a Database or Table<br />

508<br />

You can delete a database or table using the drop command, as in the examples below.<br />

drop table database_name.table_name ;<br />

drop database database_name ;<br />

Example of Deleting a Database and Table<br />

The following example deletes the entire staff.managers table.<br />

|phoenix:1.> drop table staff.managers;<br />

|phoenix:2.> go<br />

The following example deletes the entire staff database.<br />

|phoenix:1.> drop database staff;<br />

|phoenix:2.> go<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


B.12 The Eval Statement<br />

Scope<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

The Eval Statement<br />

The eval statement is a means of evaluating the value of a variable or a column within a record and<br />

converting it into another datatype (if necessary). Eval statements are used in combination with OQL in the<br />

stitchers to extract values from records in one database and insert those values into another database. This<br />

section introduces the eval statement and scope.<br />

The evaluation declaration evaluates a given variable or database record and extracts it to a specified<br />

datatype.<br />

eval ( datatype , string_or_database_column )<br />

Using the eval statement, you can evaluate specified fields within database records and assign those fields to<br />

variables or other database columns if necessary. Ampersands are used to indicate the scope from which the<br />

record is taken.<br />

Examples of the use of eval statement within the context of the OQL language are shown below.<br />

m_CompareDb = eval( text, '&m_Creator' )<br />

insert into kernel.activeModel values (eval( text, "$RECORD" ))<br />

delete from kernel.activeModel where (ObjectId=eval ( text, "&ObjectId" ))<br />

The concept of scope is used throughout the stitcher language as a means of referring to database records<br />

from within nested programming loops enclosed in curly braces { }. The example code extract below shows<br />

three nested scopes:<br />

{<br />

}<br />

Start of the first scope (SCOPE1)<br />

..............<br />

{<br />

Start of the second scope (SCOPE2)<br />

..............<br />

{<br />

Start of third scope (SCOPE3)<br />

..............<br />

..............<br />

End of third scope (SCOPE3)<br />

}<br />

..............<br />

End of the second scope (SCOPE2)<br />

}<br />

...........<br />

End of the first scope (SCOPE1)<br />

509


Appendix B: The Object Query Language<br />

510<br />

The database records that are known within any given scope are said to be local to that scope. The eval<br />

statement uses a system of ampersands to refer either to these local records or to those records that are outside<br />

the current scope. The only restriction on references to records outside of the present scope is that you<br />

cannot reference database records known to scopes that are nested within the present scope.<br />

In the example code above:<br />

An eval statement within scope3 that refers to the EntityName column in a local database<br />

record would refer to it as &EntityName.<br />

An eval statement within scope3 that refers to the EntityName column in a record held in<br />

scope2 would refer to it as &&EntityName.<br />

An eval statement within scope3 that refers to the EntityName column in a record held in<br />

scope1 would refer to it as &&&EntityName.<br />

It would not be possible to refer to any record held in scope3 from scope2, but scope3 could<br />

refer to any record held in scope1 or scope2 using the appropriate number of ampersands.<br />

The eval Statement Syntax<br />

The eval statement has the following format:<br />

eval ( datatype , variable or database column to be evaluated )<br />

In this statement:<br />

The first argument supplied to the eval statement is the datatype into which the second argument is<br />

converted. The datatype can be any of the OQL datatypes, such as text, int, list type text or object<br />

type vblist.<br />

The second argument is the expression that is to be evaluated, which can include:<br />

– Variable references, that are preceded by a dollar sign. The variables that can be referenced may<br />

be global variables such as system variables like $HOSTNAME, <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong>-defined<br />

variables such as $BaseEntity, and all the environment variables of the shell within which<br />

the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> executable is running, for example, NCHOME.<br />

– References to database columns known to the current scope or outside the current scope that are<br />

preceded by the appropriate number of ampersands. If the database column refers to an object,<br />

an entry within the object can be extracted using the target identifier -> (shown in use in OQL<br />

in Examples of the eval Statement in Use on page 511).<br />

– A manipulative statement that can be used to modify complex datatypes (such as lists or<br />

objects), concatenate two items together, delete item(s) from a list, and so on.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

The Eval Statement<br />

– A special expression using the THIS keyword to move in and out of the data containment<br />

model.<br />

– Combinations of multiple evaluation expressions.<br />

Quotation Marks within eval Statements<br />

The variable or database column to be evaluated must be enclosed by matching quotation marks. If the eval<br />

statement is embedded within a set of quotes (in either <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> language), the quotes enclosing<br />

the variable or database column must be of the alternate type to the quotes in which the eval statement is<br />

embedded. By default, when the eval statement does not occur within an embedded fragment, double<br />

quotes are used to enclose the variable or database column to be evaluated.<br />

Single Straight Back Quotes (``)<br />

Single straight back quotes are used within eval statements to enclose values that are not to be evaluated.<br />

For example, this type of quote is used with the CAT keyword to enclose text strings that are to be<br />

concatenated but not evaluated. In the following example, the strings [ [ and ] ] are included in the<br />

concatenated output but not evaluated.<br />

eval( text, 'CAT( &m_Name,‘[ [ ‘,&m_LocalNbr->m_IfIndex,‘ ] ]‘ )' )<br />

The CAT keyword is described in Concatenating Lists on page 514.<br />

Examples of the eval Statement in Use<br />

The following example evaluates the contents of the m_Creator database column (held 1 level of scope<br />

away from the current scope) and inserts the value into myVariable, a previously declared variable of<br />

type text.<br />

myVariable = eval( text , '&m_Creator' )<br />

The following example declares an integer variable called portNum and assigns to it the value extracted<br />

from m_LocalNbrPort held within an object called m_LocalNbr that is known two levels away from<br />

the present scope. m_LocalNbrPort is extracted from the object using the target identifier.<br />

int portNum = eval( int, "&&m_LocalNbr->m_LocalNbrPort" )<br />

The following example shows the eval statement in use in the stitcher language within two foreach loops.<br />

foreach( connected )<br />

{<br />

foreach( uniqueConnector )<br />

{<br />

ExecuteOQL<br />

(<br />

"update tempFull.connected<br />

511


Appendix B: The Object Query Language<br />

512<br />

}<br />

}<br />

);<br />

set m_RelatedTo = eval(text, '&m_NbrName')<br />

where m_Name = eval(text, '&&m_RelatedTo')<br />

);"<br />

Each of the foreach loops in the above example specifies a variable of type RecordList that has<br />

already been assigned the results of an OQL query. The first loop repeats everything within its curly braces<br />

for each record in the RecordList variable connected. Nested within the foreach( connected<br />

){ } loop is a second loop, that repeats everything within its curly braces for each record in the<br />

RecordList variable uniqueConnector.<br />

The ExecuteOQL statement that is nested inside both loops updates the tempFull.connected<br />

database using an eval statement to extract columns from the records held in the two variables:<br />

The statement eval(text,'&m_NbrName') refers to the m_NbrName column contained<br />

within the local scope, that is, held in the uniqueConnector variable.<br />

The statement eval(text,'&&m_RelatedTo') refers to the m_RelatedTo column<br />

contained one level away from the local scope, that is, held in the connected variable.<br />

Extraction of Record Values and Fields in OQL<br />

There are two special functions that are used within eval statements in OQL that simplify the process of<br />

extracting record field names and record values:<br />

RECORD_NAMES() extracts all field names of the current database record being considered.<br />

RECORD_VALUES() extracts the values of all fields within the current database record being<br />

considered.<br />

An example of these functions from the StoreSchema.cfg configuration file is shown below. In this<br />

example an eval statement is used to extract all the column names and values from a record instead of having<br />

to extract each column name and value using an individual eval statement.<br />

insert into system.stateRules<br />

( Name, Filter, Execute, IsActive, )<br />

values<br />

(<br />

'modelCreate','',<br />

'insert into kernel.activeModel<br />

( eval( text, "RECORD_NAMES()" ) )<br />

values<br />

( eval( text, "RECORD_VALUES()" ) );',<br />

1<br />

);<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

The Eval Statement<br />

In addition to being shorter, this method of extracting values has the advantage that you do not need to<br />

know anything about the column names, datatypes or even how many columns there are.<br />

Advanced Use of the eval Statement<br />

This section describes the advanced use of the eval statement.<br />

Character Escape Sequences<br />

You must escape characters that would otherwise have special meaning in an eval statement using a<br />

double-backslash \\. The comma, dollar, ampersand and open and close brackets can be escaped as shown<br />

below.<br />

\\, -- Escapes the comma.<br />

\\$ -- Escapes the dollar.<br />

\\& -- Escapes the ampersand.<br />

\\( -- Escapes the open bracket.<br />

\\) -- Escapes the close bracket.<br />

Eval Statement Keywords<br />

It is possible to perform complex operations within eval statements using a series of keywords, shown in<br />

Table B10.<br />

Table B10: Table of Valid eval Statement Keywords<br />

Keyword Synopsis of Keyword Function<br />

APPEND Appends data to a list or object.<br />

APPENDUNIQUE Appends data to a list or object only if it does not already exist within the list.<br />

CAT Concatenates a series of items together.<br />

DELETE Deletes an item from a list.<br />

LENGTH Indicates the length of a list or the number of items it holds.<br />

LOOKUP Allows the use of lookup tables and enables the use of a default human-readable return value in<br />

the event of a lookup failure.<br />

THIS Retrieves information pertaining to the containers within the containment model.<br />

513


Appendix B: The Object Query Language<br />

514<br />

Concatenating Lists<br />

The CAT keyword concatenates data within an eval statement.<br />

CAT( comma separated list of items to be concatenated )<br />

The items to be concatenated together can be any of the following:<br />

A reference to a database record (preceded by the appropriate number of ampersands).<br />

A reference to a system or <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> variable.<br />

A text string enclosed within single straight back quotes, for example, ‘item‘.<br />

eval( text, 'CAT(‘UNCONNECTED_NODES / ‘,&m_Subnet,‘ / ‘,&m_SubnetMask)' )<br />

If m_Subnet='172.16.2.0' and m_SubnetMask='255.255.255.0', the above example<br />

would evaluate to the following text string:<br />

UNCONNECTED_NODES / 172.16.2.0 / 255.255.255.0<br />

In the following example, the target identifier extracts the value of a varbind within an object.<br />

eval( text, 'CAT( &m_Name,‘[ ‘,&m_LocalNbr->m_IfIndex,‘ ]‘ )' )<br />

If the values m_Name="172.16.1.239" and m_IfIndex=63 entered into the example above, this<br />

example would evaluate to the following string:<br />

172.16.1.239[ 63 ]<br />

Deleting Data from a List<br />

The DELETE statement removes the items in the second list from the first list.<br />

DELETE( List or reference to a column of type list ,<br />

List or reference to a column of type list )<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

The Eval Statement<br />

In the following example, the output would be the result of removing all items in the EventId list from<br />

the CorrelatedId list.<br />

eval( list type text, 'DELETE( &CorrelatedId , &EventId )'<br />

Finding the Number of Items in a List<br />

The LENGTH keyword returns the number of items in the specified list. The following example would<br />

return the number of items in the list CorrelatedId.<br />

eval( int, 'LENGTH( &CorrelatedId )'<br />

Evaluating the Containment Model<br />

The THIS keyword can be used to move recursively through the containment model.<br />

THIS( Number of levels to traverse up the containment model ,<br />

Number of levels to traverse down the containment model ,<br />

FLAG ) -> Part of object to retrieve<br />

The number of levels to traverse up or down the model can either be specified as an integer or as the variable<br />

$PHYSICAL, which indicates that the recursion terminates at the top of the containment model.<br />

FLAG denotes whether all the levels encountered during the recursion through the different containment<br />

model levels are to be accumulated into a list, or if only the final destination is to be considered. The possible<br />

values of FLAG are:<br />

$INCLUDERECURSED. All entities encountered in the containment model during the recursion of<br />

the levels are included and accumulated together as a list.<br />

$EXCLUDERECURSED. All entities encountered during the recursion through the containment<br />

model are excluded. Only the final entity at the end of the recursion is considered.<br />

An example of THIS in use is shown below. This example evaluates EntityName by traversing 1 level<br />

down the model and accumulating all encountered entities into a list.<br />

eval( list type text, 'THIS(0, 1, $INCLUDERECURSED) ->EntityName' )<br />

Omitting the number of levels and the flag extracts a value from the current entity, as shown below.<br />

eval( text, 'THIS->EntityName' )<br />

Performing a Lookup<br />

The LOOKUP keyword allows the use of lookup tables and enables the use of a default human-readable<br />

return value in the event of a lookup failure. This section shows an example of a lookup operation on the<br />

ifAdminStatus MIB variable.<br />

515


Appendix B: The Object Query Language<br />

516<br />

The following is an example of a lookup record which maps ifAdminStatus strings to their enumerated<br />

values:<br />

{<br />

}<br />

ifAdminStatus =<br />

{<br />

up = 1,<br />

down = 2,<br />

testing = 3<br />

}<br />

The following eval clause performs a lookup of the enumerated value of the string up within this record<br />

and returns a value of 1. The default return value in the event of a lookup failure is NULL.<br />

eval( text, 'LOOKUP( ’up’,&ifAdminStatus )'<br />

In this clause, no default human-readable return value in the event of a lookup failure has been provided.<br />

This is therefore equivalent to the eval clause shown below:<br />

eval( text, ( ’&ifAdminStatus->up’ )<br />

The following eval clause performs a lookup of the enumerated value of the string dummy within this<br />

record and provides the option of a default human-readable return value. The string dummy does not exist<br />

in the record and therefore this clause returns the defined human-readable return value of unknown.<br />

eval( text, 'LOOKUP( ’dummy’,&ifAdminStatus, ’unknown’)'<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


C. Stitchers_and_language.fm July 5, 2005<br />

Appendix C: Stitchers and Stitcher Language<br />

This chapter describes the function of the default discovery stitchers, the structure of a text-based stitcher,<br />

and describes the syntax of the stitcher language that is used to create and customize text-defined stitchers.<br />

This chapter contains the following sections:<br />

Introduction to <strong>Discovery</strong> Stitchers on page 518<br />

List of Default <strong>Discovery</strong> Stitchers on page 521<br />

Stitcher Language on page 535<br />

Stitcher Text File Structure on page 540<br />

Stitcher Rules on page 544<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 517


Appendix C: Stitchers and Stitcher Language<br />

C.1 Introduction to <strong>Discovery</strong> Stitchers<br />

518<br />

Stitchers are versatile and configurable processes used extensively during the discovery and monitoring<br />

processes that facilitate data transfer by taking information from one database, processing it, and placing it<br />

in its new form in another database or sending it to another process. The stitchers can also be modified for<br />

particular occurrences, for example, strange configurations, or devices being added or removed.<br />

There are two types of stitcher:<br />

<strong>Discovery</strong> Stitchers<br />

<strong>Discovery</strong> stitchers, which are used during the network discovery process.<br />

Monitoring stitchers, which are used during network monitoring.<br />

<strong>Discovery</strong> stitchers have two general areas of responsibility but are syntactically the same:<br />

Data collection stitchers pass records from finders to discovery agents, from discovery agents to other<br />

discovery agents, and from discovery agents to finders, thus feeding the discovery process.<br />

Data processing stitchers are activated in the final phase of the discovery. They build the various layers<br />

of the topology that are then merged to produce the scratch topology that is sent to MODEL.<br />

Monitoring Stitchers<br />

Monitoring stitchers are used during network monitoring. More information about these stitchers can be<br />

found in the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Monitoring and RCA <strong>Guide</strong>.<br />

Stitcher Formats<br />

Stitchers can either be text-based or precompiled.<br />

Text-based Stitchers<br />

Text-based stitchers are defined in a plain text file using the stitcher language. The text file defines the<br />

processing that the stitcher performs and the reasons why the stitcher is triggered.<br />

A text-based stitcher can also invoke any other stitcher regardless of whether it is precompiled or text-based.<br />

Precompiled Stitchers<br />

Precompiled stitchers are written by Micromuse in C++ and shipped with the <strong>Precision</strong> Server. The<br />

precompiled stitchers are designed for computationally intensive operations that they can handle more<br />

efficiently than the text-based stitchers.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Introduction to <strong>Discovery</strong> Stitchers<br />

The precompiled stitchers are controlled by a text-based stitcher, which contains the stitcher trigger<br />

conditions. When the text-based stitcher is executed, it calls and executes the precompiled stitcher.<br />

Structure of the Stitchers<br />

Each stitcher definition file consists of two main sections:<br />

The stitcher triggers specify the actions or conditions that cause the stitcher to run.<br />

The stitcher rules define the processing that the stitcher conducts.<br />

Stitcher Triggers<br />

Stitchers can be triggered by any of the following conditions:<br />

The completion of other processes (for example, finders, agents, and other stitchers).<br />

The insertion of data into a specified database table.<br />

The end of a specified discovery cycle phase.<br />

Stitchers can also act:<br />

According to a preconfigured time frequency.<br />

When asked to do so, that is, on-demand.<br />

You can retrieve stitcher trigger information for the discovery stitchers by performing an OQL query on the<br />

stitchers.triggers table that resides within DISCO. This table is created and updated by a<br />

periodic scan that DISCO performs on the stitcher files in the<br />

NCHOME/precision/disco/stitchers directory.<br />

Note: NCHOME is the environment variable that contains the path to the <strong>Netcool</strong> Suite home directory. For<br />

information on how this environment variable varies with platform, see Operating System Considerations on<br />

page 10.<br />

Stitchers are also used during the network monitoring process. The monitoring stitchers are stored in the<br />

NCHOME/precision/monitor/stitchers directory, and activated on-demand when required by<br />

one of the Polling agents. For more details on network monitoring, and the use of stitchers, see the<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Monitoring and RCA <strong>Guide</strong>.<br />

You can run a specific stitcher by entering the stitcher name in the only field of the<br />

stitchers.actions table, whereupon DISCO will attempt to execute the specified stitcher. For<br />

example, if you update the stitchers.actions table value with ’Restitcher’, then DISCO will<br />

attempt to restitch the topology. You can use this functionality to propogate any modifications throughout<br />

the topology.<br />

519


Appendix C: Stitchers and Stitcher Language<br />

520<br />

Stitcher Rules<br />

Stitcher rules define the actual processing that the stitcher is to conduct. The rules are written in the stitcher<br />

language, which is described later in this chapter. Special stitcher language commands allow OQL<br />

statements to be made by the stitchers, so a stitcher can retrieve information from a database and manipulate<br />

it. The end result is the distribution of processed information into the appropriate final destination table.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


C.2 List of Default <strong>Discovery</strong> Stitchers<br />

Stitchers supplied with <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> are stored in the following directories:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

List of Default <strong>Discovery</strong> Stitchers<br />

NCHOME/precision/disco/stitchers holds the text-based discovery stitchers (text files<br />

with a .stch extension).<br />

NCHOME/precision/lib contains the libraries for the precompiled discovery stitchers.<br />

NCHOME/precision/monitor/stitchers holds the text-based monitoring stitchers (text<br />

files with a .stch extension).<br />

NCHOME/precision/monitor/lib contains the libraries for the precompiled monitoring<br />

stitchers.<br />

Table C1 shows a list and description of all the discovery stitchers currently included with the <strong>Precision</strong><br />

Server, although you should note that this list is subject to change.<br />

Table C1: List of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>Discovery</strong> Stitchers (1 of 14)<br />

Stitcher Function<br />

AddBaseNATTags Updates all the private NAT addresses that have a private address with their<br />

public address and adds a tag denoting the private address.<br />

AddBasicContainment Part of the mechanism for containment stitching. This stitcher inserts<br />

containment information into the simple chassis.<br />

AddCardContainment Adds card objects to the workingEntities.containment table.<br />

AddEntityContainment Adds general entity information to the workingEntities.containment<br />

table.<br />

AddGlobalVlans Builds global Virtual Local Area Network (VLAN) objects using the<br />

translations.vlans table.<br />

AddIfStackContainment Adds if stack objects to the workingEntities.containment table.<br />

AddLogicalToIpToBaseName Adds logical information to the translations.ipToBaseName table.<br />

AddLoopbackTag Adds a tag to the ExtraInfo column of the topology database indicating<br />

that an interface is a globally addressable loopback interface.<br />

521


Appendix C: Stitchers and Stitcher Language<br />

522<br />

Table C1: List of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>Discovery</strong> Stitchers (2 of 14)<br />

Stitcher Function<br />

AddNoConnectionsToLayer The final topology layer is constructed by merging the topology information<br />

from the various layers. If there is a mismatch in connectivity information<br />

provided by the different layers, information from the more detailed layer takes<br />

precedence.<br />

For example, the Network Layer (layer 3) provides information indicating that a<br />

router interface is connected to another router interface. However, information<br />

from the more detailed Data Link Layer (layer 2) shows that there is actually a<br />

switch between the two router interfaces.<br />

The AddNoConnectionsToLayer is used in cases where it is necessary to<br />

remove a connection at one layer but keep the connection at a different layer.<br />

AddSwitchRoutingLinks Adds switch routing data (that assists AMOS when performing Root Cause<br />

Analysis) to the topology database.<br />

AddTechnologyType.stch Optional stitcher called by the PostScratchProcessing.stch stitcher. This stitcher<br />

is commented out by default. If enabled, this stitcher creates a technology type<br />

variable for each interface object. This variable can then be used to create<br />

technology based network views in Topoviz. See the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

Topology Visualization <strong>Guide</strong> for more information on network views.<br />

The stitcher creates the technology type variable by adding an<br />

m_Technology field to the ExtraInfo field within the<br />

scratchTopology.entityByName table for each interface object. The<br />

m_Technology field is a string, such as Ethernet, ATM, and so on. The<br />

stitcher contains a large collection of default technology types; more can be<br />

added by directly altering the stitcher.<br />

There is a small processing load associated with activating this stitcher, and this<br />

will slow down your discovery slightly.<br />

AddUnconnectedContainment Takes all the discovered entities that are unconnected, that is, that do not have<br />

a parent (except for their main node or interface) and gives them a default<br />

containment.<br />

AddVlanContainers Uses information in the workingEntities.finalEntity and<br />

translations.vlans tables to add VLAN objects to the<br />

workingEntities.containment table.<br />

AgentRetProcessing Processes data from thereturns table of each table.<br />

AgentRetToInstrumentationCiscoFrame<br />

Relay<br />

Populates the instrumentation.ciscoFrameRelay table with<br />

information from the returns table of the appropriate agent.<br />

AgentRetToInstrumentationFddi Populates the instrumentation.fddi table with information from the<br />

returns table of the appropriate agent.<br />

AgentRetToInstrumentationFrameRelay Populates the instrumentation.frameRelay table with information<br />

from the returns table of the appropriate agent.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table C1: List of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>Discovery</strong> Stitchers (3 of 14)<br />

Stitcher Function<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

List of Default <strong>Discovery</strong> Stitchers<br />

AgentRetToInstrumentationHSRP Populates the instrumentation.hsrp table with information from the<br />

returns table of the appropriate agent.<br />

AgentRetToInstrumentationIp Populates the instrumentation.ip table with information from the<br />

returns table of the appropriate agent.<br />

AgentRetToInstrumentationName Populates the instrumentation.name table with information from the<br />

returns table of the appropriate agent.<br />

AgentRetToInstrumentationPnniPgi Populates the instrumentation.pnniPeerGroup table with<br />

information from the returns table of the appropriate agent.<br />

AgentRetToInstrumentationSubnet Populates the instrumentation.subNet table with information from the<br />

returns table of the appropriate agent.<br />

AgentRetToInstrumentationVlan Populates the instrumentation.vlan table with information from the<br />

returns table of the appropriate agent.<br />

ASMAgentRetProcessing Based on MIB variable data retrieved by the ASM stitcher, this stitcher<br />

generates a list of <strong>Netcool</strong>/ASM sub agents running on a given device. Each<br />

<strong>Netcool</strong>/ASM sub-agent running on a device corresponds to a commercial<br />

server or database product running on that device. The list of <strong>Netcool</strong>/ASMs is<br />

used as input to the MySQL database in Topoviz and enables autopartitioning<br />

of devices within a network based on the commercial server or database<br />

products running on those devices.<br />

ASRetProcessing Used in MPLS discoveries where devices in different customer VPNs have<br />

identical <strong>IP</strong> addresses. This stitcher performs the processing necessary to<br />

differentiate between these devices and correctly resolve device connectivity.<br />

This stitcher is called by the AsAgent agent and works in conjunction with the<br />

ASMap.txt file in NCHOME/precision/etc. For more information on the<br />

AsAgent agent, see Deduplicating Identical <strong>IP</strong> Addresses in Different VPNs on<br />

page 255.<br />

AssocAddressRetProcessing Processes data in the AssocAddress.returns table, sending the device<br />

details to the appropriate discovery agent if the device has not already been<br />

discovered.<br />

BGPLayer Builds the BGP layer created by BGP agent. In common with other layer<br />

stitchers, this stitcher receives input from relevant agents. This input consists of<br />

entity records containing local and remote neighbor data fields. The stitcher<br />

uses these records to work out the local and remote connections for each<br />

entity.<br />

523


Appendix C: Stitchers and Stitcher Language<br />

524<br />

Table C1: List of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>Discovery</strong> Stitchers (4 of 14)<br />

Stitcher Function<br />

BuildContainment Calls the following stitchers to add different types of objects to the<br />

workingEntities.finalEntity table:<br />

AddBasicContainment stitcher, which adds device containment<br />

information.<br />

AddCardContainment stitcher, which adds card containment<br />

information.<br />

AddIfStackContainment stitcher, which adds interface stack<br />

containment information.<br />

AddEntityContainment stitcher, which adds general containment<br />

information.<br />

NATAddressSpaceContainment stitcher, which adds containment<br />

information associated with NAT address spaces.<br />

AddVlanContainers stitcher, which adds VLAN containment<br />

information.<br />

You can comment out lines in this stitcher as appropriate in order to exclude<br />

types of objects that are not needed.<br />

BuildFinalEntity Builds the records for a single chassis. This stitcher is called by the<br />

BuildFinalEntityTable stitcher.<br />

BuildFinalEntityTable Uses the entries in the translations.ipToBaseName table to populate<br />

the workingEntities.finalEntity table.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table C1: List of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>Discovery</strong> Stitchers (5 of 14)<br />

Stitcher Function<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

List of Default <strong>Discovery</strong> Stitchers<br />

BuildInterfaceName Used to control the naming of interfaces. By default, this stitcher is called by<br />

the BuildFinalEntity stitcher.<br />

The default naming strategy for any device interface is as follows:<br />

baseName[[]]<br />

Alternatively <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> uses the following default naming<br />

convention if the card and port are not valid:<br />

baseName[0[]]<br />

You can use the BuildInterfaceName stitcher to change the naming<br />

convention for an interface in one of the following ways:<br />

Specify that you wish to use ifName or ifDescr to name the interfaces<br />

rather than their ifIndex, card or port information. For example, using<br />

this option interfaces would have names similar to the following:<br />

baseName[eth0/0]<br />

In this example eth0 is the ifName of an interface.<br />

In order to do this, change the value of m_UseIfName in the<br />

disco.config table, as described in The config Table on page 431.<br />

Modify the BuildInterfaceName stitcher directly to specify any<br />

desired interface naming convention.<br />

BuildLayers Activated in the final phase to implement the stitchers that build the layer<br />

databases.<br />

BuildMPLSContainers This stitcher calls the BuildVPNContainers and BuildVRAndVRFContainers<br />

stitchers. It builds VPN, VR and VRF containers.<br />

BuildNATTranslation Builds a global translation table for all NAT devices.<br />

BuildVPNContainers Creates objects to represent the MPLS VPNs within the system.<br />

BuildVRAndVRFContainers Creates virtual router (VR) and virtual routing and forwarding table (VRF)<br />

objects within the system. These objects are useful for displaying MPLS<br />

information.<br />

CabletronLayer Determines connectivity information based on Cabletron data returned by the<br />

discovery agents.<br />

CDPLayer Determines connectivity information based on the data returned by the CDP<br />

agent.<br />

CheckAndSendNATGatewaysToArpCac<br />

he<br />

Sends the NAT gateways to the ArpCache agent.<br />

CheckForMasterLink Looks for connections lower down the interface stack, that take precedence<br />

over connections higher up.<br />

CheckIndirectResponse Handles indirect ICMP responses due to NAT.<br />

525


Appendix C: Stitchers and Stitcher Language<br />

526<br />

Table C1: List of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>Discovery</strong> Stitchers (6 of 14)<br />

Stitcher Function<br />

CheckInterfaceStatus Checks the ifOperStatus data and updates the interfaces status where the<br />

ifOperStatus is not 1.<br />

CMTSLayer Uses the data downloaded by the CMTS agent to build the connection<br />

information between cable modem termination systems and the attached<br />

cable modem devices.<br />

ContextAgentRetProcessing Merges the outputs of all the Context agents for each entity. It then inserts the<br />

results of this merge into the AssocAddress.despatch table, using the<br />

DetailsOrContextRetProcToAgent stitcher. For more information on the<br />

context-sensitive discovery data flow, see Discovering Device Details<br />

(Context-Sensitive) on page 28.<br />

CreateAndSendTopology Activates the stitchers that create the topology and send the final Scratch<br />

Topology to MODEL.<br />

CreateImpactTopology An optional stitcher that can be used to make a copy of the Scratch Topology<br />

before it is sent to MODEL. See The entityByName Table on page 472 for more<br />

details.<br />

CreateNetworkManagementCards This stitcher creates NetworkManagementCard objects, if desired.<br />

CreateScratchTopology Creates the scratch topology.<br />

CreateTrunkConnections Modifies the containment model to take account of VLAN trunks.<br />

CreateVlanEntity This stitcher creates a single VLAN entity object by adding VLAN data to the<br />

Scratch Topology.<br />

DetailsOrContextRetProcToAgent This stitcher is equivalent to DetailsRetProcessing but handles<br />

context-sensitive discovery. It processes entities from the<br />

details.returns table, and sends the details to the despatch table of the<br />

relevant Context agent. For more information on the context-sensitive<br />

discovery data flow, see Discovering Device Details (Context-Sensitive) on<br />

page 28.<br />

DetailsRetProcessing Processes entities from the details.returns table, and sends the details<br />

to the AssocAddress.despatch table.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table C1: List of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>Discovery</strong> Stitchers (7 of 14)<br />

Stitcher Function<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

List of Default <strong>Discovery</strong> Stitchers<br />

DetectionFilter Determines whether a given device passes the detection filter and is to be<br />

discovered based on the detectionFilter defined in the scope<br />

database.<br />

By default, the discovery filters do not filter out the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host<br />

machine. This is because this machine usually also serves as the polling station<br />

for root cause analysis. In order for root cause analysis to work correctly, the<br />

polling station, and hence the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine, must be part<br />

of the topology. For more information on root cause analysis, see the<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Monitoring and RCA <strong>Guide</strong>.<br />

If you need to filter out the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine using the<br />

detectionFilter, then you need to modify the DetectionFilter stitcher<br />

and remove the sections of code indicated by comments that prevent the<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine from being filtered.<br />

DetermineOSPFDomains Tags devices and interfaces with OSPF domain information. This stitcher is<br />

called by the OSPFLayer stitcher.<br />

DiscoShutdown Activated when DISCO is shut down. Calls the Refresh<strong>Discovery</strong>Tables stitcher.<br />

ExampleContainment1 An example stitcher that could be modified to configure the containment<br />

model.<br />

ExampleContainment2 An example stitcher that could be modified to configure the containment<br />

model.<br />

FddiLayer Deduces the Fddi layer topology.<br />

Feedback Sends device details back to the Ping finder to re-seed the discovery.<br />

FinalPhase Activated in the final phase to implement the final stitchers.<br />

FindAddressSpace Identifies the address space of an <strong>IP</strong> address.<br />

FindGatewayInterfaces Identifies the gateway interface on NAT translation devices.<br />

FindPhysIpForVirtIp Used in resolution of HSRP issues. Finds the physical <strong>IP</strong> address corresponding<br />

to a virtual HSRP address.<br />

FnderProcToDetailsDesp Sends entities from the finders.processing table to the<br />

Details.despatch table.<br />

FnderRediscoveryToPingFinder Sends data from the finders.rediscovery table to the Ping finder.<br />

FnderRetProcessing Processes entities in the finders.despatch table, and sends the details to<br />

the Details agent.<br />

Full<strong>Discovery</strong> Determines whether a full discovery is to be run.<br />

HubFdbToConnections A precompiled stitcher that processes all of the connections for the Ethernet<br />

hubs. It also requires the connectivity information from the Ethernet switch<br />

discovery.<br />

527


Appendix C: Stitchers and Stitcher Language<br />

528<br />

Table C1: List of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>Discovery</strong> Stitchers (8 of 14)<br />

Stitcher Function<br />

IlmiLayer Creates the ILMI (Interim Local Management Interface) topology connections<br />

based upon ATM ILMI information.<br />

InitiateNATGateway<strong>Discovery</strong> Seeds the Ping finder with the NAT gateway addresses.<br />

InstantiationFilter Determines whether a given entity is to be instantiated (that is, sent to<br />

MODEL), based on the instantiateFilter defined in the scope<br />

database.<br />

By default, the discovery filters do not filter out the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host<br />

machine. This is because this machine usually also serves as the polling station<br />

for root cause analysis. In order for root cause analysis to work correctly, the<br />

polling station, and hence the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine, must be part<br />

of the topology. For more information on root cause analysis, see the<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Monitoring and RCA <strong>Guide</strong>.<br />

If you need to filter out the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine using the<br />

instantiateFilter , then you need to modify the InstantiationFilter<br />

stitcher and remove the sections of code indicated by comments that prevent<br />

the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> host machine from being filtered.<br />

<strong>IP</strong>Layer Creates the <strong>IP</strong> layer topology connections.<br />

IpToBaseName Populates the translations.ipToBaseName table with information from<br />

the AssocAddress agent.<br />

IsForcedRediscovery This stitcher is used to determine if a finder insert is part of a forced<br />

rediscovery. Forced rediscovery contrasts with reactive rediscovery, the mode<br />

that DISCO adopts after completion of a discovery. In this mode a device is<br />

usually only rediscovered if it is new or if the finder insert references a trap,<br />

thus suggesting that the entity has been modified.<br />

Forced rediscoveries are launched using the Network <strong>Discovery</strong> GUI, as<br />

described in Running Discoveries and Rediscoveries on page 139.<br />

For more information on rediscovery mode, see Conducting a Full or Partial<br />

Rediscovery on page 40.<br />

IsInScope Used by other stitchers to check that an entity is within the scope of the<br />

discovery (that is, within the scope defined in the scope.zones table).<br />

MergeLayers Merges the layer topologies.<br />

Modify<strong>IP</strong>Containment Modifies the containment of <strong>IP</strong> interfaces on non <strong>IP</strong> forwarding devices so that<br />

they are not upwardly connected. This is required to trace root cause.<br />

MPLSAddPathnames Updates the MPLS interface records with information on path membership.<br />

MPLSAddVPNNames Determines what paths belong to which VPNs, and updates the MPLS interface<br />

records with the information on the VPN/Path membership.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table C1: List of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>Discovery</strong> Stitchers (9 of 14)<br />

Stitcher Function<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

List of Default <strong>Discovery</strong> Stitchers<br />

MPLSCE Tries to resolve CE to PE connectivity for VRF interfaces on a PE where the<br />

connecting CE has not been identified. It uses layer 3 information to try to find<br />

the correct connectivity.<br />

MPLSFindConnectionInStack Adds connections to MPLS interfaces where they were not previously found,<br />

but have been found at other layers of the interface stack.<br />

MPLSFindInterfaceInStack Finds an interface at a different layer of the interface stack to an MPLS interface.<br />

MPLSInterfaceStackTrace Iterates up or down the interface stack to try to find a connection at a layer<br />

other than the MPLS layer.<br />

MPLSPath<strong>Discovery</strong> Identifies labels switched paths (LSPs) between provider edge (PE) routers<br />

across an MPLS core. Starts path traces from the PE devices. The entry point<br />

stitcher sets up the path trace database, and begins a path trace for each<br />

possible path, calling other stitchers to update the records with path and VPN<br />

information.<br />

MPLSProcessing Determines which kind of MPLS discovery to perform based on the value of the<br />

field m_RTBasedVPNs in the disco.config table.<br />

If m_RTBasedVPNs equals 1, then route target-based MPLS post-layer<br />

processing is performed. The MPLSProcessing stitcher calls the<br />

RTBasedVPN<strong>Discovery</strong> stitcher to perform this processing. The MPLS<br />

discovery results in the ability to display an edge view only.<br />

If m_RTBasedVPNs equals 0, then label switched path (LSP)-based<br />

post-layer processing is performed. The MPLSProcessing stitcher calls<br />

the MPLSPath<strong>Discovery</strong> stitcher to perform this processing. The MPLS<br />

discovery results in the ability to display an edge view and a core view.<br />

For more information on edge views and core views of an MPLS core network,<br />

see About MPLS <strong>Discovery</strong> on page 326.<br />

NameResolution Finds entities where the name has not been resolved and attempts to resolve<br />

the entity name based on the resolved names of the other interfaces of the<br />

device.<br />

NamingFromLoopbackDetails Provided there is a LoopBack agent running, this stitcher updates the names in<br />

the translations.ipToBaseName table.<br />

NATAddressSpaceContainers Optional stitcher that builds NAT container objects holding devices within a<br />

particular address space and creates inserts into the<br />

workingEntities.finalEntity table for these NAT container objects.<br />

Also builds relevant entries into the workingEntities.containment<br />

table.<br />

NATAgentRetProcessing Processes the output from the NAT gateway agents.<br />

NATFnderRetProcessing Performs processing of NAT devices.<br />

529


Appendix C: Stitchers and Stitcher Language<br />

530<br />

Table C1: List of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>Discovery</strong> Stitchers (10 of 14)<br />

Stitcher Function<br />

NATGatewayRetProcessing Used in discoveries involving NAT gateways where one or more of the<br />

management interfaces of the NAT gateway device is in private address space.<br />

This stitcher performs the processing necessary to determine whether each<br />

management interface is in public or private address space. This stitcher is<br />

called by the NATGatewayAgent agent and works in conjunction with the<br />

NATGateways.txt file in NCHOME/precision/etc. For more<br />

information on the NATGatewayAgent agent, see Configuring NAT Gateway<br />

Management Interfaces on page 257.<br />

NATTimer Triggers rediscovery of NAT gateways.<br />

OSPFLayer Creates a topology of the OSPF routing within the network. This OSPF routing<br />

information is used by the DetermineOSPFDomains stitcher in order to tag<br />

devices and interfaces with OSPF domain information.<br />

PeerBasedPW<strong>Discovery</strong> Used in discovery of enhanced Layer 2 VPNs on an MPLS core network. This<br />

stitcher identifies MPLS psuedowire connections retrieved by the Cisco MPLS<br />

agents and adds information on these connections to the relevant network<br />

entities for viewing in Topoviz. The information is stored as a psuedowire VPN<br />

and provides information on the two provider edge (PE) router ends of the<br />

psuedowire. For more information on enhanced Layer 2 VPN discovery, see<br />

Chapter 11: Configuring an MPLS <strong>Discovery</strong> on page 325.<br />

PingFinderScopeRefresh Tells the Ping Finder to refresh its scope. This stitcher is activated by the<br />

Network <strong>Discovery</strong> GUI when you refresh the scope and thereby ensure that<br />

the Ping finder has an up-to-date scope.<br />

PnniLayer Creates the PNNI topology connections provided the connections at both ends<br />

have been discovered.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table C1: List of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>Discovery</strong> Stitchers (11 of 14)<br />

Stitcher Function<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

List of Default <strong>Discovery</strong> Stitchers<br />

PostLayerProcessing A holder for all the functionality that is required following the creation of the<br />

layers. Calls the following stitchers:<br />

AddGlobalVlans<br />

AddSwitchRoutingLinks<br />

AddUnconnectedContainment<br />

BuildMPLSContainers<br />

BuildVRAndVRFContainers<br />

BuildVPNContainers<br />

CreateTrunkConnections<br />

CreateVlanEntity<br />

MPLSAddVPNNames<br />

MPLSPath<strong>Discovery</strong><br />

MPLSInterfaceStackTrace<br />

MPLSFindConnectionInStack<br />

MPLSFindInterfaceInStack<br />

MPLSAddPathNames<br />

PVCPathMemberships<br />

PVCTracePath<br />

PVCProcessingRecord<br />

PVCTraceAway<br />

PVCTraceCrossConnected<br />

PVCNamePath<br />

PVCProcessedRecord<br />

ProcessSwitchModules<br />

PostScratchProcessing A holder for functionality to occur following the creation of the scratch<br />

topology. Calls the following stitchers:<br />

CreateNetworkManagementCards<br />

InstantiationFilter: This stitcher is run as many times as necessary in order<br />

to check whether a given entity needs to be sent to MODEL.<br />

SendTopologyToModel<br />

AddTechnologyType<br />

PresetLayer Can be used to "preset" undiscoverable connections, if required. This stitcher is<br />

not used by default.<br />

This stitcher contains advanced configuration settings. Any changes should be<br />

made by Micromuse certified personnel only.<br />

531


Appendix C: Stitchers and Stitcher Language<br />

532<br />

Table C1: List of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>Discovery</strong> Stitchers (12 of 14)<br />

Stitcher Function<br />

ProcessSwitchModules Identifies which switch modules have their own <strong>IP</strong> addresses.<br />

ProcRemoteConns Takes a record containing a remote neighbor and processes remote<br />

connections if the agent that discovered it supports indirect connections.<br />

ProfilingEndFinal<br />

ProfilingPhase1<br />

ProfilingPhase2<br />

ProfilingPhase3<br />

ProfilingStartFinal<br />

These stitchers populate the disco.profilingData table, providing data<br />

on discovery duration, memory usage, and a broad overview of the results of<br />

the discovery. This information is used by Micromuse in the estimation of<br />

scaling, and provides you with an overview of discovery performance.<br />

PVCNamePath Adds the name of a PVC path to the internal atmPVCs.memberships<br />

database table.<br />

PVCPathMemberships Executed automatically by CreateScratchTopology.stch during the<br />

discovery process. Uses the connectivity information from the Scratch<br />

Topology and the PVC information retrieved by the CiscoPVC agent to trace<br />

the PVCs across the network.<br />

PVCProcessedRecord Updates the atmPVCs database to indicate which record is currently being<br />

processed.<br />

PVCProcessingRecord Updates the atmPVCs database to indicate which record is currently being<br />

processed.<br />

PVCTraceAway Performs PVC tracing.<br />

PVCTraceCrossConnected Performs PVC tracing.<br />

PVCTracePath Performs PVC tracing for a given interface using the other PVC tracing stitchers<br />

to trace all the paths through the entire ATM section of the network.<br />

PVCTraceTowards Performs PVC tracing.<br />

RebuildFinalEntityTable This stitcher is very similar to the BuildFinalEntityTable. It also uses the entries<br />

in the translations.ipToBaseName table to populate the<br />

workingEntities.finalEntity table. The difference is that this stitcher<br />

is used in rediscovery mode rather than full discovery mode.<br />

RecreateAndSendTopology This stitcher is very similar to the CreateAndSendTopology.stch. It also<br />

activates the stitchers that create the topology and sends the final Scratch<br />

Topology to MODEL. The difference is that this stitcher is used in rediscovery<br />

mode rather than full discovery mode.<br />

RecreateScratchTopology This stitcher is similar to CreateScratchTopology.stch. The difference is that this<br />

stitcher is used in rediscovery mode rather than full discovery mode.<br />

ReDoIpToBaseName Refreshes the translations.ipToBaseName table.<br />

Refresh<strong>Discovery</strong>Tables Refreshes the discovery database tables.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table C1: List of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>Discovery</strong> Stitchers (13 of 14)<br />

Stitcher Function<br />

RefreshLayerDatabase Refreshes a given layer topology database.<br />

RefreshSubnets Refreshes a given subnet database.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

List of Default <strong>Discovery</strong> Stitchers<br />

RemoveVlanMacAddress Removes MAC addresses of logical VLAN interfaces from switch agent returns<br />

tables. This stitcher is not used by default.<br />

ResetNATMainNodes Resets the <strong>IP</strong> of devices whose addresses have been translated by NAT from the<br />

private <strong>IP</strong> we use to resolve connectivity back to the public <strong>IP</strong> for monitoring.<br />

This allows the devices to be connected and visualized correctly and also<br />

remain accessible for monitoring purposes.<br />

ResolveHSRPIssues Checks for entities that have been discovered through their virtual Hot<br />

Standby Routing Protocol (HSRP) address. In that situation, the stitcher<br />

updates the discovery agent returns tables and the<br />

translations.ipToBaseName to show the correct physical interface.<br />

ResolveVRRPAssocAddresses Resolves issues caused by VRRP addresses. In such a situation, the stitcher<br />

updates the discovery agent returns tables and the<br />

translations.ipToBaseName to show the correct physical interface.<br />

Restitcher Re-stitches the topology together.<br />

RTBasedVPN<strong>Discovery</strong> Discovers MPLS VPNs based on route target usage. This results in an edge view<br />

only which shows the MPLS core network with provider edge (PE) routers for<br />

VPNs and VRFs within the scope of the discovery. This view does not show the<br />

provider (P) routers within the MPLS core network and associated LSPs (label<br />

switched paths) that link these P routers. For each PE router discovered,<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> holds information on the route targets imported into and<br />

exported from that PE router. This enables you to identify which VPNs use<br />

which PE routers.<br />

SendTopologyToModel Sends the stitched topology to MODEL.<br />

SubnetConnections Creates subnet entities and inserts into each of the interfaces belonging to the<br />

subnet. At layer 3 level the interfaces within a subnet are all considered to be<br />

connected, so any connections not already discovered are added to the <strong>IP</strong> layer<br />

database.<br />

SubnetTo<strong>IP</strong>Layer Adds default layer-three containment and/or connectivity.<br />

SRPLayer Builds the SRP layer to hold the containment information discovered by the<br />

SRP agent. In common with other layer stitchers, this stitcher receives input<br />

from relevant agents. This input consists of entity records containing local and<br />

remote neighbor data fields. The stitcher uses these records to work out the<br />

local and remote connections for each entity.<br />

SwitchFdbToConnections Copies entries from the Switch agent returns tables to the connections<br />

table.<br />

533


Appendix C: Stitchers and Stitcher Language<br />

534<br />

Table C1: List of <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>Discovery</strong> Stitchers (14 of 14)<br />

Stitcher Function<br />

SwitchStpToConnections Builds a new layer based on the SwitchStp connectivty. Processes the data<br />

from the STP agent to create correctly named local and remote entity<br />

connection records in the stpTopology database.<br />

In common with other layer stitchers, this stitcher receives input from relevant<br />

agents. This input consists of entity records containing local and remote<br />

neighbor data fields. The stitcher uses these records to work out the local and<br />

remote connections for each entity.<br />

SysNameNaming Causes the system to name devices using the SNMP sysName where the data is<br />

valid. This is an optional stitcher that is off by default.<br />

TagManagedEntities Adds a tag to each of the interfaces of a main node indicating whether that<br />

interface should be monitored or not. This tag is in the m_ExtraInfo field<br />

and is called m_IsManaged. The tag can take the values 0 or 1, where 0<br />

indicates that the interface must not be monitored. The m_IsManaged values<br />

for all interfaces in a main node are concatenated and stored in the<br />

m_ExtraInfo field for the main node, within m_UnmanagedInterfaces,<br />

using the format: [, , ..... ],<br />

where the IfIndices are the ifIndices of the interfaces you do not want the<br />

system to monitor. By default, the stitcher sets m_IsManaged to 0 for certain<br />

predefined types of interface, such as virtual interfaces. You can specify other<br />

interface types that you do not want the system to monitor by adding to a<br />

where clause within the stitcher.<br />

TagManagementInterfaces Tags the interface that has the <strong>IP</strong> address used as the main access <strong>IP</strong> address for<br />

a given entity. This stitcher is used in root cause analysis.<br />

TraceRouteConnectivity Updates the <strong>IP</strong>Layer.entityByNeighbor table with connectivity<br />

information retrieved from the TraceRoute agent returns data.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


C.3 Stitcher Language<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Stitcher Language<br />

This section describes the stitcher language, including datatypes, operators, comments and quotation marks.<br />

Stitcher Language Structural Statements<br />

The stitcher text files consist of a series of structural statements that enclose the stitcher rules (the actual<br />

processing) and the trigger conditions.<br />

The structure of a stitcher file is shown in Stitcher Text File Structure on page 540. Table C2 lists the stitcher<br />

language structural statements.<br />

Table C2: Stitcher Language Structural Statements<br />

Structural Statement Description See page<br />

CompiledStitcher{ } Declares the present stitcher as a compiled stitcher and introduces<br />

its trigger conditions.<br />

UserDefinedStitcher{ } Declares the present stitcher as a user-defined stitcher and<br />

introduces its externs (monitoring stitchers only), trigger conditions<br />

and stitcher rules.<br />

StitcherTrigger{ } Introduces the list of requirements that must be fulfilled before the<br />

stitcher can be executed.<br />

StitcherRules{ } Introduces a list of rules to be executed by the stitcher. 544<br />

Stitcher Trigger Conditions<br />

The trigger conditions for the stitcher, specified within the StitcherTrigger{} section, are listed in<br />

Table C3.<br />

Table C3: Generic Stitcher Trigger Conditions<br />

Stitcher Trigger Condition Description See page<br />

ActOnDemand( ); Declares that the stitcher is executed on-demand. 542<br />

ActOnTableInsert( ); Declares that the current stitcher starts when data is inserted in the<br />

specified database table.<br />

ActOnTimedTrigger( ); Declares that the stitcher must be executed on the specified<br />

frequency.<br />

RequiresStitchers( ); Declares that the current stitcher starts when the specified stitcher<br />

has finished.<br />

540<br />

540<br />

540<br />

542<br />

542<br />

541<br />

535


Appendix C: Stitchers and Stitcher Language<br />

536<br />

The following conditions are only applicable to the discovery stitchers.<br />

Table C4: <strong>Discovery</strong>-Specific Stitcher Trigger Conditions<br />

Stitcher Rules<br />

Stitcher Trigger Condition Description See page<br />

DiscoRequiresAgents( ); Declares that the stitcher starts when the specified discovery<br />

agent has finished.<br />

DiscoRequiresLastPhase( ); Declares that the stitcher can only be executed in the last<br />

discovery cycle phase.<br />

DiscoRequiresPhase( ); Declares that the stitcher can only be executed on completion of<br />

the specified discovery cycle phase.<br />

The stitcher rules are specified within the StitcherRules{} section. They conduct the actual<br />

processing. Table C5 lists the stitcher rules that can be used in any stitcher.<br />

Table C5: Generic Stitcher Rules (1 of 2)<br />

Stitcher Rule Description See Page<br />

ExecEvalOnRecord( ); Executes an eval statement on a record. 553<br />

ExecuteOQL( ); Instructs the stitcher to execute an OQL statement. 549<br />

ExecuteStitcher( ); Executes the specified stitcher. 552<br />

GetInScopeRecord( ); Returns the record currently in scope. 550<br />

GetRecordFromScope( ); Returns details of a record in the specified scope. 550<br />

IsInSubnet( ); Determines whether or not a particular <strong>IP</strong> address falls within a<br />

specified subnet based on the netmask.<br />

MatchPattern( ); Performs string extraction based on regular expressions. 554<br />

MergeEntities( ); Merges entities into a single record. 553<br />

Print( ); Prints the specified variables to the standard output. 554<br />

PrintRecord( ); Prints the record currently in scope to the standard output for<br />

debugging purposes.<br />

RetrieveOQL( ); Creates a list of the datatype RecordList generated by an<br />

OQL query.<br />

RetrieveSingleOQL( ); Executes an OQL query and retrieves the first record returned. 549<br />

RetrieveOQLFromService(); Executes an OQL query using the specified service and returns<br />

the results as a list of the datatype RecordList.<br />

541<br />

541<br />

541<br />

553<br />

553<br />

549<br />

549<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Table C5: Generic Stitcher Rules (2 of 2)<br />

<strong>Discovery</strong> Stitcher-Specific Rules<br />

Table C6 lists the stitcher rules that can only be used in the discovery stitchers.<br />

Monitoring Stitcher-Specific Rules<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Stitcher Language<br />

Stitcher Rule Description See Page<br />

SendAllOQLToService( ); Sends a series of records to the 'Model' service. 551<br />

SendOQLToService( ); Instructs the stitcher to send OQL statement(s) to a currently<br />

active service.<br />

Table C6: <strong>Discovery</strong> Specific Stitcher Rules<br />

Stitcher rule Description See page<br />

DiscoSendOQLToFinder( ); Instructs the stitcher to send OQL statement(s) to a finder. 557<br />

DiscoRefresh( ); Instructs the finders to restart their operation, for example,<br />

when performing a rediscovery.<br />

IsRecordInFilter( ); Determines whether the record passes the detection or<br />

instantiation filter.<br />

Disco<strong>Discovery</strong>CycleComplete; Notifies the process of the completion of a discovery cycle. 558<br />

For more information on monitoring stitchers, including the stitcher rules, see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

Monitoring and RCA <strong>Guide</strong>.<br />

Stitcher Language Programming Constructs<br />

Table C7 lists the stitcher language programming constructs.<br />

Table C7: Stitcher Language Programming Constructs<br />

Stitcher keyword Description See page<br />

delete Deletes lists created by the RetrieveOQL function. 548<br />

else Executes statements where the conditional test specified with the if loop is not<br />

passed.<br />

for Defines a loop that is repeated a specified number of times. 545<br />

foreach Performs an action on each member of a list of datatype RecordList. 547<br />

if Executes statements if a conditional test is passed. 546<br />

while Defines a loop that repeats while a condition holds true. 546<br />

546<br />

550<br />

557<br />

558<br />

537


Appendix C: Stitchers and Stitcher Language<br />

Stitcher Language Datatypes<br />

538<br />

Table C8 lists the stitcher language datatypes that are assigned to variables used within the stitcher rules.<br />

Table C8: Stitcher Language Datatypes<br />

Datatype Description<br />

float Stores floating point values (monitoring stitchers only).<br />

int Stores integer values.<br />

Record Stores a single returned record.<br />

RecordList Stores lists created by the RetrieveOQL function.<br />

text Stores string values.<br />

Stitcher Language Relational Operators<br />

Table C9 lists the relational operators.<br />

Table C9: Stitcher Language Relational Operators<br />

Operator Description<br />

== Test for equality.<br />

!= Test for non-equality.<br />

< Test for less than.<br />

> Test for greater than.<br />

= Test for greater than or equal to.<br />

Comments in Stitchers<br />

Comments in stitchers are introduced by -- or //, as shown in the following example. If a comment<br />

requires a carriage return, the characters on the next line must also be commented out.<br />

-- This is a valid stitcher language comment.<br />

// This is also a valid stitcher language comment.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Precedence and Association of Operators<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Stitcher Language<br />

The rules for precedence and association of operators determine the grouping of operators with operands,<br />

and indicate the order in which the operators in an expression are executed. For complex expressions, use<br />

parentheses to avoid ambiguity. Table C10 lists the operators that are used in the stitcher language.<br />

Table C10: Operators in the Stitcher Language in Order of Decreasing Precedence<br />

Operator Description Associativity Precedence<br />

- Negative sign Non-associative 1 (Highest)<br />

* Multiplication Left 2<br />

/ Division Left 2<br />

OR Logical OR Left 3<br />

AND Logical AND Left 4<br />

NOT Logical NOT Left 5<br />

= Equal to Left 6<br />

Not equal to Left 6<br />

< Less Left 6<br />

> Greater than Left 6<br />

= Greater than or equal to Left 6<br />

+ Addition Left 7<br />

- Subtraction Left 7 (Lowest)<br />

Quotes in the Stitcher Language<br />

OQL statements embedded within the stitcher language (for example, within the ExecuteOQL();<br />

statement) are enclosed in double quotes. If quotes are needed inside the embedded OQL, they must be<br />

single quotes even if double quotes would normally be used. The following example shows an embedded<br />

OQL statement that is enclosed in double quotes. The TEXT datatype within the statement is enclosed in<br />

single quotes:<br />

ExecuteOQL(<br />

"select m_Name from finders.returns where m_Creator = 'PingFinder';"<br />

);<br />

Elsewhere in the stitcher language, single quotes are generally used, as shown in the following example:<br />

ExecuteStitcher( 'CreateAndSendTopology' );<br />

539


Appendix C: Stitchers and Stitcher Language<br />

C.4 Stitcher Text File Structure<br />

540<br />

All discovery stitchers have a text file associated with them that is located in<br />

NCHOME/precision/disco/stitchers. The structure of a stitcher text file depends on the type<br />

of stitcher (that is, compiled, text-based discovery stitcher or text-based monitoring stitcher).<br />

Compiled Stitchers<br />

The compiled stitchers are identified as such in the text file with the CompiledStitcher{} statement,<br />

which encloses the trigger conditions. The full structure of a compiled stitcher is shown below.<br />

!CompiledStitcher<br />

{<br />

StitcherTrigger<br />

{<br />

List of stitcher trigger conditions<br />

}<br />

}<br />

Text-Based <strong>Discovery</strong> Stitchers<br />

Text-based discovery stitchers are identified as text-based with the UserDefinedStitcher{}<br />

statement. This statement encloses the trigger conditions and the stitcher rules (which carry out the actual<br />

stitcher processing).<br />

The full structure of a text-based discovery stitcher is shown below.<br />

!UserDefinedStitcher<br />

{<br />

StitcherTrigger<br />

{<br />

List of stitcher trigger conditions<br />

}<br />

StitcherRules<br />

{<br />

List of stitcher rules<br />

}<br />

}<br />

Stitcher Trigger Conditions<br />

The stitcher trigger conditions specify the conditions that must be met in order for the stitcher to be<br />

executed. The trigger conditions are defined within the StitcherTrigger{} statement. The available<br />

stitcher triggers are shown in use below. Although the triggers are shown and discussed individually, it is<br />

possible to enclose multiple stitcher triggers within the StitcherTrigger{} section, each of which<br />

must be terminated by a semicolon.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Stitcher Text File Structure<br />

The following section describes the stitcher triggers. For information on monitoring stitcher-specific<br />

triggers, see the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> Monitoring and RCA <strong>Guide</strong>.<br />

Stitchers Activated When a Specified <strong>Discovery</strong> Agent Completes Its<br />

Operation<br />

The following trigger indicates that the stitcher must start when the specified agent or agents have completed<br />

their operation. The name of each agent must be enclosed in double quotes. If multiple agents are specified<br />

the list must be separated by commas.<br />

StitcherTrigger<br />

{<br />

DiscoRequiresAgents( "<strong>Discovery</strong>_agent" );<br />

}<br />

Stitchers Activated During a Specified <strong>Discovery</strong> Phase<br />

The following trigger indicates that the stitcher starts on completion of a specified discovery phase.<br />

StitcherTrigger<br />

{<br />

DiscoRequiresPhase( Integer_indicating_discovery_phase );<br />

}<br />

Stitchers Activated During the Last <strong>Discovery</strong> Phase<br />

The following trigger indicates that the stitcher starts during the last discovery phase. No input is required.<br />

StitcherTrigger<br />

{<br />

DiscoRequiresLastPhase();<br />

}<br />

Stitchers Activated When a Specified Stitcher Completes Its Operation<br />

The following trigger indicates that the stitcher starts when the specified stitcher or stitchers have completed<br />

their operation. The name of each stitcher must be enclosed in double quotes. If multiple stitchers are<br />

specified the list must be separated by commas.<br />

StitcherTrigger<br />

{<br />

RequiresStitcher( "Stitcher" );<br />

}<br />

541


Appendix C: Stitchers and Stitcher Language<br />

542<br />

Stitchers Activated When Data Is Inserted into a Specified Database Table<br />

The following trigger specifies that the stitcher starts every time data is inserted into the specified database<br />

table.<br />

StitcherTrigger<br />

{<br />

ActOnTableInsert( "database_name", "table_name" );<br />

}<br />

On Demand Stitchers<br />

Stitchers that are to be activated when invoked by the user or another stitcher have an on-demand trigger,<br />

as shown below. No input is required.<br />

StitcherTrigger<br />

{<br />

ActOnDemand();<br />

}<br />

Stitchers Activated According to a Frequency<br />

Stitchers that are to be activated according to a frequency (evaluated relative to the time DISCO started)<br />

have a trigger similar to the following.<br />

StitcherTrigger<br />

{<br />

ActOnTimedTrigger( ( frequency_attribute ) values ( value ); );<br />

}<br />

Table C11 lists the frequency attributes.<br />

Table C11: Frequency Attributes<br />

Attribute Description Value passed to attribute<br />

m_DayOfWeek Specifies that the stitcher is to be<br />

executed on a certain day every<br />

week.<br />

m_DayOfMonth Specifies repeated stitcher<br />

execution on a specific day of every<br />

month.<br />

m_TimeOfDay Specifies execution at a particular<br />

time every day.<br />

m_Interval Specifies stitcher execution at a<br />

given interval.<br />

Integer representing the day, where Sunday=0 and<br />

Saturday=6.<br />

Integer from 1 to 31 representing the day of the month on<br />

which to execute the stitcher. If you specify 31 and the<br />

present month only has 28, 29 or 30 days, the timer<br />

automatically defaults to the last day of the month.<br />

Integer representing the time of the day in 24 hour format,<br />

for example, execution at 2 pm every day would be<br />

indicated by 1400.<br />

An integer representing the number of hours between<br />

execution.<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Stitcher Text File Structure<br />

It is possible to combine either the weekly (m_DayOfWeek) or monthly (m_DayOfMonth) time interval<br />

options with the time of day (m_TimeOfDay) option to specify exactly when you want the stitcher to<br />

execute. However, it is not possible to combine any of the configuration options with the m_Interval<br />

option, which takes precedence over any other attribute.<br />

Examples of Timed Triggers<br />

In the following example, the stitcher is configured to execute every 60 hours.<br />

StitcherTrigger<br />

{<br />

ActOnTimedTrigger<br />

(<br />

( m_interval ) values ( 60 );<br />

);<br />

}<br />

In the following example, the stitcher is configured to execute every Monday at 3:15 pm.<br />

StitcherTrigger<br />

{<br />

ActOnTimedTrigger<br />

(<br />

( m_DayOfWeek, m_TimeOfDay ) values ( 1, 1515 );<br />

);<br />

}<br />

Note: A stitcher can only contain one ActOnTimedTrigger trigger, that is, only one trigger activated<br />

according to a frequency. So, for example, if you wish to set a trigger so that a specific stitcher action is<br />

performed on two days in a week such as Monday and Thursday, you need to define two stitchers and place<br />

an ActOnTimedTrigger trigger in each.<br />

543


Appendix C: Stitchers and Stitcher Language<br />

C.5 Stitcher Rules<br />

544<br />

The following section describes the processing that takes place within the curly braces of the<br />

StitcherRules{} section of the text-based stitchers. The stitcher rules are separated by spaces.<br />

Variables Within the Stitcher Rules<br />

Variables in the stitchers must be declared before they can be used. The declaration is in the following<br />

format.<br />

datatype name = initial_value ;<br />

Variables can be declared anywhere within the StitcherRules{}. Although variables must be assigned<br />

an initial value, it can be NULL. Once a variable has been declared it can be used throughout the current<br />

stitcher, but can only accept values of the appropriate datatype. Some examples of variable declaration are<br />

shown below.<br />

The following example declares an integer variable called router and assigns to it an initial value of 0.<br />

int router = 0;<br />

The following example declares a text variable called router2 and assigns to it the string "upper".<br />

text router2 = "upper";<br />

Once a variable has been created, its value can be updated at any time. It is also possible to assign the result<br />

of an eval statement or a calculation to a variable. The rules for operator precedence and associativity in<br />

the <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> languages are defined in Precedence and Association of Operators on page 539.<br />

The RecordList and Record Data types<br />

Variables of the RecordList and Record datatypes are used to store retrieved OQL records in a<br />

variable. A variable with one of these datatypes is defined, like a text or integer variable, by specifying the<br />

datatype and variable name and assigning a value to the variable. The results of an OQL query can be<br />

assigned to the variable using the RetrieveOQL(); rule, which contains an OQL query enclosed in<br />

double quotes. The RetrieveOQL(); rule is defined in Stitcher Rules: RetrieveOQL() on page 549.<br />

The following example declares a variable called discoRes, specifies the datatype for the variable as<br />

RecordList, and assigns the results of a query on the disco.status database table to discoRes.<br />

RecordList discoRes=RetrieveOQL // Declares discoRes to be a<br />

( // RecordList variable and<br />

"select m_<strong>Discovery</strong>Mode // assigns the results of the<br />

from disco.status;" // query to discoRes.<br />

);<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Stitcher Rules<br />

The Record datatype is used in the same way, but variables of the Record datatype only hold one record.<br />

The following example shows the Record datatype in use.<br />

Record newEntity = GetInScopeRecord();<br />

The GetInScopeRecord(); stitcher rule is described on Stitcher Rules: GetInScopeRecord() on<br />

page 550.<br />

Variable Declaration and Use<br />

Variables of the Record and RecordList types do not have to be declared on the same line as the<br />

assignment of the output from stitcher rules like RetrieveOQL();. As long as the variable has previously<br />

been declared it can be assigned the output from a RetrieveOQL(); rule. The following example is also<br />

a valid use of the Record datatype.<br />

Record newEntity = NULL;<br />

newEntity = GetInScopeRecord();<br />

Programming Constructs: Looping within the Stitcher Rules<br />

The relational operators, listed in Table C9 on page 538, can be used to compare variables and perform<br />

conditional tests, in conjunction with the stitcher language programming constructs such as for,<br />

foreach, while and if. These constructs can be nested within each other.<br />

The for Loop<br />

The for loop is used to repeat a set of rules a given number of times. The for loop takes the following<br />

format.<br />

for( variable_assignment ; conditional_test ; change_to_variable )<br />

{<br />

List of stitcher rules to execute<br />

}<br />

The process flow of the for loop is as follows:<br />

1. On the first loop, the variable_assignment assigns a value to a previously declared variable.<br />

2. The conditional_test is evaluated.<br />

545


Appendix C: Stitchers and Stitcher Language<br />

546<br />

3. If the test evaluates true:<br />

– The stitcher rules within the curly braces are executed.<br />

– The change_to_variable is performed.<br />

– The loop returns to step 2.<br />

4. When the conditional_test evaluates false, the loop terminates.<br />

An example of a for loop is shown below. This loop repeats until variable1 is no longer less than<br />

variable2 (variable1 is increased by 1 on each complete loop).<br />

int variable1 = 0; //<br />

Declares variable1 as an integer.<br />

for( variable1 = 0 ; variable1 < variable2 ; variable1 = variable1 + 1 )<br />

{<br />

List of stitcher rules to execute<br />

}<br />

The while Loop<br />

The while loop is used to execute a series of instructions while a specified condition remains true. The<br />

while loop takes the following format.<br />

while( conditional_test )<br />

{<br />

List of stitcher rules to execute<br />

}<br />

The while loop repeats as long as the conditional test evaluates to true. An example while loop is shown<br />

below.<br />

while( count < numberOfLayers )<br />

{<br />

List of stitcher rules to execute<br />

}<br />

The above loop repeats as long as the value of the count variable is less than the value of<br />

numberOfLayers.<br />

The if Loop<br />

The if loop performs an action if a particular condition is satisfied. The if loop takes the following format.<br />

if( conditional_test )<br />

{<br />

List of stitcher rules to execute if the condition is TRUE<br />

}<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Stitcher Rules<br />

The list of stitcher rules are executed if the conditional test is satisfied. It is also possible to specify a list of<br />

stitcher rules to execute if the condition is not satisfied, as shown below.<br />

if( conditional_test )<br />

{<br />

List of stitcher rules to execute if the condition is TRUE<br />

}<br />

else<br />

{<br />

List of stitcher rules to execute if the condition is FALSE<br />

}<br />

An example of the if loop in use is shown below. If myVariable is equal to 1, the first OQL statement<br />

is executed, otherwise the second OQL statement is executed.<br />

if( myvariable == 1 )<br />

{<br />

ExecuteOQL<br />

(<br />

"insert into database.table<br />

( m_Name,<br />

m_BaseName )<br />

values<br />

( "Agent",<br />

"BaseName" );"<br />

);<br />

}<br />

else<br />

{<br />

ExecuteOQL<br />

(<br />

"insert into another.table<br />

( m_Name,<br />

m_BaseName )<br />

values<br />

( "Agent",<br />

"BaseName" );"<br />

);<br />

}<br />

The foreach Loop<br />

The foreach loop performs an action on every record stored in a variable of type RecordList. The<br />

foreach loop has the following syntax.<br />

foreach( variable of type RecordList )<br />

{<br />

List of stitcher rules to execute<br />

}<br />

547


Appendix C: Stitchers and Stitcher Language<br />

548<br />

The following example shows how the foreach loop repeats the list of stitcher rules for every record in<br />

the list.<br />

foreach( remoteNames )<br />

{<br />

ExecuteOQL<br />

(<br />

"insert into CDPLayer.entityByNeighbor<br />

(<br />

m_Name, m_NbrName, m_NbrType<br />

)<br />

values<br />

(<br />

eval(text, '&m_LocalName'),<br />

eval(text, '&m_Name'),<br />

eval(int, '$RemoteNeighbor')<br />

);"<br />

);<br />

}<br />

The example assumes that a variable called remoteNames has already been defined and a list of OQL<br />

records has been assigned to it. The foreach loop executes the specified OQL insert for every record in<br />

the list, extracting the values to insert from the records using eval statements.<br />

Stitcher Rules: Delete()<br />

The delete rule removes lists and records that have been created and are no longer needed. The syntax is<br />

shown below.<br />

delete( variable of type Record or RecordList );<br />

It is good practice to delete lists after they are no longer needed, as this releases memory.<br />

Some examples are shown below.<br />

delete( notIpSwitchNbrs );<br />

delete( ethernetSwitches );<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Stitcher Rules: ExecuteOQL()<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Stitcher Rules<br />

The ExecuteOQL(); rule executes an OQL statement on the databases of the current service (that is,<br />

the DISCO databases for the discovery stitchers). The OQL statement is enclosed in brackets and<br />

surrounded by double quotes.<br />

ExecuteOQL( "Any valid OQL statement" );<br />

The following example shows how the ExecuteOQL() rule is used to delete all the records in the<br />

finders.pending table.<br />

ExecuteOQL( "delete * from finders.pending;" );<br />

Stitcher Rules: RetrieveOQL()<br />

The RetrieveOQL(); rule executes an OQL query on the databases of the current service (that is, the<br />

DISCO databases for the discovery stitchers). The results can be assigned to a variable of the type<br />

RecordList.<br />

RetrieveOQL( "Any valid OQL query" );<br />

The following example shows the results of a query on the finders.returns table being assigned to a<br />

previously declared variable of datatype RecordList called devicesFound.<br />

devicesFound = RetrieveOQL( "select m_Name from finders.returns;" );<br />

Stitcher Rules: RetrieveSingleOQL()<br />

RetrieveSingleOQL(); rule is a version of the RetrieveOQL(); rule that returns only the first<br />

result of the OQL query, regardless of how many records are returned. The result can be assigned to a<br />

variable of the Record datatype.<br />

RetrieveSingleOQL( "Any valid OQL query" );<br />

Stitcher Rules: RetrieveOQLFromService()<br />

The RetrieveOQLFromService(); rule executes an OQL query on the databases of the specified<br />

service. The results can be assigned to a variable of the type RecordList.<br />

RetrieveOQLFromService( "Any valid OQL query", "OQL service name" );<br />

The following example shows the results of a query on the model.config table from the service Model<br />

being assigned to a previously declared variable of datatype RecordList called configData.<br />

configData = RetrieveOQLFromService(<br />

"select * from model.config;",<br />

549


Appendix C: Stitchers and Stitcher Language<br />

550<br />

"Model"<br />

);<br />

Stitcher Rules: GetInScopeRecord()<br />

The GetInScopeRecord(); rule retrieves the record currently in scope. The rule requires no input.<br />

The results are to be assigned to a variable of type Record.<br />

GetInScopeRecord();<br />

Stitcher Rules: GetRecordFromScope()<br />

The GetRecordFromScope(); rule retrieves a record from the specified scope (for example, for use<br />

when nested within a foreach loop). The rule requires an integer that indicates the scope from which to<br />

retrieve the record, where 0 indicates the current scope, 1 indicates the scope one level of nesting away, and<br />

so on.<br />

The results must be assigned to a variable of type Record.<br />

GetRecordFromScope<br />

(<br />

integer indicating the scope from which to retrieve the record<br />

);<br />

Stitcher Rules: SendOQLtoService()<br />

The SendOQLToService(); rule executes an OQL statement on the databases of the specified service.<br />

The syntax of the rule is as follows.<br />

SendOQLToService( "OQL service name" , "Any valid OQL statement" );<br />

The following example shows how the rule is used to perform an insert into the EXEC actions.inTray<br />

table.<br />

SendOQLToService(<br />

"Exec",<br />

"insert into actions.inTray<br />

( ActionId, Path, RunCount )<br />

values<br />

( 1234, "/usr/sbin/ping", 5 );"<br />

);<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Stitcher Rules: SendAllOQLToService()<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Stitcher Rules<br />

The SendAllOQLToService(); rule sends all the records in a variable of type RecordList to the<br />

'Model' service. The syntax of the rule is as follows.<br />

SendAllOQLToService(<br />

"OQL service name" ,<br />

variable of type RecordList,<br />

"Any valid OQL insert statement",<br />

"stitcher to be invoked to test each record"<br />

);<br />

The SendAllOQLToService(); rule is used to send the topology to MODEL. In the following<br />

example, impactData is a variable of type RecordList that contains a series of records. The data from<br />

these records is extracted using eval statements, and the InstantiationFilter.stch stitcher is<br />

invoked for each record to determine whether the entity is to be instantiated to an AOC.<br />

SendAllOQLToService(<br />

"Model", // Send OQL to this<br />

service<br />

impactData, // Send the records<br />

from this variable<br />

"insert into master.entityByName<br />

( ObjectId, EntityName, Address, Description, EntityType,<br />

EntityOID, ExtraInfo, RelatedTo, Contains,<br />

UpwardConnections, ActionType, IsActive, ClassName )<br />

values<br />

( 0, eval(text, '&m_Name'), eval(list type text, '&m_Addresses'),<br />

eval(text, '&m_Description'), eval(int, '&m_Type'),<br />

eval(text, '&m_ObjectId'), eval(object type vbList, '&m_ExtraInfo'),<br />

eval(list type text, '&m_RelatedTo'),<br />

eval(list type text, '&m_Contains'),<br />

eval(list type text, '&m_UpwardConnections'), 0, 1, NULL );",<br />

"InstantiationFilter" //<br />

Invoke this stitcher for each record<br />

);<br />

551


Appendix C: Stitchers and Stitcher Language<br />

Stitcher Rules: ExecuteStitcher()<br />

552<br />

The ExecuteStitcher(); function executes the specified stitcher. Once the invoked stitcher has<br />

completed, control is passed back to the original stitcher and the remaining stitcher rules are executed in<br />

sequence. The syntax of the ExecuteStitcher() function is given below.<br />

ExecuteStitcher( 'Stitcher' );<br />

An optional comma-separated list of variables to be passed to the stitcher can also be specified after the<br />

stitcher name.<br />

The following example executes the ProcessAffectedRemoteSwitches.stch stitcher without<br />

passing any arguments.<br />

ExecuteStitcher( 'ProcessAffectedRemoteSwitches' );<br />

The following example executes the SwitchFdbToConnections.stch stitcher and passes two<br />

variables to the stitcher.<br />

ExecuteStitcher( 'SwitchFdbToConnections' , 'agent1' , 'agent2' );<br />

Extracting Variables Passed to a Stitcher<br />

The stitcher invoked using the ExecuteStitcher(); rule can extract the variables that have been<br />

passed to it by evaluating the special variable ARG_N using an eval statement, where N is the number of<br />

the variable (for example, ARG_1 represents the first variable passed to the stitcher, ARG_2 represents the<br />

second variable, and so on).<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Stitcher Rules: ExecEvalOnRecord()<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Stitcher Rules<br />

The ExecEvalOnRecord(); rule executes the supplied eval statement on the named record. The<br />

output can be assigned to a variable of the appropriate type.<br />

ExecEvalOnRecord( Record_variable , eval statement );<br />

The following example shows how a text variable called name being assigned the evaluation of the<br />

EntityName field of the currentRec variable.<br />

text name=ExecEvalOnRec( currentRec , eval(text, '&EntityName' );<br />

Stitcher Rules: IsInSubnet()<br />

The IsInSubnet(); rule determines whether a specified <strong>IP</strong> address is in a given subnet, based on the<br />

subnet mask.<br />

IsInSubnet( <strong>IP</strong>_address , subnet , subnet_mask );<br />

The rule returns an integer where 0 indicates that the <strong>IP</strong> address is not in the subnet and 1 indicates that the<br />

<strong>IP</strong> address is in the subnet.<br />

Stitcher Rules: MergeEntities()<br />

The MergeEntities(); rule merges two variables of type Record.<br />

MergeEntities(<br />

new_record , old_record , integer_indicating_precedence<br />

);<br />

The output of the rule can be assigned to a variable of type Record. The integer indicates precedence,<br />

where 1 indicates that the new record take precedence over the old record, and 0 indicates that the old record<br />

takes precedence.<br />

Stitcher Rules: PrintRecord()<br />

The stitcher language allows information to be printed to the standard output (for example, for debugging<br />

purposes). The PrintRecord(); stitcher rule prints the entire record currently in scope.<br />

No input is required for the PrintRecord rule, it needs to be issued within the scope of the record to be<br />

printed, as shown by the example below. In this example, PrintRecord() is used to print the records<br />

within a variable of datatype RecordList called snmpResults.<br />

foreach( snmpResults )<br />

{<br />

553


Appendix C: Stitchers and Stitcher Language<br />

554<br />

PrintRecord();<br />

Stitcher Rules: Print()<br />

}<br />

The Print() rule also sends information to the standard output, but differs from PrintRecord() in<br />

that the information to be printed must be specified. Two comma separated arguments must be specified<br />

within the brackets of Print(). The arguments can be any of the following: a quoted string (which may<br />

be empty), an unquoted string (which may be a symbol definition name or may be NULL), an integer, or<br />

an eval statement.<br />

An example of the Print() rule that prints the current time to the standard output is shown below.<br />

Print ( "CPU time:", eval (text, "$TIME") );<br />

Stitcher Rules: MatchPattern()<br />

The MatchPattern() rule performs string extraction based on regular expressions. The rule determines<br />

how many times a regular expression pattern was found in a target string. The rule also enables you to create<br />

variables based on subpatterns found in the target string. The syntax of the MatchPattern() rule is as<br />

follows:<br />

MatchPattern( target_string,pattern_string );<br />

Both the target string and pattern string can be any of the following:<br />

Defined string<br />

Variable<br />

eval statement<br />

The following examples show some possible forms of the MatchPattern() rule.<br />

Both the target string and the pattern string are defined strings: The following example returns the<br />

value 3 as the pattern was matched three times.<br />

int count=MatchPattern( "Hello Hello Hello","Hello" );<br />

Both the target string and the pattern string are variables: The following example also returns the<br />

value 3.<br />

text target="Hello Hello Hello";<br />

text pattern="Hello";<br />

int count=MatchPattern( target,pattern );<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


Use of an eval statement:<br />

text target="Hello Hello Hello";<br />

int count=MatchPattern( target,eval(text, "$pattern") );<br />

String Extraction<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Stitcher Rules<br />

The MatchPattern() rule can also extract text from the target string by creating variables based on<br />

subpatterns found in the target string. These variables take the name REGEXN, where N is a number which<br />

identifies the variable.<br />

The following example shows how variables are assigned.<br />

[1] text target="Testing Testing One 2 Three";<br />

[2] text pattern=<br />

"([^[:space:]]+)[[:space:]]+([^[:space:]]+)[[:space:]]+([^[:space:]]+)[[:space:]]<br />

+([[:digit:]]+)[[:space:]]+([^[:space:]]+).*";<br />

[3] int count=MatchPattern( target,pattern );<br />

[4] while( count > 0 )<br />

[5] {<br />

[6] Print("Count ", count);<br />

[7] Print("Match ", REGEX0);<br />

[8] Print("SubMatch1 ", REGEX1);<br />

[9] Print("SubMatch2 ", REGEX2);<br />

[10] Print("SubMatch3 ", REGEX3);<br />

[11] Print("SubMatch4 ", REGEX4);<br />

[12] Print("SubMatch5 ", REGEX5);<br />

[13]<br />

[14] count = count - 1;<br />

[15] }<br />

The round brackets in the pattern string defined in line 2 identify a subpattern to be extracted and placed<br />

within a REGEX variable. In this example there is one match only; hence there is one variable (REGEX0),<br />

which matches the full pattern, and five submatches, (REGEX1 to REGEX5), set as follows:<br />

Table C12: Extraction of Variables Based on Subpatterns<br />

Variable Value Type<br />

REGEX0 Testing Testing One 2 Three Match<br />

REGEX1 Testing Submatch<br />

REGEX2 Testing Submatch<br />

REGEX3 One Submatch<br />

REGEX4 2 Submatch<br />

REGEX5 Three Submatch<br />

555


Appendix C: Stitchers and Stitcher Language<br />

556<br />

If there is more than one match, then more REGEX variables are created. For example, if there were three<br />

matches, then 18 REGEX variables would be created. In this case, the variables REGEX0, REGEX6, and<br />

REGEX12 would correspond to the full matching pattern, while variables REGEX1-5, REGEX7-11, and<br />

REGEX13-18 would correspond to the subpatterns within each full match.<br />

Note: If you run the MatchPattern() rule a second time, then it overwrites previous values held in the<br />

REGEX variables. It is recommended that you store any extracted data prior to running the<br />

MatchPattern() rule a second time.<br />

Psuedowire Example<br />

This section provides a more realistic example based on data received from an MPLS stitcher. Assume that<br />

the following psuedowire data string is retrieved from the stitcher:<br />

Layer-2 VPN Statistics:<br />

Instance: vpls1<br />

Local interface: fe-1/3/0.0, Index: 71<br />

Multicast packets: 375747<br />

Multicast bytes : 34780885<br />

Flooded packets : 96012<br />

Flooded bytes : 9213657<br />

Local interface: vt-1/2/0.32768, Index: 72<br />

Remote PE: 10.1.230.4<br />

Multicast packets: 174307<br />

Multicast bytes : 14449864<br />

Flooded packets : 615013<br />

Flooded bytes : 50990719<br />

Instance: vpls1<br />

Local interface: fe-1/3/0.0, Index: 71<br />

Multicast packets: 375747<br />

Multicast bytes : 34780885<br />

Flooded packets : 96012<br />

Flooded bytes : 9213657<br />

Local interface: vt-1/2/0.32768, Index: 72<br />

Remote PE: 10.1.230.4<br />

Multicast packets: 174307<br />

Multicast bytes : 14449864<br />

Flooded packets : 615013<br />

Flooded bytes : 50990719<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


You can extract the data from this string by writing a stitcher which incorporates code with the<br />

MatchPattern() rule, as follows:<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

Stitcher Rules<br />

[1] text pattern=<br />

"Instance:[[:space:]]+([^[:space:]]+)[[:space:]]*[\n\r][[:space:]]*<br />

[\n\r][[:space:]]*Localinterface:[[:space:]]+([^,]+),[[:space:]]+Index:<br />

[[:space:]]+([[:digit:]]+)[[:space:]]*[\n\r][[:space:]]*Multicast packets<br />

[[:space:]]*:[[:space:]]+[[:digit:]]+[[:space:]]*[\n\r][[:space:]]*Multicast<br />

bytes[[:space:]]*:[[:space:]]+[[:digit:]]+[[:space:]]*[\n\r][[:space:]]*Flooded<br />

packets[[:space:]]*:[[:space:]]+[[:digit:]]+[[:space:]]*[\n\r][[:space:]]*Flooded<br />

bytes[[:space:]]*:[[:space:]]+[[:digit:]]+[[:space:]]*[\n\r][[:space:]]*[\n\r][[:<br />

space:]]*Local interface:[[:space:]]+([^,]+),[[:space:]]+Index:[[:space:]]+<br />

([[:digit:]]+)[[:space:]]*[\n\r][[:space:]]*Remote PE:[[:space:]]+([^ \t\n\r]+)<br />

[[:space:]]*[\n\r].*";<br />

[2] int count = MatchPattern( eval ( text,$target ), pattern);<br />

[3] while(count > 0)<br />

[4] {<br />

[5] Print("Count ", count);<br />

[6] Print("Match ", REGEX0);<br />

[7] Print("SubMatch 1 ", REGEX1);<br />

[8] Print("SubMatch 2 ", REGEX2);<br />

[9] Print("SubMatch 3 ", REGEX3);<br />

[10] Print("SubMatch 4 ", REGEX4);<br />

[11] Print("SubMatch 5 ", REGEX5);<br />

[12] Print("SubMatch 6 ", REGEX6);<br />

[13]<br />

[14] count = count - 1;<br />

[15] }<br />

In line 2 of this example, $target is the psuedowire data string received from the MPLS stitcher.<br />

<strong>Discovery</strong>-specific Stitcher Rules: DiscoSendOQLToFinder()<br />

Stitchers can send OQL strings directly to any of the finders using the DiscoSendOQLToFinder();<br />

rule. This rule sends OQL requests over a TCP socket connection instead of the Rendezvous Bus.<br />

DiscoSendOQLToFinder( "Finder", "OQL_statement" );<br />

<strong>Discovery</strong>-specific Stitcher Rules: DiscoRefresh()<br />

The DiscoRefresh(); rule resets the finders and clears the Helper Server tables. It can be passed<br />

information indicating the areas to refresh.<br />

DiscoRefresh( "Finder_or_Helper" );<br />

The following examples show the various forms of the DiscoRefresh(); rule.<br />

DiscoRefresh( "PingFinder" ); // Refresh the Ping finder.<br />

DiscoRefresh( "PingFinder", "1.2.3.0", "255.255.255.0" ); // Refresh the Ping finder<br />

557


Appendix C: Stitchers and Stitcher Language<br />

558<br />

// rule for the subnet 1.2.3.0 (causing the subnet to be pinged again).<br />

DiscoRefresh( "TrapFinder" ); // Refresh the Trap finder.<br />

DiscoRefresh( "SnifferFinder" ); // Refresh the Sniffer finder.<br />

DiscoRefresh( "FileFinder" ); // Refresh the File finder.<br />

DiscoRefresh( "Helper", "SnmpHelper", "m_HostIp", "1.2.3.4" );<br />

// Refresh all records in the SNMP Helper SNMP store where m_HostIp="1.2.3.4".<br />

<strong>Discovery</strong>-specific Stitcher Rules: IsRecordInFilter()<br />

The IsRecordInFilter(); rule is used by the DetectionFilter.stch and<br />

InstantiationFilter.stch stitchers to determine whether the current record passes the filter<br />

condition. The rule returns an integer, where 1 indicates that the record passes the filter and 0 indicates that<br />

the record does not pass the filter.<br />

IsRecordInFilter( "Filter_condition" , variable_of_Record_datatype );<br />

In the DetectionFilter.stch and InstantiationFilter.stch stitchers, the filter<br />

condition is extracted from the DISCO scope database using an eval statement.<br />

<strong>Discovery</strong>-specific Stitcher Rules: Disco<strong>Discovery</strong>CycleComplete<br />

The Disco<strong>Discovery</strong>CycleComplete; rule notifies the DISCO process that the discovery cycle is<br />

complete. The rule takes no arguments.<br />

Disco<strong>Discovery</strong>CycleComplete;<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


<strong>Discovery</strong>_<strong>Guide</strong>IX.fm August 16, 2006 4:06 pm<br />

Index<br />

Symbols<br />

$NCHOME, see NCHOME<br />

%NCHOME%, see NCHOME<br />

A<br />

Active Object Classes, see AOCs<br />

AND (OQL) 482<br />

AOCs<br />

application extensions 412<br />

architecture of 409<br />

backing up 409<br />

data dictionary 411<br />

editing 369<br />

instantiate rule 411<br />

instantiation 402<br />

introduction to 400<br />

menu methods 414<br />

multiple inheritance 402<br />

overview of components 410<br />

structure of 410–414<br />

super class 411<br />

syntax of 410<br />

visual icon 414<br />

architecture, <strong>Precision</strong> Server 12<br />

ARP helper<br />

configuring 289<br />

database 289<br />

AUTH<br />

command line attributes 73<br />

database 82<br />

introduction to 70<br />

prerequisites 73<br />

starting 73<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 559<br />

B<br />

blackout state 35<br />

broadcast pinging 222<br />

C<br />

CLASS<br />

see also AOCs<br />

command line options 403<br />

database 405<br />

introduction to 400<br />

prerequisites 404<br />

starting up 403<br />

communication, between processes 15, 321<br />

components<br />

binary names 56<br />

dependencies 56<br />

service names 171<br />

CONFIG<br />

command line options 162<br />

starting 162<br />

configuration files<br />

CTRL 49<br />

definition 18<br />

DISCO 23<br />

discovery agents 272<br />

domain-specific 18<br />

finders 220<br />

helpers 286<br />

TrapMux 418<br />

configuring advanced discovery parameters 133<br />

configuring DNS helpers 127<br />

configuring Network Address Translation 130<br />

containment model<br />

altering 362<br />

generating 362<br />

Index


Index<br />

introduction to 359<br />

logical containment 360<br />

physical containment 359<br />

re-instantiating 368<br />

VLAN trunking 361<br />

VLANs 360<br />

Context agent<br />

enabling 33<br />

within the discovery process 28<br />

core components<br />

and the <strong>Precision</strong> Server 12<br />

core view of MPLS network 327<br />

CTRL<br />

command line options 59<br />

configuration files 49<br />

database 64<br />

dynamic configuration changes 63<br />

introduction to 48<br />

managed processes 49, 56<br />

prerequisites 59<br />

querying databases of 60<br />

setting up domains 49<br />

starting 59<br />

terminating services 62<br />

unmanaged processes 49, 57<br />

D<br />

daemons (Helper System) 287<br />

data dictionary 411<br />

databases<br />

see also OQL<br />

agents 424, 448<br />

ARP helper 289<br />

CLASS 405<br />

CTRL 64<br />

Details agent 457<br />

DISCO configuration 424, 431<br />

discovery scope 424, 442<br />

DNS helper 309<br />

failover 426<br />

finders 425, 454<br />

MODEL 372<br />

querying, see OQL Service Provider<br />

rediscovery 425, 475<br />

restoring using STORE 380<br />

SNMP helper 299<br />

stitchers 424, 450<br />

STORE 381<br />

Telnet helper 305<br />

topology 425, 470<br />

tracking discovery 425, 460<br />

TrapMux 419<br />

dependencies, component 56<br />

devices, removing from the network 45<br />

DISCO<br />

command line options 178<br />

components of 23<br />

configuration databases 431<br />

configuration files 23, 181<br />

prerequisites 179<br />

starting 178<br />

discovery<br />

see also finders , tracking the discovery , stitchers<br />

blackout state 35<br />

completion criteria 205<br />

configuration methods 86<br />

configuration using Network <strong>Discovery</strong> GUI 96<br />

configuring advanced discovery parameters 133<br />

configuring DNS helpers 127<br />

configuring Network Address Translation 130<br />

context-sensitive<br />

enabling 33<br />

process flow 28<br />

creating the topology, process flow of 31<br />

data collection stage 35<br />

data processing stage 37<br />

defining exceptions to 34<br />

discovering associated device addresses, process<br />

flow of 29<br />

discovering device connectivity, process flow of 30<br />

discovering device details, process flow of 27<br />

discovering device existence, process flow of 26<br />

enabling discovery agents 119<br />

560 <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


multiphasing 38<br />

overview 25–33<br />

phases 35<br />

rediscovery 40<br />

restricting 34<br />

seeding 100<br />

seeding File finder 103<br />

seeding Ping finder 100<br />

seeding Sniffer finder 106<br />

seeding Trap finder 109<br />

setting discovery filters 120<br />

setting SNMP access 111<br />

setting Telnet access 114<br />

stages 35<br />

starting 190<br />

discovery agents<br />

activating 184<br />

agentTemplate database 241<br />

Associated Address agent 240<br />

ATM 252<br />

CDP 259<br />

configuring MPLS agents 329<br />

Context agents 261<br />

database template 241<br />

deactivating 186<br />

Details agent 240<br />

disabling 266<br />

discovering SPVCs 284<br />

enabling 265<br />

ethernet switches 243<br />

extra information 278<br />

FDDI 259<br />

filtering devices 272<br />

<strong>IP</strong> layer agents 267<br />

layer 2 269<br />

layer 3 249, 269<br />

MPLS 254<br />

MPLS scoping requirements 333<br />

MPLS telnet configuration 331, 332<br />

NAT 256<br />

networking layer 249<br />

partial matching 276<br />

protocol-specific 271<br />

selecting 267<br />

specialized agents 268<br />

standard agents 267<br />

task-specific 261<br />

triggers 32<br />

types 242<br />

discovery configuration<br />

Helper Server 186<br />

Ping finder 183<br />

scoping 183<br />

SNMP passwords 187<br />

task list 181<br />

telnet passwords 188<br />

<strong>Discovery</strong> <strong>Configuration</strong> tab 87<br />

discovery cycle 25<br />

discovery scope<br />

databases 442<br />

defining a single inclusion zone 98, 209<br />

defining exclusion zones 211<br />

defining multiple inclusion zones 210<br />

defining NAT zones 211<br />

defining using Network <strong>Discovery</strong> GUI 97<br />

devices with out of scope interfaces 218<br />

editing existing inclusion zone 100<br />

reasons for restricting 208<br />

restricting instantiation 214<br />

restricting interrogation 212<br />

sensitive devices 208<br />

specific devices 212<br />

types of scoping 208<br />

<strong>Discovery</strong> Status tab 91<br />

DNS helper<br />

configuring 290<br />

database 290<br />

domains<br />

domain-specific configuration files 18<br />

introduction to 18<br />

multiple 50<br />

multiple domains on Windows 54<br />

single 49<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 561<br />

Index


Index<br />

E<br />

single domain on Windows 52<br />

edge view of MPLS network 327<br />

enabling discovery agents 119<br />

eval statement 509<br />

advanced use 513<br />

concatenating lists 514<br />

containment model, evaluating 515<br />

deleting data from a list 514<br />

keywords 513<br />

performing a lookup 515<br />

quotation marks 511<br />

syntax 510<br />

Extreme devices, discovering 271<br />

F<br />

failover<br />

database 426<br />

enabling 426<br />

File finder<br />

configuration files 228<br />

database 228<br />

parse rules 229<br />

parsing files 229<br />

verifying device existence 232<br />

finders<br />

configuration files 220<br />

introduction to 220<br />

forcing rediscovery 44<br />

full discovery<br />

overview 138<br />

running 139<br />

full rediscovery<br />

running 139<br />

H<br />

Helper manager, see Helper System<br />

Helper Server, see Helper System<br />

Helper System<br />

command line 288<br />

configuration file 287<br />

configuring 289<br />

connecting to different subnets 319<br />

daemons 287<br />

databases 307<br />

dynamic timeouts 287<br />

Helper manager 287<br />

introduction to 286<br />

operation 287<br />

starting 288<br />

static timeout 287<br />

telnet access 303<br />

helpers, see Helper System<br />

562 <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

I<br />

instantiate rule 411<br />

instantiation 13, 402<br />

L<br />

label-switched path, see LSP<br />

layer 2 VPNs 328<br />

LSP-based MPLS discovery 330<br />

M<br />

message bus 14<br />

methods for MPLS discovery 330<br />

minimum discovery configuration requirements 97<br />

MODEL<br />

command line options 357<br />

databases 372<br />

introduction to 356<br />

prerequisites 358<br />

querying databases 363<br />

starting 357<br />

MONITOR <strong>Configuration</strong> tool 400


MPLS discovery<br />

configuring 329<br />

configuring stitchers 335<br />

core view 327<br />

edge view 327<br />

LSP 330<br />

methods 330<br />

overview 254, 326<br />

psuedowires 328<br />

route target 330<br />

scoping requirements 333<br />

Telnet agents configuration 331, 332<br />

multicast<br />

changing the address 17, 323<br />

communication 15, 321<br />

pinging 222<br />

multiphasing 38<br />

multiple inheritance 402<br />

N<br />

NAT, see Network Address Translation<br />

NCHOME 10, 23, 52, 72, 180, 220, 287, 335, 346, 358<br />

ncp_auth, see AUTH<br />

ncp_class, see CLASS<br />

ncp_config, see CONFIG<br />

ncp_ctrl, see CTRL<br />

ncp_d_helpserv, see Helper Server<br />

ncp_df_file, see File finder<br />

ncp_df_ping, see Ping finder<br />

ncp_df_ping, see Ping finder<br />

ncp_df_sniffer, see Sniffer finder<br />

ncp_df_trap, see Trap finder<br />

ncp_dh_arp, see ARP helper<br />

ncp_dh_dns, see DNS helper<br />

ncp_dh_snmp, see SNMP helper<br />

ncp_dh_telnet, see Telnet helper<br />

ncp_disco, see DISCO<br />

ncp_discoconfig, see <strong>Discovery</strong> <strong>Configuration</strong> Tool<br />

ncp_install_services 51<br />

ncp_model, see MODEL<br />

ncp_monitorconfig, see MONITOR <strong>Configuration</strong> Tool<br />

ncp_oql, see OQL Service Provider<br />

ncp_store, see STORE<br />

ncp_trapmux, see TrapMux<br />

ncp_userconfig, see User <strong>Configuration</strong> Tool<br />

<strong>Netcool</strong> GUI Foundation<br />

and the Network <strong>Discovery</strong> GUI 86<br />

and the OQL Workbench 167<br />

definition 86<br />

<strong>Netcool</strong> Suite home directory, see NCHOME<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong><br />

core components 12<br />

Network Address Translation<br />

configuring discovery 346<br />

configuring trap handling 347<br />

containment model 352<br />

defining address spaces 346<br />

discovery process flow 344<br />

discovery restrictions 343<br />

dynamic 342<br />

enabling translation 346<br />

overview 342<br />

selecting agents 348<br />

static 342<br />

viewing NAT environments 353<br />

Network <strong>Discovery</strong> GUI<br />

access using <strong>Precision</strong> Admin page 87<br />

accessing 86<br />

and the <strong>Netcool</strong> GUI Foundation 86<br />

configuring advanced discovery parameters 133<br />

configuring DNS helpers 127<br />

configuring Network Address Translation 130<br />

data input buttons 90<br />

defining discovery scope 97<br />

description of user interface 89<br />

<strong>Discovery</strong> <strong>Configuration</strong> toolbar 88<br />

enabling discovery agents 119<br />

limitations for context-sensitive discovery 33<br />

minimum requirements for discovery 97<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 563<br />

Index


Index<br />

online help 88<br />

overview 86<br />

rediscovery 138<br />

running a full discovery 139<br />

running a full rediscovery 139<br />

running a partial rediscovery 140<br />

seeding a discovery 100<br />

seeding File finder 103<br />

seeding Ping finder 100<br />

seeding Sniffer finder 106<br />

seeding Trap finder 109<br />

setting discovery filters 120<br />

setting SNMP access 111, 114<br />

Status and Control toolbar 91<br />

wizard 86, 143–161<br />

NGF, see <strong>Netcool</strong> GUI Foundation<br />

NOT NULL (OQL) 487<br />

O<br />

object modelling 400<br />

objects and varbinds 486<br />

online help for Network <strong>Discovery</strong> GUI 88<br />

operators (OQL) 481<br />

OQL<br />

AND 482<br />

column constraints 487<br />

comparison operators 495<br />

conditional tests 495<br />

counter 487<br />

creating a database or table 485<br />

datatypes 485<br />

default values 487<br />

deleting a database or table 508<br />

deleting a record 507<br />

general rules 480<br />

inserting data into a table 490<br />

introduction to 480<br />

list and object datatypes 491<br />

logical operators 482<br />

NOT NULL 487<br />

objects and varbinds 486<br />

operators, list of 481<br />

OR 482<br />

PRIMARY KEY 487<br />

punctuation 481<br />

quotation marks 480<br />

selecting data from a table 493<br />

selecting data into another table 501<br />

showing the databases 505<br />

SQL, key differences 480<br />

subqueries 498<br />

timestamp 488<br />

unique 487<br />

updating a record 503<br />

OQL Service Provider<br />

command line history 172<br />

command line options 169<br />

listing databases 173<br />

running a query from the command line 172<br />

service names 171<br />

starting 169<br />

OQL Workbench<br />

accessing 167<br />

and the <strong>Netcool</strong> GUI Foundation 167<br />

OQL Workbench tab 167<br />

OR (OQL) 482<br />

564 <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

P<br />

partial discovery<br />

overview 138<br />

partial matching 276<br />

partial rediscovery<br />

running 140<br />

permissions<br />

user profile 81<br />

Ping finder<br />

broadcast pinging 222<br />

configuration files 221<br />

database 221, 227<br />

multicast pinging 222<br />

scoping 224


seeding 222<br />

status 192<br />

Ping helper<br />

configuring 291<br />

database 291<br />

<strong>Precision</strong> Admin page<br />

access to MySQL database settings 87<br />

access to Network <strong>Discovery</strong> GUI 87<br />

access to OQL Workbench 87, 167<br />

<strong>Discovery</strong> <strong>Configuration</strong> tab 87<br />

<strong>Discovery</strong> Status tab 91<br />

OQL Workbench tab 167<br />

precompiled stitchers 518<br />

PRIMARY KEY (OQL) 487<br />

process controller, see CTRL<br />

psuedowires 328<br />

Q<br />

quotation marks<br />

eval statements 511<br />

OQL 480<br />

stitcher language 539<br />

R<br />

rediscovery 40<br />

databases 475<br />

forcing rediscoveries of particular devices 44<br />

full 40<br />

overview 138<br />

partial 40<br />

with the Network <strong>Discovery</strong> GUI 138<br />

route target-based MPLS discovery 330<br />

running a full discovery 139<br />

running a full rediscovery 139<br />

running a partial rediscovery 140<br />

S<br />

scope<br />

see also Ping finder 509<br />

introduction to 509<br />

seeding discovery 100<br />

seeding File finder 103<br />

seeding Ping finder 100<br />

seeding Sniffer finder 106<br />

seeding Trap finder 109<br />

service names 171<br />

Services<br />

Windows services run as specific user 52<br />

services, terminating 62<br />

setting discovery filters 120<br />

setting SNMP access 111, 114<br />

Sniffer finder<br />

configuration files 234<br />

database 234<br />

SNMP<br />

daemons (Helper System) 287<br />

versioning 302<br />

SNMP helper<br />

community string and device access<br />

configuration 298<br />

configuring 292<br />

database 292<br />

SPVCs, discovering 284<br />

SQL, and OQL 480<br />

stitcher language<br />

comments 538<br />

compiled stitchers 540<br />

datatypes 538<br />

for loop 545<br />

foreach loop 547<br />

if loop 546<br />

introduction to 518<br />

operator association 539<br />

operator precedence 539<br />

programming constructs 537<br />

quotation marks 539<br />

relational operators 538<br />

stitcher triggers 535<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 565<br />

Index


Index<br />

text-based discovery stitchers 540<br />

trigger conditions 540<br />

variable declaration 545<br />

variables 544<br />

while loop 546<br />

stitchers<br />

list of default discovery 521<br />

rules 536<br />

structure of 519<br />

triggers 32, 519<br />

STORE<br />

command line options 379<br />

configuring for event traffic 395<br />

configuring for topology traffic 392<br />

databases 381<br />

introduction to 378<br />

prerequisites 380<br />

restoring databases using 380<br />

starting 379<br />

super class 411<br />

T<br />

Telnet helper<br />

configuring 293<br />

databases 293<br />

password configuration 305<br />

terminating services 62<br />

TIB/Rendezvous 14<br />

topology<br />

creation, process flow of 31<br />

databases 372, 470<br />

prerequisites for accessing 363<br />

tracking the discovery<br />

completion 205<br />

databases 460<br />

devices found by Details agent 196<br />

devices found by finders 195<br />

NAT status 193<br />

Ping finder status 192<br />

specific devices 202<br />

status 192<br />

stitchers 194<br />

which agents are enabled 193<br />

Trap finder<br />

database 236<br />

description of 236<br />

trap descriptions 236<br />

TrapMux<br />

command line options 417<br />

configuring 418<br />

database 419<br />

introduction to 416<br />

replaying traps 422<br />

starting 417<br />

traps<br />

description of 236<br />

forwarding 416<br />

multiplexing 416<br />

replaying 422<br />

566 <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong><br />

U<br />

User <strong>Configuration</strong> Tool<br />

introduction to 70<br />

starting 74<br />

user management 70<br />

with the <strong>Netcool</strong> GUI Foundation 70<br />

user profiles<br />

creating and editing 78<br />

default 72<br />

introduction to 71<br />

permissions 81<br />

users<br />

AUTH and 70<br />

authentication 70<br />

configuring permissions 71<br />

creating 71<br />

creating and editing 75<br />

default 72<br />

introduction to 70<br />

profiles 71


V<br />

VLANs<br />

naming convention 360<br />

trunking 361<br />

W<br />

Windows<br />

configuring domains 51<br />

handling processes as services 51<br />

overview 20<br />

running services as a specific user 52<br />

setting up a single domain 52<br />

setting up multiple domains 54<br />

wizard-based network discovery 86, 143–161<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 567<br />

Index


Index<br />

568 <strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>


ackmatter.fm August 16, 2006<br />

Contact Information<br />

Corporate<br />

Region Address Telephone Fax World Wide Web<br />

USA Micromuse Inc. (HQ)<br />

650 Townsend Street<br />

San Francisco<br />

CA 94103<br />

USA<br />

Europe Micromuse Ltd.<br />

Disraeli House<br />

90 Putney Bridge Road<br />

London SW18 1DA<br />

United Kingdom<br />

Asia-Pacific Micromuse Ltd.<br />

Level 25<br />

77 St Georges Terrace<br />

Perth WA 6000<br />

Australia<br />

Technical Support<br />

1-800-<strong>Netcool</strong> (638 2665)<br />

+1 415 568 9800<br />

Region Telephone Fax<br />

USA 1-800-<strong>Netcool</strong> (800 638 2665)<br />

+1 415 568 9800 (San Francisco)<br />

+1 415 568 9801 http://www.micromuse.com<br />

+44 (0) 20 8875 9500 +44 (0) 20 8875 9995 http://www.micromuse.co.uk<br />

+61 (0) 8 9213 3400 +61 (0) 8 9325 5030 http://www.micromuse.com.au<br />

+1 415 568 9801<br />

Europe +44 (0) 20 8877 0073 (London, UK) +44 (0) 20 8875 0991<br />

Asia-Pacific +61 (0) 8 9213 3470 (Perth, Australia)<br />

Online<br />

+10 800 852 1012 (North China)<br />

+10 800 152 1012 (South China)<br />

+61 (0) 8 9486 1116<br />

Team E-Mail World Wide Web<br />

Licensing Temporary Licenses: temp.licensing@micromuse.com<br />

Permanent Licenses: perm.licensing@micromuse.com<br />

support.micromuse.com/helpdesk/licenses<br />

Support support@micromuse.com support.micromuse.com<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong> 569


Contact Information<br />

570<br />

<strong>Netcool</strong>/<strong>Precision</strong> <strong>IP</strong> <strong>3.6</strong> <strong>Discovery</strong> <strong>Configuration</strong> <strong>Guide</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!