Cameron Laird's personal notes on Scotty
"I've found scotty to be the most impressive snmp package of
any language I've been able to locate, for any language. It's powerful
and easy to use. I've been using it at work for around 4 years, and I
can't say enough positive things about it.": these unsolicited
remarks from Rob Seeger are typical for those who have experienced
Scotty for themselves.
Late-breaking news
I currently use a
3.0.0
snapshot (which Juergen categorizes as "in general not ready and
thus should be considered to be alpha software")
from the
development
archive. This particular version is
still labeled 2.1.10. 2.1.10 itself doesn't work
easily with Tcl after 8.0x. Several of the nominal
mirrors
in fact are behind the times. Also, as of 2000, anonymous CVS
has become the correct access method, rather than through the
FTP repositories. [More on this, later.] The
installable
Win* snapshot from October 1999
works for me on simple tasks; more on this, later ...
Juergen calls it a "beta", of course, which means it's
a second or third update to a final, by the standards
of most organizations.
Introduction
As Doug Hughes <doug@eng.auburn.edu>
put it in <DC2JIw.Jry@mail.auburn.edu>,
Juergen Schoenwaelder's
scotty
is a "network rapid
prototypers dream tool in combination with
tcl/tk", for
"it does rpc, icmp, tcp, udp, and ... portmap probes"
along with
SNMP,
CMIP,
DNS queries, and job scheduling.
Juergen gives an
overview
of the available SNMP extensions, a (PostScript-ized)
description
of scotty capabilities, a
home page for the project,
and a
FAQ.
I'm currently working on a
course
called "Network Management with Scotty".
Juergen's in a peculiar position as creator of a major project.
He's deeply knowledgeable about
network
management, has marvelous plans for Scotty's enhancement, and
is responsive in maintaining it. At the same time, other
commitments permit him to invest little in new Scotty work
(8 February 2000):
The time I have to work on the scotty package is very limited. The
current CVS version is based on Tcl/Tk 8.2. There are still some
places where mutex locks are missing. But the goal is to make scotty
Tcl thread safe. Another work item is the replacement of the current
MIB parser with the libsmi. And then there are lots of minor things
that need work, such as a replacement for the udp command which will
work with binary data, a replacement of the % substitution mechanism,
and full SNMPv3 support. Since I will not have the time to do all this
in the foreseeable future, I will probably do these things in pieces.
Regarding tkined, I plan to integrate some of the patches that are
floating around. But I won't change it much since it has to be split
into a client/server application. The core is already there as part of
the Tnm::map command. What is missing is a communication layer so that
you can plug Tnm::maps together with automatic synchronization and
event forwarding. I have no clue whether this will ever happen.
KM Newnham presents the marvelous public service of
"Getting
Started with tkined/scotty", a network-management primer.
Why scotty, and not snmptcl, for
network
management application development? I know Juergen answers
his e-mail, that he tracks revisions in base Tcl, and that scotty
works; moreover, it has extensive URL-able documentation. At
least the latter is not true for snmptcl. On the other hand,
Rose does employ snmptcl in at least two of his books, and Juergen
reports that there is an active group around Rose advancing the
tool.
Why Tcl? Juergen explains
that,
too.
[Explain what happened to FAQ.]
[Explain MIB support. Show which are supported, and how to do more.]
[Explain versions.]
Various extensions and platform considerations
I more-or-less regularly use Scotty from HP-UX,
Solaris, SunOS,
BSD/386,
AIX, and Digital Unix; I'm now (mid-1997)
working mostly with Tcl7.6, Tk4.2, and
Scotty2.1.5, a combination which requires at least
a
minimum of source modification.
I'm just starting with the Intel-based
WNT port. Note that Juergen supplies a current
porting.notes
in each distribution. Beyond the information there, I've found I
need to know that, for
- BSD/386 and other BSDs: the supplied <netinet/in.h>
is not properly guarded
for multiple #inclu-sions, so tnm/generic/tnm{Netdb,SunRpc}.c
must be adjusted. I typically
- sed -e "s?#include <netinet/in.h>?/* & */?"
/usr/include/rpc/rpc.h >../unix/replacement.h
- Similarly edit '<rpc/rpc.h>' to '"replacement.h"' in
tnm/generic/tnm{Netdb,SunRpc}.c
Also, tnm/generic/tnmDns.c doesn't find INADDR_LOOPBACK
where it expects, so I "#include <rpc/types.h>". Juergen
prefers
a
different work-around, which amounts to
"#define INADDR_LOOPBACK (u_long)0x7F000001" for this BSD mishap.
- many: for reasons that I'll detail later here, I often use
statically-linked
Scotty. Here's how I do it:
- Generate a statically-linked Tcl and Tk by starting with
"configure --disable-load ..."
- Comment out the
{ echo "configure: error: no shared linker ...}
in configure.
- Replace the "if (Tcl_PkgRequire( ... if ..." with
"if (Tnm_Init(interp) != TCL_OK) {"
in scotty.c
- Create libraries and a statically-linked scotty
either by hacking at the Makefile
by hand or by patching scotty-2.1.5/unix/Makefile.in
with
these diffs.
I also often embed Scotty functionality, sometimes so
completely as to include initialization init.tcl-s, MIBs,
and all object files. Perhaps I'll explain some day what
this involves.
Other extensions
Scotty was originally done as part of a larger project leading to
tkined.
The recommended
mailing
list for questions about Scotty is still named after tkined.
Ian Jarrett <etlinjt@etlxdmx.ericsson.se> and
<ian@batfink.netmc.com> has taken the natural step and
combined Expect and Scotty into
an application he calls
Beast.
I call this natural because it answers so many of the
questions that arise in "network interrogation and intelligent
configuration of nodes," as Mr. Jarrett puts it. [Update:
Beast, or at least my link to it, is not current. More on
this, in time.]
The new 7.5-compatible Scotty 2.1.0 has
a new -window session
option. You can for example specify a window of size 10 and the
protocol engine will make sure that no more that 10 async requests are
actually on the wire. If your script creates more than 10 requests,
scotty will queue them until the number of active requests drops below
10. This solution is transparent to the script which can create
hundreds of async requests if it likes to do so,
as Juergen explained in a letter to the mailing list.
The addinput patch to Tk, which provides callbacks for file events,
is compatible with scwish, but not required.
Web-accessibility
Yu Mingjian has written a
web-oriented network
managing extension to Scotty.
Implementation details
Scotty's CMIP services
employ the
OSIMIS
library (in its version 3.3?).
Reservations
Job scheduling is limited. Juergen has explained, "Jobs are
just a handy tool to describe things that should be done
at regular intervals. If the interpreter is busy doing
other things, the jobs are simply delayed." Jobs are
not threaded; only a single one can be scheduled at a
time. Much of what one wants from scheduling is thus
not available, but I think that's OK. It's more important
that the main line of scotty development be elsewhere.
Juergen has explained
one
limitation on display formats in a letter to the mailing list.
Other notes
Look in the examples directories; they're valuable. Also, remember
to use "tcpdump" and "snmp watch on".
Peter Maersk-Moller has provided a refined
ip_world.
Cameron
Laird's notes on
Scotty/claird@phaseit.net