diff options
Diffstat (limited to 'lib/snmp/doc')
103 files changed, 47647 insertions, 0 deletions
diff --git a/lib/snmp/doc/html/.gitignore b/lib/snmp/doc/html/.gitignore new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/lib/snmp/doc/html/.gitignore diff --git a/lib/snmp/doc/man3/.gitignore b/lib/snmp/doc/man3/.gitignore new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/lib/snmp/doc/man3/.gitignore diff --git a/lib/snmp/doc/man6/.gitignore b/lib/snmp/doc/man6/.gitignore new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/lib/snmp/doc/man6/.gitignore diff --git a/lib/snmp/doc/man7/.gitignore b/lib/snmp/doc/man7/.gitignore new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/lib/snmp/doc/man7/.gitignore diff --git a/lib/snmp/doc/pdf/.gitignore b/lib/snmp/doc/pdf/.gitignore new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/lib/snmp/doc/pdf/.gitignore diff --git a/lib/snmp/doc/src/MIB_mechanism.fig b/lib/snmp/doc/src/MIB_mechanism.fig new file mode 100644 index 0000000000..38d4c7c5e6 --- /dev/null +++ b/lib/snmp/doc/src/MIB_mechanism.fig @@ -0,0 +1,73 @@ +#FIG 3.1 +Landscape +Center +Inches +1200 2 +6 1725 525 3375 1875 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 3000 600 3000 1800 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3000 600 3300 600 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3000 1800 3300 1800 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1725 1200 3000 1200 +-6 +6 1725 2925 3375 4275 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 3000 3000 3000 4200 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3000 3000 3300 3000 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 3000 4200 3300 4200 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 1725 3600 3000 3600 +-6 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 5250 600 5250 1800 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 4950 1800 5250 1800 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 4950 600 5250 600 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 5250 1200 6000 1200 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1800 2400 3300 2400 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 4950 2400 7800 2400 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 7200 1200 7800 1200 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 4950 3000 7800 3000 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 4950 4200 7800 4200 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 1800 4800 3300 4800 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 6000 4800 7800 4800 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 7800 1200 7800 4800 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 1 0 2 + 0 0 1.00 60.00 120.00 + 7800 2700 8400 2700 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 900 225 9450 225 9450 5175 900 5175 900 225 +4 0 -1 0 0 0 12 0.0000 4 135 315 1200 1275 who\001 +4 0 -1 0 0 0 12 0.0000 4 135 465 1200 2400 where\001 +4 0 -1 0 0 0 12 0.0000 4 180 870 6150 1200 groupName\001 +4 0 -1 0 0 0 12 0.0000 4 135 1020 3600 2400 contexrName\001 +4 0 -1 0 0 0 12 0.0000 4 135 315 1200 3600 who\001 +4 0 -1 0 0 0 12 0.0000 4 180 315 1275 4800 why\001 +4 0 -1 0 0 0 12 0.0000 4 135 810 8475 2700 viewName\001 +4 0 -1 0 0 0 12 0.0000 4 180 1095 3600 600 securityModel\001 +4 0 -1 0 0 0 12 0.0000 4 180 1065 3600 1800 securityName\001 +4 0 -1 0 0 0 12 0.0000 4 180 1095 3600 3000 securityModel\001 +4 0 -1 0 0 0 12 0.0000 4 180 1035 3600 4200 securityLevel\001 +4 0 -1 0 0 0 12 0.0000 4 180 2175 3600 4800 viewType (read/write/notify)\001 diff --git a/lib/snmp/doc/src/MIB_mechanism.gif b/lib/snmp/doc/src/MIB_mechanism.gif Binary files differnew file mode 100644 index 0000000000..2a25c6e44f --- /dev/null +++ b/lib/snmp/doc/src/MIB_mechanism.gif diff --git a/lib/snmp/doc/src/MIB_mechanism.ps b/lib/snmp/doc/src/MIB_mechanism.ps new file mode 100644 index 0000000000..e45e7d0bad --- /dev/null +++ b/lib/snmp/doc/src/MIB_mechanism.ps @@ -0,0 +1,217 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: bild1.fig +%%Creator: fig2dev Version 3.1 Patchlevel 2 +%%CreationDate: Tue Dec 28 16:12:39 1999 +%%For: nibe@gundor (Bengt Nilsson, ETX/DN/SP) +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 515 300 +%%Pages: 0 +%%BeginSetup +%%IncludeFeature: *PageSize Letter +%%EndSetup +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-53.0 312.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def +%%EndProlog + +$F2psBegin +10 setmiterlimit +n 0 792 m 0 0 l 612 0 l 612 792 l cp clip + 0.06000 0.06000 sc +7.500 slw +% Polyline +n 3000 600 m 3000 1800 l gs col-1 s gr +% Polyline +gs clippath +3153 570 m 3273 600 l 3153 630 l 3315 630 l 3315 570 l cp clip +n 3000 600 m 3300 600 l gs col-1 s gr gr + +% arrowhead +n 3153 570 m 3273 600 l 3153 630 l col-1 s +% Polyline +gs clippath +3153 1770 m 3273 1800 l 3153 1830 l 3315 1830 l 3315 1770 l cp clip +n 3000 1800 m 3300 1800 l gs col-1 s gr gr + +% arrowhead +n 3153 1770 m 3273 1800 l 3153 1830 l col-1 s +% Polyline +n 1725 1200 m 3000 1200 l gs col-1 s gr +% Polyline +n 3000 3000 m 3000 4200 l gs col-1 s gr +% Polyline +gs clippath +3153 2970 m 3273 3000 l 3153 3030 l 3315 3030 l 3315 2970 l cp clip +n 3000 3000 m 3300 3000 l gs col-1 s gr gr + +% arrowhead +n 3153 2970 m 3273 3000 l 3153 3030 l col-1 s +% Polyline +gs clippath +3153 4170 m 3273 4200 l 3153 4230 l 3315 4230 l 3315 4170 l cp clip +n 3000 4200 m 3300 4200 l gs col-1 s gr gr + +% arrowhead +n 3153 4170 m 3273 4200 l 3153 4230 l col-1 s +% Polyline +n 1725 3600 m 3000 3600 l gs col-1 s gr +% Polyline +n 5250 600 m 5250 1800 l gs col-1 s gr +% Polyline +n 4950 1800 m 5250 1800 l gs col-1 s gr +% Polyline +n 4950 600 m 5250 600 l gs col-1 s gr +% Polyline +gs clippath +5853 1170 m 5973 1200 l 5853 1230 l 6015 1230 l 6015 1170 l cp clip +n 5250 1200 m 6000 1200 l gs col-1 s gr gr + +% arrowhead +n 5853 1170 m 5973 1200 l 5853 1230 l col-1 s +% Polyline +gs clippath +3153 2370 m 3273 2400 l 3153 2430 l 3315 2430 l 3315 2370 l cp clip +n 1800 2400 m 3300 2400 l gs col-1 s gr gr + +% arrowhead +n 3153 2370 m 3273 2400 l 3153 2430 l col-1 s +% Polyline +n 4950 2400 m 7800 2400 l gs col-1 s gr +% Polyline +n 7200 1200 m 7800 1200 l gs col-1 s gr +% Polyline +n 4950 3000 m 7800 3000 l gs col-1 s gr +% Polyline +n 4950 4200 m 7800 4200 l gs col-1 s gr +% Polyline +gs clippath +3153 4770 m 3273 4800 l 3153 4830 l 3315 4830 l 3315 4770 l cp clip +n 1800 4800 m 3300 4800 l gs col-1 s gr gr + +% arrowhead +n 3153 4770 m 3273 4800 l 3153 4830 l col-1 s +% Polyline +n 6000 4800 m 7800 4800 l gs col-1 s gr +% Polyline +n 7800 1200 m 7800 4800 l gs col-1 s gr +% Polyline +gs clippath +8253 2670 m 8373 2700 l 8253 2730 l 8415 2730 l 8415 2670 l cp clip +n 7800 2700 m 8400 2700 l gs col-1 s gr gr + +% arrowhead +n 8253 2670 m 8373 2700 l 8253 2730 l col-1 s +% Polyline +n 900 225 m 9450 225 l 9450 5175 l 900 5175 l cp gs col-1 s gr +/Times-Roman ff 180.00 scf sf +1200 1275 m +gs 1 -1 sc (who) col-1 sh gr +/Times-Roman ff 180.00 scf sf +1200 2400 m +gs 1 -1 sc (where) col-1 sh gr +/Times-Roman ff 180.00 scf sf +6150 1200 m +gs 1 -1 sc (groupName) col-1 sh gr +/Times-Roman ff 180.00 scf sf +3600 2400 m +gs 1 -1 sc (contexrName) col-1 sh gr +/Times-Roman ff 180.00 scf sf +1200 3600 m +gs 1 -1 sc (who) col-1 sh gr +/Times-Roman ff 180.00 scf sf +1275 4800 m +gs 1 -1 sc (why) col-1 sh gr +/Times-Roman ff 180.00 scf sf +8475 2700 m +gs 1 -1 sc (viewName) col-1 sh gr +/Times-Roman ff 180.00 scf sf +3600 600 m +gs 1 -1 sc (securityModel) col-1 sh gr +/Times-Roman ff 180.00 scf sf +3600 1800 m +gs 1 -1 sc (securityName) col-1 sh gr +/Times-Roman ff 180.00 scf sf +3600 3000 m +gs 1 -1 sc (securityModel) col-1 sh gr +/Times-Roman ff 180.00 scf sf +3600 4200 m +gs 1 -1 sc (securityLevel) col-1 sh gr +/Times-Roman ff 180.00 scf sf +3600 4800 m +gs 1 -1 sc (viewType \(read/write/notify\)) col-1 sh gr +$F2psEnd +rs diff --git a/lib/snmp/doc/src/Makefile b/lib/snmp/doc/src/Makefile new file mode 100644 index 0000000000..e1e3c7f41a --- /dev/null +++ b/lib/snmp/doc/src/Makefile @@ -0,0 +1,349 @@ +#-*-makefile-*- ; force emacs to enter makefile-mode + +# %CopyrightBegin% +# +# Copyright Ericsson AB 1997-2009. All Rights Reserved. +# +# The contents of this file are subject to the Erlang Public License, +# Version 1.1, (the "License"); you may not use this file except in +# compliance with the License. You should have received a copy of the +# Erlang Public License along with this software. If not, it can be +# retrieved online at http://www.erlang.org/. +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# %CopyrightEnd% + +include $(ERL_TOP)/make/target.mk +include $(ERL_TOP)/make/$(TARGET)/otp.mk + +# ---------------------------------------------------- +# Application version +# ---------------------------------------------------- +include ../../vsn.mk +VSN = $(SNMP_VSN) +APPLICATION=snmp + +# ---------------------------------------------------- +# Include dependency +# ---------------------------------------------------- + +ifndef DOCSUPPORT +include make.dep +endif + +# ---------------------------------------------------- +# Release directory specification +# ---------------------------------------------------- +RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN) + +# ---------------------------------------------------- +# Target Specs +# ---------------------------------------------------- + +MIBSDIR = ../../mibs +include files.mk + +# ---------------------------------------------------- + +HTML_APP_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) +XML_PART_FILE2 = $(XML_PART_FILES) notes_history.xml +HTML_PART_FILES = \ + ../html/notes_history.html \ + $(XML_PART_FILES:%.xml=$(HTMLDIR)/%.html) + +HTML_FILES = \ + $(HTML_APP_FILES) \ + $(HTML_PART_FILES) + +XML_ERRS = $(XML_FILES:%.xml=%.latex.xmls_errs) \ + $(XML_FILES:%.xml=%.html.xmls_errs) + +XML_OUTPUT = $(XML_FILES:%.xml=%.latex.xmls_output) \ + $(XML_FILES:%.xml=%.html.xmls_output) + +INFO_FILE = ../../info + +HTML_REF3_FILES = $(XML_REF3_FILES:%.xml=$(HTMLDIR)/%.html) +HTML_REF6_FILES = $(XML_REF6_FILES:%.xml=$(HTMLDIR)/%.html) +HTML_CHAP_FILES = $(XML_CHAPTER_FILES:%.xml=$(HTMLDIR)/%.html) + +EXTRA_FILES = summary.html.src \ + $(DEFAULT_HTML_FILES) \ + $(HTML_REF3_FILES) \ + $(HTML_REF6_FILES) \ + $(HTML_CHAP_FILES) + + +MAN7DIR = $(DOCDIR)/man7 + +MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3) +MAN6_FILES = $(XML_REF6_FILES:%_app.xml=$(MAN6DIR)/%.6) +MAN7_FILES = $(MIB_FILES:$(MIBSDIR)/%.mib=$(MAN7DIR)/%.7) + +ifdef DOCSUPPORT + +HTML_REF_MAN_FILE = $(HTMLDIR)/index.html + +TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf + +else + +TEX_FILES_BOOK = \ + $(BOOK_FILES:%.xml=%.tex) +TEX_FILES_REF_MAN = \ + $(XML_REF3_FILES:%.xml=%.tex) \ + $(XML_REF6_FILES:%.xml=%.tex) \ + $(XML_APPLICATION_FILES:%.xml=%.tex) +TEX_PART_FILES = $(XML_PART_FILES:%.xml=%.tex) +TEX_FILES_USERS_GUIDE = \ + $(XML_CHAPTER_FILES:%.xml=%.tex) + +TOP_PDF_FILE = snmp-$(VSN).pdf +TOP_PS_FILE = snmp-$(VSN).ps + +$(TOP_PDF_FILE): book.dvi ../../vsn.mk + @echo "building $(TOP_PDF_FILE)" + $(DVI2PS) $(DVIPS_FLAGS) -f $< | $(DISTILL) $(DISTILL_FLAGS) > $@ + +$(TOP_PS_FILE): book.dvi ../../vsn.mk + @echo "building $(TOP_PS_FILE)" + $(DVI2PS) $(DVIPS_FLAGS) -f $< > $@ + +TOP_HTML_FILES = $(INDEX_TARGET) + +endif + +INDEX_FILE = index.html +INDEX_SRC = $(INDEX_FILE).src +INDEX_TARGET = $(DOCDIR)/$(INDEX_FILE) + +GIF_TARGETS = $(GIF_FILES:%=$(HTMLDIR)/%) + + +# ---------------------------------------------------- +# FLAGS +# ---------------------------------------------------- +XML_FLAGS += +DVIPS_FLAGS += + +# ---------------------------------------------------- +# Targets +# ---------------------------------------------------- +$(HTMLDIR)/%.gif: %.gif # Copy them to ../html + $(INSTALL_DATA) $< $@ + +ifdef DOCSUPPORT + +docs: pdf html man + +ldocs: local_docs $(INDEX_TARGET) + +$(TOP_PDF_FILE): $(XML_FILES) + +pdf: $(TOP_PDF_FILE) + +html: gifs $(HTML_REF_MAN_FILE) + +clean clean_docs: clean_html clean_man clean_pdf + rm -f errs core *~ + +else + +ifeq ($(DOCTYPE),pdf) +docs: pdf +else +ifeq ($(DOCTYPE),ps) +docs: ps +else +docs: html gifs man +endif +endif + +pdf: $(TOP_PDF_FILE) + +ps: $(TOP_PS_FILE) + +html: $(HTML_FILES) $(TOP_HTML_FILES) gifs + +html2: gifs $(TOP_HTML_FILES) $(HTML_FILES) $(HTML_REF3_FILES) $(HTML_REF6_FILES) $(HTML_CHAP_FILES) + +clean: clean_tex clean_html clean_man clean_docs + + +clean_tex: + @echo "cleaning tex:" + rm -f $(TEX_FILES_USERS_GUIDE) + rm -f $(TEX_FILES_REF_MAN) + rm -f $(TEX_PART_FILES) + rm -f $(TEX_FILES_BOOK) + +clean_docs: + @echo "cleaning docs:" + rm -f $(TOP_PDF_FILE) + rm -f $(TOP_PS_FILE) + rm -f core $(LATEX_CLEAN) + + +$(HTML_PART_FILES): notes.xml + +endif + +$(INDEX_TARGET): $(INDEX_SRC) ../../vsn.mk # Create top make file + sed -e 's;%VSN%;$(VSN);' $< > $@ # inserting version number + +man: man3 man6 man7 + +man3: $(MAN3_FILES) + +man6: $(MAN6_FILES) + +man7: $(MAN7_FILES) + +gifs: $(GIF_TARGETS) + +debug opt: + +clean_pdf: + @echo "cleaning pdf:" + rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo) + +clean_man: + @echo "cleaning man:" + rm -f $(MAN3DIR)/* + rm -f $(MAN6DIR)/* + rm -f $(MAN7DIR)/* + +clean_html: + @echo "cleaning html:" + rm -rf $(HTMLDIR)/* + +$(MAN7DIR)/%.7: $(MIBSDIR)/%.mib + @echo "processing $*" + @echo ".TH $* 7 \"SNMP\" \"Erlang/OTP\" \"MIB\"" > $@ + @echo ".nf" >> $@ + @cat $< >> $@ + @echo ".fi" >> $@ + @echo "" >> $@ + + +# ---------------------------------------------------- +# Release Target +# ---------------------------------------------------- +include $(ERL_TOP)/make/otp_release_targets.mk + +ifdef DOCSUPPORT + +release_docs_spec: docs + $(INSTALL_DIR) $(RELSYSDIR)/doc/pdf + $(INSTALL_DATA) $(TOP_PDF_FILE) $(RELSYSDIR)/doc/pdf + $(INSTALL_DIR) $(RELSYSDIR)/doc/html + $(INSTALL_DATA) $(HTMLDIR)/* \ + $(RELSYSDIR)/doc/html + $(INSTALL_DATA) $(INFO_FILE) $(RELSYSDIR) + $(INSTALL_DIR) $(RELEASE_PATH)/man/man3 + $(INSTALL_DATA) $(MAN3DIR)/* $(RELEASE_PATH)/man/man3 + $(INSTALL_DIR) $(RELEASE_PATH)/man/man6 + $(INSTALL_DATA) $(MAN3DIR)/* $(RELEASE_PATH)/man/man6 + $(INSTALL_DIR) $(RELEASE_PATH)/man/man7 + $(INSTALL_DATA) $(MAN3DIR)/* $(RELEASE_PATH)/man/man7 + +else + + +ifeq ($(DOCTYPE),pdf) +release_docs_spec: pdf + $(INSTALL_DIR) $(RELEASE_PATH)/pdf + $(INSTALL_DATA) $(TOP_PDF_FILE) $(RELEASE_PATH)/pdf +else +ifeq ($(DOCTYPE),ps) +release_docs_spec: ps + $(INSTALL_DIR) $(RELEASE_PATH)/ps + $(INSTALL_DATA) $(TOP_PS_FILE) $(RELEASE_PATH)/ps +else +release_docs_spec: docs + $(INSTALL_DIR) $(RELSYSDIR)/doc/html + $(INSTALL_DATA) $(GIF_FILES) $(EXTRA_FILES) $(HTML_FILES) \ + $(RELSYSDIR)/doc/html + $(INSTALL_DATA) $(INFO_FILE) $(RELSYSDIR) + $(INSTALL_DIR) $(RELEASE_PATH)/man/man3 + $(INSTALL_DATA) $(MAN3_FILES) $(RELEASE_PATH)/man/man3 + $(INSTALL_DIR) $(RELEASE_PATH)/man/man6 + $(INSTALL_DATA) $(MAN6_FILES) $(RELEASE_PATH)/man/man6 + $(INSTALL_DIR) $(RELEASE_PATH)/man/man7 + $(INSTALL_DATA) $(MAN7_FILES) $(RELEASE_PATH)/man/man7 + $(INSTALL_DATA) $(TOP_HTML_FILES) \ + $(RELSYSDIR)/doc +endif +endif + +endif + +release_spec: + +ifdef DOCSUPPORT +info: info_xml info_man info_html +else +info: info_xml info_man info_html info_tex + @echo "DVI2PS = $(DVI2PS)" + @echo "DVIPS_FLAGS = $(DVIPS_FLAGS)" + @echo "" + @echo "DISTILL = $(DISTILL)" + @echo "DISTILL_FLAGS = $(DISTILL_FLAGS)" +endif + +info_man: + @echo "man files:" + @echo "MAN3_FILES = $(MAN3_FILES)" + @echo "MAN6_FILES = $(MAN6_FILES)" + @echo "MAN7_FILES = $(MAN7_FILES)" + @echo "" + @echo "MIB_FILES = $(MIB_FILES)" + +info_xml: + @echo "xml files:" + @echo "XML_REF3_FILES = $(XML_REF3_FILES)" + @echo "XML_REF6_FILES = $(XML_REF6_FILES)" + @echo "XML_PART_FILES = $(XML_PART_FILES)" + @echo "XML_CHAPTER_FILES = $(XML_CHAPTER_FILES)" + @echo "XML_APPLICATION_FILES = $(XML_APPLICATION_FILES)" + @echo "" + @echo "BOOK_FILES = $(BOOK_FILES)" + @echo "" + @echo "XML_FILES = $(XML_FILES)" + @echo "XML_ERRS = $(XML_ERRS)" + @echo "XML_OUTPUT = $(XML_OUTPUT)" + +info_html: + @echo "html files:" + @echo "DOCDIR = $(DOCDIR)" + @echo "INDEX_FILE = $(INDEX_FILE)" + @echo "INDEX_SRC = $(INDEX_SRC)" + @echo "INDEX_TARGET = $(INDEX_TARGET)" + @echo "" + @echo "HTMLDIR = $(HTMLDIR)" + @echo "HTML_APP_FILES = $(HTML_APP_FILES)" + @echo "HTML_PART_FILES = $(HTML_PART_FILES)" + @echo "HTML_FILES = $(HTML_FILES)" + @echo "" + @echo "EXTRA_FILES = $(EXTRA_FILES)" + @echo "" + @echo "DEFAULT_HTML_FILES = $(DEFAULT_HTML_FILES)" + @echo "" + @echo "HTML_REF3_FILES = $(HTML_REF3_FILES)" + @echo "HTML_REF6_FILES = $(HTML_REF6_FILES)" + @echo "HTML_CHAP_FILES = $(HTML_CHAP_FILES)" + +info_tex: + @echo "tex files:" + @echo "TEX_FILES_USERS_GUIDE = $(TEX_FILES_USERS_GUIDE)" + @echo "TEX_FILES_REF_MAN = $(TEX_FILES_REF_MAN)" + @echo "TEX_PART_FILES = $(TEX_PART_FILES)" + @echo "TEX_FILES_BOOK = $(TEX_FILES_BOOK)" + +ifndef DOCSUPPORT +include depend.mk +endif diff --git a/lib/snmp/doc/src/book.gif b/lib/snmp/doc/src/book.gif Binary files differnew file mode 100644 index 0000000000..94b3868792 --- /dev/null +++ b/lib/snmp/doc/src/book.gif diff --git a/lib/snmp/doc/src/book.xml b/lib/snmp/doc/src/book.xml new file mode 100644 index 0000000000..2897d25d55 --- /dev/null +++ b/lib/snmp/doc/src/book.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE book SYSTEM "book.dtd"> + +<book xmlns:xi="http://www.w3.org/2001/XInclude"> + <header titlestyle="normal"> + <copyright> + <year>1997</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>Simple Network Management Protocol (SNMP)</title> + <prepared></prepared> + <docno></docno> + <date></date> + <rev></rev> + <file>book.xml</file> + </header> + <insidecover> + </insidecover> + <pagetext>Simple Network Management Protocol (SNMP)</pagetext> + <preamble> + <contents level="2"></contents> + </preamble> + <parts lift="no"> + <xi:include href="part.xml"/> + </parts> + <applications> + <xi:include href="ref_man.xml"/> + </applications> + <releasenotes> + <xi:include href="notes.xml"/> + </releasenotes> + <listofterms></listofterms> + <index></index> +</book> + diff --git a/lib/snmp/doc/src/depend.mk b/lib/snmp/doc/src/depend.mk new file mode 100644 index 0000000000..bf9833274d --- /dev/null +++ b/lib/snmp/doc/src/depend.mk @@ -0,0 +1,82 @@ +#-*-makefile-*- ; force emacs to enter makefile-mode + +# %CopyrightBegin% +# +# Copyright Ericsson AB 2004-2009. All Rights Reserved. +# +# The contents of this file are subject to the Erlang Public License, +# Version 1.1, (the "License"); you may not use this file except in +# compliance with the License. You should have received a copy of the +# Erlang Public License along with this software. If not, it can be +# retrieved online at http://www.erlang.org/. +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# %CopyrightEnd% + +$(HTMLDIR)/part_notes.html: \ + part_notes_history.xml \ + part_notes.xml \ + notes_history.xml \ + notes.xml + +$(HTMLDIR)/part.html: \ + part.xml \ + snmp_intro.xml \ + snmp_agent_funct_descr.xml \ + snmp_manager_funct_descr.xml \ + snmp_mib_compiler.xml \ + snmp_config.xml \ + snmp_agent_config_files.xml \ + snmp_manager_config_files.xml \ + snmp_impl_example_agent.xml \ + snmp_impl_example_manager.xml \ + snmp_instr_functions.xml \ + snmp_def_instr_functions.xml \ + snmp_agent_netif.xml \ + snmp_manager_netif.xml \ + snmp_audit_trail_log.xml \ + snmp_advanced_agent.xml \ + snmp_app_a.xml \ + snmp_app_b.xml + +$(HTMLDIR)/ref_man.html: \ + ref_man.xml \ + snmp_app.xml \ + snmp.xml \ + snmpc.xml \ + snmpa.xml \ + snmpa_conf.xml \ + snmpa_discovery_handler.xml \ + snmpa_error_report.xml \ + snmpa_error.xml \ + snmpa_error_io.xml \ + snmpa_error_logger.xml \ + snmpa_local_db.xml \ + snmpa_mpd.xml \ + snmpa_network_interface.xml \ + snmpa_network_interface_filter.xml \ + snmpa_notification_delivery_info_receiver.xml \ + snmpa_notification_filter.xml \ + snmpa_supervisor.xml \ + snmp_community_mib.xml \ + snmp_framework_mib.xml \ + snmp_generic.xml \ + snmp_index.xml \ + snmp_notification_mib.xml \ + snmp_pdus.xml \ + snmp_standard_mib.xml \ + snmp_target_mib.xml \ + snmp_user_based_sm_mib.xml \ + snmp_view_based_acm_mib.xml \ + snmpm.xml \ + snmpm_conf.xml \ + snmpm_mpd.xml \ + snmpm_network_interface.xml \ + snmpm_network_interface_filter.xml \ + snmpm_user.xml + + diff --git a/lib/snmp/doc/src/fascicules.xml b/lib/snmp/doc/src/fascicules.xml new file mode 100644 index 0000000000..0678195e07 --- /dev/null +++ b/lib/snmp/doc/src/fascicules.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE fascicules SYSTEM "fascicules.dtd"> + +<fascicules> + <fascicule file="part" href="part_frame.html" entry="no"> + User's Guide + </fascicule> + <fascicule file="ref_man" href="ref_man_frame.html" entry="yes"> + Reference Manual + </fascicule> + <fascicule file="part_notes" href="part_notes_frame.html" entry="no"> + Release Notes + </fascicule> + <fascicule file="" href="../../../../doc/print.html" entry="no"> + Off-Print + </fascicule> +</fascicules> + diff --git a/lib/snmp/doc/src/files.mk b/lib/snmp/doc/src/files.mk new file mode 100644 index 0000000000..293fb52ce0 --- /dev/null +++ b/lib/snmp/doc/src/files.mk @@ -0,0 +1,153 @@ +#-*-makefile-*- ; force emacs to enter makefile-mode + +# %CopyrightBegin% +# +# Copyright Ericsson AB 2001-2009. All Rights Reserved. +# +# The contents of this file are subject to the Erlang Public License, +# Version 1.1, (the "License"); you may not use this file except in +# compliance with the License. You should have received a copy of the +# Erlang Public License along with this software. If not, it can be +# retrieved online at http://www.erlang.org/. +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# %CopyrightEnd% + +XML_APPLICATION_FILES = \ + ref_man.xml + +XML_APP_REF3_FILES = \ + snmp.xml + +XML_COMP_REF3_FILES = \ + snmpc.xml + +XML_MISC_REF3_FILES = \ + snmp_pdus.xml + +XML_AGENT_REF3_FILES = \ + snmpa.xml \ + snmpa_conf.xml \ + snmpa_discovery_handler.xml \ + snmpa_error_report.xml \ + snmpa_error.xml \ + snmpa_error_io.xml \ + snmpa_error_logger.xml \ + snmpa_local_db.xml \ + snmpa_mpd.xml \ + snmpa_network_interface.xml \ + snmpa_network_interface_filter.xml \ + snmpa_notification_delivery_info_receiver.xml \ + snmpa_notification_filter.xml \ + snmpa_supervisor.xml \ + snmp_community_mib.xml \ + snmp_framework_mib.xml \ + snmp_generic.xml \ + snmp_index.xml \ + snmp_notification_mib.xml \ + snmp_standard_mib.xml \ + snmp_target_mib.xml \ + snmp_user_based_sm_mib.xml \ + snmp_view_based_acm_mib.xml + +XML_MANAGER_REF3_FILES = \ + snmpm.xml \ + snmpm_conf.xml \ + snmpm_mpd.xml \ + snmpm_network_interface.xml \ + snmpm_network_interface_filter.xml \ + snmpm_user.xml + +XML_REF3_FILES = \ + $(XML_APP_REF3_FILES) \ + $(XML_COMP_REF3_FILES) \ + $(XML_MISC_REF3_FILES) \ + $(XML_AGENT_REF3_FILES) \ + $(XML_MANAGER_REF3_FILES) + +XML_REF6_FILES = snmp_app.xml + +XML_PART_FILES = \ + part.xml \ + part_notes.xml \ + part_notes_history.xml + +XML_CHAPTER_FILES = \ + snmp_intro.xml \ + snmp_agent_funct_descr.xml \ + snmp_manager_funct_descr.xml \ + snmp_mib_compiler.xml \ + snmp_config.xml \ + snmp_agent_config_files.xml \ + snmp_manager_config_files.xml \ + snmp_impl_example_agent.xml \ + snmp_impl_example_manager.xml \ + snmp_instr_functions.xml \ + snmp_def_instr_functions.xml \ + snmp_agent_netif.xml \ + snmp_manager_netif.xml \ + snmp_audit_trail_log.xml \ + snmp_advanced_agent.xml \ + snmp_app_a.xml \ + snmp_app_b.xml \ + notes.xml + +BOOK_FILES = book.xml + +XML_FILES = $(BOOK_FILES) \ + $(XML_CHAPTER_FILES) \ + $(XML_PART_FILES) \ + $(XML_REF6_FILES) \ + $(XML_REF3_FILES) \ + $(XML_APPLICATION_FILES) + +GIF_FILES = book.gif \ + getnext1.gif \ + getnext2.gif \ + getnext3.gif \ + getnext4.gif \ + snmp_agent_netif_1.gif \ + snmp_manager_netif_1.gif \ + min_head.gif \ + note.gif \ + notes.gif \ + ref_man.gif \ + snmp-um-1-image-1.gif \ + snmp-um-1-image-2.gif \ + snmp-um-1-image-3.gif \ + snmp.gif \ + user_guide.gif \ + warning.gif \ + MIB_mechanism.gif + +PS_FILES = getnext1.ps \ + getnext2.ps \ + getnext3.ps \ + getnext4.ps \ + snmp_agent_netif.ps \ + snmp-um-1-image-1.ps \ + snmp-um-1-image-2.ps \ + snmp-um-1-image-3.ps \ + snmp-um-1-image-8.ps \ + MIB_mechanism.ps + + +MIB_FILES = \ + $(MIBSDIR)/RFC1213-MIB.mib \ + $(MIBSDIR)/STANDARD-MIB.mib \ + $(MIBSDIR)/SNMPv2-TM.mib \ + $(MIBSDIR)/SNMPv2-MIB.mib \ + $(MIBSDIR)/SNMP-FRAMEWORK-MIB.mib \ + $(MIBSDIR)/SNMP-MPD-MIB.mib \ + $(MIBSDIR)/SNMP-TARGET-MIB.mib \ + $(MIBSDIR)/SNMP-NOTIFICATION-MIB.mib \ + $(MIBSDIR)/SNMP-COMMUNITY-MIB.mib \ + $(MIBSDIR)/SNMP-USER-BASED-SM-MIB.mib \ + $(MIBSDIR)/SNMP-VIEW-BASED-ACM-MIB.mib \ + $(MIBSDIR)/SNMP-USM-AES-MIB.mib \ + $(MIBSDIR)/INET-ADDRESS-MIB.mib \ + $(MIBSDIR)/OTP-SNMPEA-MIB.mib diff --git a/lib/snmp/doc/src/getnext1.gif b/lib/snmp/doc/src/getnext1.gif Binary files differnew file mode 100644 index 0000000000..21725f4388 --- /dev/null +++ b/lib/snmp/doc/src/getnext1.gif diff --git a/lib/snmp/doc/src/getnext1.ps b/lib/snmp/doc/src/getnext1.ps new file mode 100644 index 0000000000..ba6bf18fec --- /dev/null +++ b/lib/snmp/doc/src/getnext1.ps @@ -0,0 +1,2923 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Adobe Illustrator(r) 6.0 +%%For: (Anna Fedoriw) (Ericsson Telecom) +%%Title: (Contents.eps) +%%CreationDate: (97-05-23) (14.03) +%%BoundingBox: 112 623 440 757 +%%HiResBoundingBox: 112.5 623.5 439.5 756.8677 +%%DocumentProcessColors: Black +%%DocumentFonts: Univers +%%DocumentSuppliedResources: procset Adobe_level2_AI5 1.0 0 +%%+ procset Adobe_typography_AI5 1.0 0 +%%+ procset Adobe_Illustrator_AI6_vars Adobe_Illustrator_AI6 +%%+ procset Adobe_Illustrator_AI5 1.0 0 +%AI5_FileFormat 2.0 +%AI3_ColorUsage: Black&White +%%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) +%%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 -1 -1 +%%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () +%AI3_TemplateBox: 306 396 306 396 +%AI3_TileBox: 21 -12 588 802 +%AI3_DocumentPreview: Macintosh_ColorPic +%AI5_ArtSize: 595.2756 841.8898 +%AI5_RulerUnits: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 1 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI5_OpenToView: 54 804 2 1146 827 58 1 1 3 40 +%AI5_OpenViewLayers: 7 +%%EndComments +%%BeginProlog +%%BeginResource: procset Adobe_level2_AI5 1.2 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) +%%Version: 1.2 +%%CreationDate: (04/10/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +userdict /Adobe_level2_AI5 23 dict dup begin + put + /packedarray where not + { + userdict begin + /packedarray + { + array astore readonly + } bind def + /setpacking /pop load def + /currentpacking false def + end + 0 + } if + pop + userdict /defaultpacking currentpacking put true setpacking + /initialize + { + Adobe_level2_AI5 begin + } bind def + /terminate + { + currentdict Adobe_level2_AI5 eq + { + end + } if + } bind def + mark + /setcustomcolor where not + { + /findcmykcustomcolor + { + 5 packedarray + } bind def + /setcustomcolor + { + exch aload pop pop + 4 + { + 4 index mul 4 1 roll + } repeat + 5 -1 roll pop + setcmykcolor + } + def + } if + + /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def + userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put + userdict /level2? + systemdict /languagelevel known dup + { + pop systemdict /languagelevel get 2 ge + } if + put +/level2ScreenFreq +{ + begin + 60 + HalftoneType 1 eq + { + pop Frequency + } if + HalftoneType 2 eq + { + pop GrayFrequency + } if + HalftoneType 5 eq + { + pop Default level2ScreenFreq + } if + end +} bind def +userdict /currentScreenFreq + level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put +level2? not + { + /setcmykcolor where not + { + /setcmykcolor + { + exch .11 mul add exch .59 mul add exch .3 mul add + 1 exch sub setgray + } def + } if + /currentcmykcolor where not + { + /currentcmykcolor + { + 0 0 0 1 currentgray sub + } def + } if + /setoverprint where not + { + /setoverprint /pop load def + } if + /selectfont where not + { + /selectfont + { + exch findfont exch + dup type /arraytype eq + { + makefont + } + { + scalefont + } ifelse + setfont + } bind def + } if + /cshow where not + { + /cshow + { + [ + 0 0 5 -1 roll aload pop + ] cvx bind forall + } bind def + } if + } if + cleartomark + /anyColor? + { + add add add 0 ne + } bind def + /testColor + { + gsave + setcmykcolor currentcmykcolor + grestore + } bind def + /testCMYKColorThrough + { + testColor anyColor? + } bind def + userdict /composite? + level2? + { + gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore + add add add 4 eq + } + { + 1 0 0 0 testCMYKColorThrough + 0 1 0 0 testCMYKColorThrough + 0 0 1 0 testCMYKColorThrough + 0 0 0 1 testCMYKColorThrough + and and and + } ifelse + put + composite? not + { + userdict begin + gsave + /cyan? 1 0 0 0 testCMYKColorThrough def + /magenta? 0 1 0 0 testCMYKColorThrough def + /yellow? 0 0 1 0 testCMYKColorThrough def + /black? 0 0 0 1 testCMYKColorThrough def + grestore + /isCMYKSep? cyan? magenta? yellow? black? or or or def + /customColor? isCMYKSep? not def + end + } if + end defaultpacking setpacking +%%EndResource +%%BeginResource: procset Adobe_typography_AI5 1.0 1 +%%Title: (Typography Operators) +%%Version: 1.0 +%%CreationDate:(03/26/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_typography_AI5 54 dict dup begin +put +/initialize +{ + begin + begin + Adobe_typography_AI5 begin + Adobe_typography_AI5 + { + dup xcheck + { + bind + } if + pop pop + } forall + end + end + end + Adobe_typography_AI5 begin +} def +/terminate +{ + currentdict Adobe_typography_AI5 eq + { + end + } if +} def +/modifyEncoding +{ + /_tempEncode exch ddef + /_pntr 0 ddef + { + counttomark -1 roll + dup type dup /marktype eq + { + pop pop exit + } + { + /nametype eq + { + _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll + put + } + { + /_pntr exch ddef + } ifelse + } ifelse + } loop + _tempEncode +} def +/TE +{ + StandardEncoding 256 array copy modifyEncoding + /_nativeEncoding exch def +} def +% +/TZ +{ + dup type /arraytype eq + { + /_wv exch def + } + { + /_wv 0 def + } ifelse + /_useNativeEncoding exch def + pop pop + findfont _wv type /arraytype eq + { + _wv makeblendedfont + } if + dup length 2 add dict + begin + mark exch + { + 1 index /FID ne + { + def + } if + cleartomark mark + } forall + pop + /FontName exch def + counttomark 0 eq + { + 1 _useNativeEncoding eq + { + /Encoding _nativeEncoding def + } if + cleartomark + } + { + /Encoding load 256 array copy + modifyEncoding /Encoding exch def + } ifelse + FontName currentdict + end + definefont pop +} def +/tr +{ + _ax _ay 3 2 roll +} def +/trj +{ + _cx _cy _sp _ax _ay 6 5 roll +} def +/a0 +{ + /Tx + { + dup + currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + } ddef + /Tj + { + dup + currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + } ddef +} def +/a1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/e0 +{ + /Tx + { + tr _psf + } ddef + /Tj + { + trj _pjsf + } ddef +} def +/e1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + tr _psf + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + trj _pjsf + grestore 3 1 roll moveto tr jsp + } ddef +} def +/i0 +{ + /Tx + { + tr sp + } ddef + /Tj + { + trj jsp + } ddef +} def +/i1 +{ + W N +} def +/o0 +{ + /Tx + { + tr sw rmoveto + } ddef + /Tj + { + trj swj rmoveto + } ddef +} def +/r0 +{ + /Tx + { + tr _ctm _pss + } ddef + /Tj + { + trj _ctm _pjss + } ddef +} def +/r1 +{ + /Tx + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/To +{ + pop _ctm currentmatrix pop +} def +/TO +{ + iTe _ctm setmatrix newpath +} def +/Tp +{ + pop _tm astore pop _ctm setmatrix + _tDict begin + /W + { + } def + /h + { + } def +} def +/TP +{ + end + iTm 0 0 moveto +} def +/Tr +{ + _render 3 le + { + currentpoint newpath moveto + } if + dup 8 eq + { + pop 0 + } + { + dup 9 eq + { + pop 1 + } if + } ifelse + dup /_render exch ddef + _renderStart exch get load exec +} def +/iTm +{ + _ctm setmatrix _tm concat 0 _rise translate _hs 1 scale +} def +/Tm +{ + _tm astore pop iTm 0 0 moveto +} def +/Td +{ + _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto +} def +/iTe +{ + _render -1 eq + { + } + { + _renderEnd _render get dup null ne + { + load exec + } + { + pop + } ifelse + } ifelse + /_render -1 ddef +} def +/Ta +{ + pop +} def +/Tf +{ + dup 1000 div /_fScl exch ddef +% + selectfont +} def +/Tl +{ + pop + 0 exch _leading astore pop +} def +/Tt +{ + pop +} def +/TW +{ + 3 npop +} def +/Tw +{ + /_cx exch ddef +} def +/TC +{ + 3 npop +} def +/Tc +{ + /_ax exch ddef +} def +/Ts +{ + /_rise exch ddef + currentpoint + iTm + moveto +} def +/Ti +{ + 3 npop +} def +/Tz +{ + 100 div /_hs exch ddef + iTm +} def +/TA +{ + pop +} def +/Tq +{ + pop +} def +/Th +{ + pop pop pop pop pop +} def +/TX +{ + pop +} def +/Tk +{ + exch pop _fScl mul neg 0 rmoveto +} def +/TK +{ + 2 npop +} def +/T* +{ + _leading aload pop neg Td +} def +/T*- +{ + _leading aload pop Td +} def +/T- +{ + _ax neg 0 rmoveto + _hyphen Tx +} def +/T+ +{ +} def +/TR +{ + _ctm currentmatrix pop + _tm astore pop + iTm 0 0 moveto +} def +/TS +{ + currentfont 3 1 roll + /_Symbol_ _fScl 1000 mul selectfont + + 0 eq + { + Tx + } + { + Tj + } ifelse + setfont +} def +/Xb +{ + pop pop +} def +/Tb /Xb load def +/Xe +{ + pop pop pop pop +} def +/Te /Xe load def +/XB +{ +} def +/TB /XB load def +currentdict readonly pop +end +setpacking +%%EndResource +%%BeginProcSet: Adobe_ColorImage_AI6 1.0 0 +userdict /Adobe_ColorImage_AI6 known not +{ + userdict /Adobe_ColorImage_AI6 17 dict put +} if +userdict /Adobe_ColorImage_AI6 get begin + + /initialize + { + Adobe_ColorImage_AI6 begin + Adobe_ColorImage_AI6 + { + dup type /arraytype eq + { + dup xcheck + { + bind + } if + } if + pop pop + } forall + } def + /terminate { end } def + + currentdict /Adobe_ColorImage_AI6_Vars known not + { + /Adobe_ColorImage_AI6_Vars 14 dict def + } if + + Adobe_ColorImage_AI6_Vars begin + /channelcount 0 def + /sourcecount 0 def + /sourcearray 4 array def + /plateindex -1 def + /XIMask 0 def + /XIBinary 0 def + /XIChannelCount 0 def + /XIBitsPerPixel 0 def + /XIImageHeight 0 def + /XIImageWidth 0 def + /XIImageMatrix null def + /XIBuffer null def + /XIDataProc null def + end + + /WalkRGBString null def + /WalkCMYKString null def + + /StuffRGBIntoGrayString null def + /RGBToGrayImageProc null def + /StuffCMYKIntoGrayString null def + /CMYKToGrayImageProc null def + /ColorImageCompositeEmulator null def + + /SeparateCMYKImageProc null def + + /FourEqual null def + /TestPlateIndex null def + + currentdict /_colorimage known not + { + /colorimage where + { + /colorimage get /_colorimage exch def + } + { + /_colorimage null def + } ifelse + } if + + /_currenttransfer systemdict /currenttransfer get def + + /colorimage null def + /XI null def + + + /WalkRGBString + { + 0 3 index + + dup length 1 sub 0 3 3 -1 roll + { + 3 getinterval { } forall + + 5 index exec + + 3 index + } for + + 5 { pop } repeat + + } def + + + /WalkCMYKString + { + 0 3 index + + dup length 1 sub 0 4 3 -1 roll + { + 4 getinterval { } forall + + 6 index exec + + 3 index + + } for + + 5 { pop } repeat + + } def + + + /StuffRGBIntoGrayString + { + .11 mul exch + + .59 mul add exch + + .3 mul add + + cvi 3 copy put + + pop 1 add + } def + + + /RGBToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 3 idiv string + dup 3 1 roll + + /StuffRGBIntoGrayString load exch + WalkRGBString + end + } def + + + /StuffCMYKIntoGrayString + { + exch .11 mul add + + exch .59 mul add + + exch .3 mul add + + dup 255 gt { pop 255 } if + + 255 exch sub cvi 3 copy put + + pop 1 add + } def + + + /CMYKToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 4 idiv string + dup 3 1 roll + + /StuffCMYKIntoGrayString load exch + WalkCMYKString + end + } def + + + /ColorImageCompositeEmulator + { + pop true eq + { + Adobe_ColorImage_AI6_Vars /sourcecount get 5 add { pop } repeat + } + { + Adobe_ColorImage_AI6_Vars /channelcount get 1 ne + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 3 -1 roll put + + channelcount 3 eq + { + /RGBToGrayImageProc + } + { + /CMYKToGrayImageProc + } ifelse + load + end + } if + image + } ifelse + } def + + + /SeparateCMYKImageProc + { + Adobe_ColorImage_AI6_Vars begin + + sourcecount 0 ne + { + sourcearray plateindex get exec + } + { + sourcearray 0 get exec + + dup length 4 idiv string + + 0 2 index + + plateindex 4 2 index length 1 sub + { + get 255 exch sub + + 3 copy put pop 1 add + + 2 index + } for + + pop pop exch pop + } ifelse + end + } def + + + /FourEqual + { + 4 index ne + { + pop pop pop false + } + { + 4 index ne + { + pop pop false + } + { + 4 index ne + { + pop false + } + { + 4 index eq + } ifelse + } ifelse + } ifelse + } def + + + /TestPlateIndex + { + Adobe_ColorImage_AI6_Vars begin + /plateindex -1 def + + /setcmykcolor where + { + pop + gsave + 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub + grestore + + 1 0 0 0 FourEqual + { + /plateindex 0 def + } + { + 0 1 0 0 FourEqual + { + /plateindex 1 def + } + { + 0 0 1 0 FourEqual + { + /plateindex 2 def + } + { + 0 0 0 1 FourEqual + { + /plateindex 3 def + } + { + 0 0 0 0 FourEqual + { + /plateindex 5 def + } if + } ifelse + } ifelse + } ifelse + } ifelse + pop pop pop pop + } if + plateindex + end + } def + + + /colorimage + { + Adobe_ColorImage_AI6_Vars begin + /channelcount 1 index def + /sourcecount 2 index 1 eq { channelcount 1 sub } { 0 } ifelse def + + 4 sourcecount add index dup + 8 eq exch 1 eq or not + end + + { + /_colorimage load null ne + { + _colorimage + } + { + Adobe_ColorImage_AI6_Vars /sourcecount get + 7 add { pop } repeat + } ifelse + } + { + dup 3 eq + TestPlateIndex + dup -1 eq exch 5 eq or or + { + /_colorimage load null eq + { + ColorImageCompositeEmulator + } + { + dup 1 eq + { + pop pop image + } + { + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + gsave + + 0 _currenttransfer exec + 1 _currenttransfer exec + eq + { 0 _currenttransfer exec 0.5 lt } + { 0 _currenttransfer exec 1 _currenttransfer exec gt } ifelse + + { { pop 0 } } { { pop 1 } } ifelse + systemdict /settransfer get exec + } if + + _colorimage + + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + grestore + } if + } ifelse + } ifelse + } + { + dup 1 eq + { + pop pop + image + } + { + pop pop + + Adobe_ColorImage_AI6_Vars begin + sourcecount -1 0 + { + exch sourcearray 3 1 roll put + } for + + /SeparateCMYKImageProc load + end + + systemdict /image get exec + } ifelse + } ifelse + } ifelse + } def + + /XI + { + Adobe_ColorImage_AI6_Vars begin + gsave + /XIMask exch 0 ne def + /XIBinary exch 0 ne def + pop + pop + /XIChannelCount exch def + /XIBitsPerPixel exch def + /XIImageHeight exch def + /XIImageWidth exch def + pop pop pop pop + /XIImageMatrix exch def + + XIBitsPerPixel 1 eq + { + XIImageWidth 8 div ceiling cvi + } + { + XIImageWidth XIChannelCount mul + } ifelse + /XIBuffer exch string def + + XIBinary + { + /XIDataProc { currentfile XIBuffer readstring pop } def + currentfile 128 string readline pop pop + } + { + /XIDataProc { currentfile XIBuffer readhexstring pop } def + } ifelse + + 0 0 moveto + XIImageMatrix concat + XIImageWidth XIImageHeight scale + + XIMask + { + XIImageWidth XIImageHeight + false + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + /_lp /null ddef + _fc + /_lp /imagemask ddef + + imagemask + } + { + XIImageWidth XIImageHeight + XIBitsPerPixel + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + XIChannelCount 1 eq + { + + gsave + 0 setgray + + image + + grestore + } + { + false + XIChannelCount + colorimage + } ifelse + } ifelse + grestore + end + } def + +end +%%EndProcSet +%%BeginResource: procset Adobe_Illustrator_AI5 1.1 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Full Prolog) +%%Version: 1.1 +%%CreationDate: (3/7/1994) () +%%Copyright: ((C) 1987-1994 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_Illustrator_AI5_vars 81 dict dup begin +put +/_eo false def +/_lp /none def +/_pf +{ +} def +/_ps +{ +} def +/_psf +{ +} def +/_pss +{ +} def +/_pjsf +{ +} def +/_pjss +{ +} def +/_pola 0 def +/_doClip 0 def +/cf currentflat def +/_tm matrix def +/_renderStart +[ +/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 +] def +/_renderEnd +[ +null null null null /i1 /i1 /i1 /i1 +] def +/_render -1 def +/_rise 0 def +/_ax 0 def +/_ay 0 def +/_cx 0 def +/_cy 0 def +/_leading +[ +0 0 +] def +/_ctm matrix def +/_mtx matrix def +/_sp 16#020 def +/_hyphen (-) def +/_fScl 0 def +/_cnt 0 def +/_hs 1 def +/_nativeEncoding 0 def +/_useNativeEncoding 0 def +/_tempEncode 0 def +/_pntr 0 def +/_tDict 2 dict def +/_wv 0 def +/Tx +{ +} def +/Tj +{ +} def +/CRender +{ +} def +/_AI3_savepage +{ +} def +/_gf null def +/_cf 4 array def +/_if null def +/_of false def +/_fc +{ +} def +/_gs null def +/_cs 4 array def +/_is null def +/_os false def +/_sc +{ +} def +/_pd 1 dict def +/_ed 15 dict def +/_pm matrix def +/_fm null def +/_fd null def +/_fdd null def +/_sm null def +/_sd null def +/_sdd null def +/_i null def +/discardSave null def +/buffer 256 string def +/beginString null def +/endString null def +/endStringLength null def +/layerCnt 1 def +/layerCount 1 def +/perCent (%) 0 get def +/perCentSeen? false def +/newBuff null def +/newBuffButFirst null def +/newBuffLast null def +/clipForward? false def +end +userdict /Adobe_Illustrator_AI5 known not { + userdict /Adobe_Illustrator_AI5 91 dict put +} if +userdict /Adobe_Illustrator_AI5 get begin +/initialize +{ + Adobe_Illustrator_AI5 dup begin + Adobe_Illustrator_AI5_vars begin + discardDict + { + bind pop pop + } forall + dup /nc get begin + { + dup xcheck 1 index type /operatortype ne and + { + bind + } if + pop pop + } forall + end + newpath +} def +/terminate +{ + end + end +} def +/_ +null def +/ddef +{ + Adobe_Illustrator_AI5_vars 3 1 roll put +} def +/xput +{ + dup load dup length exch maxlength eq + { + dup dup load dup + length 2 mul dict copy def + } if + load begin + def + end +} def +/npop +{ + { + pop + } repeat +} def +/sw +{ + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add +} def +/swj +{ + dup 4 1 roll + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add + 6 2 roll /_cnt 0 ddef + { + 1 index eq + { + /_cnt _cnt 1 add ddef + } if + } forall + pop + exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop +} def +/ss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put pop + gsave + false charpath currentpoint + 4 index setmatrix + stroke + grestore + moveto + 2 copy rmoveto + } exch cshow + 3 npop +} def +/jss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put + gsave + _sp eq + { + exch 6 index 6 index 6 index 5 -1 roll widthshow + currentpoint + } + { + false charpath currentpoint + 4 index setmatrix stroke + } ifelse + grestore + moveto + 2 copy rmoveto + } exch cshow + 6 npop +} def +/sp +{ + { + 2 npop (0) exch + 2 copy 0 exch put pop + false charpath + 2 copy rmoveto + } exch cshow + 2 npop +} def +/jsp +{ + { + 2 npop + (0) exch 2 copy 0 exch put + _sp eq + { + exch 5 index 5 index 5 index 5 -1 roll widthshow + } + { + false charpath + } ifelse + 2 copy rmoveto + } exch cshow + 5 npop +} def +/pl +{ + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform +} def +/setstrokeadjust where +{ + pop true setstrokeadjust + /c + { + curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll curveto + } def + /V + /v load def + /y + { + 2 copy curveto + } def + /Y + /y load def + /l + { + lineto + } def + /L + /l load def + /m + { + moveto + } def +} +{ + /c + { + pl curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll pl curveto + } def + /V + /v load def + /y + { + pl 2 copy curveto + } def + /Y + /y load def + /l + { + pl lineto + } def + /L + /l load def + /m + { + pl moveto + } def +} ifelse +/d +{ + setdash +} def +/cf +{ +} def +/i +{ + dup 0 eq + { + pop cf + } if + setflat +} def +/j +{ + setlinejoin +} def +/J +{ + setlinecap +} def +/M +{ + setmiterlimit +} def +/w +{ + setlinewidth +} def +/XR +{ + 0 ne + /_eo exch ddef +} def +/H +{ +} def +/h +{ + closepath +} def +/N +{ + _pola 0 eq + { + _doClip 1 eq + { + _eo {eoclip} {clip} ifelse /_doClip 0 ddef + } if + newpath + } + { + /CRender + { + N + } ddef + } ifelse +} def +/n +{ + N +} def +/F +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc + /_doClip 0 ddef + } + { + _pf + } ifelse + } + { + /CRender + { + F + } ddef + } ifelse +} def +/f +{ + closepath + F +} def +/S +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + _ps + } ifelse + } + { + /CRender + { + S + } ddef + } ifelse +} def +/s +{ + closepath + S +} def +/B +{ + _pola 0 eq + { + _doClip 1 eq + gsave F grestore + { + gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + S + } ifelse + } + { + /CRender + { + B + } ddef + } ifelse +} def +/b +{ + closepath + B +} def +/W +{ + /_doClip 1 ddef +} def +/* +{ + count 0 ne + { + dup type /stringtype eq + { + pop + } if + } if + newpath +} def +/u +{ +} def +/U +{ +} def +/q +{ + _pola 0 eq + { + gsave + } if +} def +/Q +{ + _pola 0 eq + { + grestore + } if +} def +/*u +{ + _pola 1 add /_pola exch ddef +} def +/*U +{ + _pola 1 sub /_pola exch ddef + _pola 0 eq + { + CRender + } if +} def +/D +{ + pop +} def +/*w +{ +} def +/*W +{ +} def +/` +{ + /_i save ddef + clipForward? + { + nulldevice + } if + 6 1 roll 4 npop + concat pop + userdict begin + /showpage + { + } def + 0 setgray + 0 setlinecap + 1 setlinewidth + 0 setlinejoin + 10 setmiterlimit + [] 0 setdash + /setstrokeadjust where {pop false setstrokeadjust} if + newpath + 0 setgray + false setoverprint +} def +/~ +{ + end + _i restore +} def +/O +{ + 0 ne + /_of exch ddef + /_lp /none ddef +} def +/R +{ + 0 ne + /_os exch ddef + /_lp /none ddef +} def +/g +{ + /_gf exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _gf setgray + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/G +{ + /_gs exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _gs setgray + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/k +{ + _cf astore pop + /_fc + { + _lp /fill ne + { + _of setoverprint + _cf aload pop setcmykcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/K +{ + _cs astore pop + /_sc + { + _lp /stroke ne + { + _os setoverprint + _cs aload pop setcmykcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/x +{ + /_gf exch ddef + findcmykcustomcolor + /_if exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _if _gf 1 exch sub setcustomcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/X +{ + /_gs exch ddef + findcmykcustomcolor + /_is exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _is _gs 1 exch sub setcustomcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/A +{ + pop +} def +/annotatepage +{ +userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse +} def +/XT { + pop pop +} def +/discard +{ + save /discardSave exch store + discardDict begin + /endString exch store + gt38? + { + 2 add + } if + load + stopped + pop + end + discardSave restore +} bind def +userdict /discardDict 7 dict dup begin +put +/pre38Initialize +{ + /endStringLength endString length store + /newBuff buffer 0 endStringLength getinterval store + /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store + /newBuffLast newBuff endStringLength 1 sub 1 getinterval store +} def +/shiftBuffer +{ + newBuff 0 newBuffButFirst putinterval + newBuffLast 0 + currentfile read not + { + stop + } if + put +} def +0 +{ + pre38Initialize + mark + currentfile newBuff readstring exch pop + { + { + newBuff endString eq + { + cleartomark stop + } if + shiftBuffer + } loop + } + { + stop + } ifelse +} def +1 +{ + pre38Initialize + /beginString exch store + mark + currentfile newBuff readstring exch pop + { + { + newBuff beginString eq + { + /layerCount dup load 1 add store + } + { + newBuff endString eq + { + /layerCount dup load 1 sub store + layerCount 0 eq + { + cleartomark stop + } if + } if + } ifelse + shiftBuffer + } loop + } if +} def +2 +{ + mark + { + currentfile buffer readline not + { + stop + } if + endString eq + { + cleartomark stop + } if + } loop +} def +3 +{ + /beginString exch store + /layerCnt 1 store + mark + { + currentfile buffer readline not + { + stop + } if + dup beginString eq + { + pop /layerCnt dup load 1 add store + } + { + endString eq + { + layerCnt 1 eq + { + cleartomark stop + } + { + /layerCnt dup load 1 sub store + } ifelse + } if + } ifelse + } loop +} def +end +userdict /clipRenderOff 15 dict dup begin +put +{ + /n /N /s /S /f /F /b /B +} +{ + { + _doClip 1 eq + { + /_doClip 0 ddef _eo {eoclip} {clip} ifelse + } if + newpath + } def +} forall +/Tr /pop load def +/Bb {} def +/BB /pop load def +/Bg {12 npop} def +/Bm {6 npop} def +/Bc /Bm load def +/Bh {4 npop} def +end +/Lb +{ + 4 npop + 6 1 roll + pop + 4 1 roll + pop pop pop + 0 eq + { + 0 eq + { + (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard + } + { + + /clipForward? true def + + /Tx /pop load def + /Tj /pop load def + + currentdict end clipRenderOff begin begin + } ifelse + } + { + 0 eq + { + save /discardSave exch store + } if + } ifelse +} bind def +/LB +{ + discardSave dup null ne + { + restore + } + { + pop + clipForward? + { + currentdict + end + end + begin + + /clipForward? false ddef + } if + } ifelse +} bind def +/Pb +{ + pop pop + 0 (%AI5_EndPalette) discard +} bind def +/Np +{ + 0 (%AI5_End_NonPrinting--) discard +} bind def +/Ln /pop load def +/Ap +/pop load def +/Ar +{ + 72 exch div + 0 dtransform dup mul exch dup mul add sqrt + dup 1 lt + { + pop 1 + } if + setflat +} def +/Mb +{ + q +} def +/Md +{ +} def +/MB +{ + Q +} def +/nc 3 dict def +nc begin +/setgray +{ + pop +} bind def +/setcmykcolor +{ + 4 npop +} bind def +/setcustomcolor +{ + 2 npop +} bind def +currentdict readonly pop +end +end +setpacking +%%EndResource +%%EndProlog +%%BeginSetup +%%IncludeFont: Univers +Adobe_level2_AI5 /initialize get exec +Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_typography_AI5 /initialize get exec +Adobe_ColorImage_AI6 /initialize get exec +Adobe_Illustrator_AI5 /initialize get exec +[ +39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis +/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute +/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde +/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex +/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls +/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash +/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef +/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash +/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef +/guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe +/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide +/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright +/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand +/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex +/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex +/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla +/hungarumlaut/ogonek/caron +TE +%AI3_BeginEncoding: _Univers Univers +[/_Univers/Univers 0 0 1 TZ +%AI3_EndEncoding AdobeType +%AI5_Begin_NonPrinting +Np +8 Bn +%AI5_BeginGradient: (Black & White) +(Black & White) 0 2 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Green & Blue) +(Green & Blue) 0 2 Bd +[ +< +99999A9A9B9B9B9C9C9D9D9D9E9E9F9F9FA0A0A1A1A1A2A2A3A3A3A4A4A5A5A5A6A6A7A7A7A8A8A9 +A9A9AAAAABABABACACADADADAEAEAFAFAFB0B0B1B1B1B2B2B3B3B3B4B4B5B5B5B6B6B7B7B7B8B8B9 +B9B9BABABBBBBBBCBCBDBDBDBEBEBFBFBFC0C0C1C1C1C2C2C3C3C3C4C4C5C5C5C6C6C7C7C7C8C8C9 +C9C9CACACBCBCBCCCCCDCDCDCECECFCFCFD0D0D1D1D1D2D2D3D3D3D4D4D5D5D5D6D6D7D7D7D8D8D9 +D9D9DADADBDBDBDCDCDDDDDDDEDEDFDFDFE0E0E1E1E1E2E2E3E3E3E4E4E5E5E5E6E6E7E7E7E8E8E9 +E9E9EAEAEBEBEBECECEDEDEDEEEEEFEFEFF0F0F1F1F1F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F9 +F9F9FAFAFBFBFBFCFCFDFDFDFEFEFFFF +> +< +000102020304050506070808090A0B0B0C0D0E0E0F101111121314141516171718191A1A1B1C1D1D +1E1F20202122232324252626272829292A2B2C2C2D2E2F2F303132323334353536373838393A3B3B +3C3D3E3E3F404141424344444546474748494A4A4B4C4D4D4E4F5050515253535455565657585959 +5A5B5C5C5D5E5F5F606162626364656566676868696A6B6B6C6D6E6E6F7071717273747475767777 +78797A7A7B7C7D7D7E7F80808182828384858586878888898A8B8B8C8D8E8E8F9091919293949495 +96979798999A9A9B9C9D9D9E9FA0A0A1A2A3A3A4A5A6A6A7A8A9A9AAABACACADAEAFAFB0B1B2B2B3 +B4B5B5B6B7B8B8B9BABBBBBCBDBEBEBF +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +[ +1 0.75 0 0 1 50 100 %_Bs +0.6 0 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Pink, Yellow, Green) +(Pink, Yellow, Green) 0 3 Bd +[ +< +00000000000000000000000000000000000000010101010101010101010101010101010101010101 +01010101010202020202020202020202020202020202020202020203030303030303030303030303 +03030303030303030404040404040404040404040404040404040404050505050505050505050505 +05050505050505060606060606060606060606060606060606060707070707070707070707070707 +07070707080808080808080808080808080808080809090909090909090909090909090909090A0A +0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C +0C0C0C0C0C0C0C0D0D0D0D0D +> +< +050506060606070708080809090A0A0A0B0B0C0C0D0D0E0E0F0F1010111112121313141415151617 +17181819191A1A1B1C1C1D1D1E1F1F202021222223232425252626272828292A2A2B2C2C2D2D2E2F +2F3031313233333435353637373839393A3B3B3C3D3E3E3F4040414242434445454647474849494A +4B4C4C4D4E4F4F505151525354545556575758595A5A5B5C5C5D5E5F5F6061626363646566666768 +69696A6B6C6C6D6E6F707071727373747576777778797A7B7B7C7D7E7F7F80818283838485868787 +88898A8B8B8C8D8E8F8F9091929394949596979898999A9B9C9D9D9E9FA0A1A2A2A3A4A5A6A7A7A8 +A9AAABACADADAEAFB0B1B2B2 +> +< +CCCCCBCBCBCACACAC9C9C8C8C7C7C6C6C5C5C4C4C3C2C2C1C1C0C0BFBEBEBDBDBCBBBBBAB9B9B8B7 +B7B6B6B5B4B4B3B2B1B1B0AFAFAEADADACABAAAAA9A8A8A7A6A5A5A4A3A2A2A1A0A09F9E9D9C9C9B +9A999998979696959493929291908F8E8E8D8C8B8A8A8988878686858483828181807F7E7D7C7C7B +7A7978777776757473727171706F6E6D6C6B6A6A69686766656463636261605F5E5D5C5B5B5A5958 +5756555453525151504F4E4D4C4B4A49484746464544434241403F3E3D3C3B3A3938383736353433 +3231302F2E2D2C2B2A29282726252423222221201F1E1D1C1B1A191817161514131211100F0E0D0C +0B0A09080706050403020100 +> +0 +1 %_Br +< +737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5B5A59585756555453525150504F4E +4D4C4B4A4949484746454443434241403F3E3E3D3C3B3A3A393837363635343333323130302F2E2D +2D2C2B2A2A29282827262525242323222121201F1F1E1D1D1C1C1B1A1A1918181717161615141413 +1312121111100F0F0E0E0D0D0C0C0C0B0B0A0A090908080807070606060505050404040303030202 +020201010101010000000000 +> +< +00000000000000000000000001010101010101010101010101010101010101010101010102020202 +02020202020202020202020202020202020202020202030303030303030303030303030303030303 +03030303030303030303030303040404040404040404040404040404040404040404040404040404 +04040404040404040404050505050505050505050505050505050505050505050505050505050505 +050505050505050505050505 +> +< +BFBFBFC0C0C0C0C0C0C0C0C0C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C2C2C3C3C3C3C3C3C3C3C3 +C3C4C4C4C4C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C6C6C6C7C7C7C7C7C7 +C7C7C7C7C7C7C8C8C8C8C8C8C8C8C8C8C8C8C8C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9CACACACACACA +CACACACACACACACACACACBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCCCCCCCCCC +> +0 +1 %_Br +[ +0.05 0.7 0 0 1 50 100 %_Bs +0 0.02 0.8 0 1 57 36 %_Bs +0.45 0 0.75 0 1 37 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Purple, Red & Yellow) +(Purple, Red & Yellow) 0 3 Bd +[ +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A +> +< +CCCCCCCDCDCDCDCDCECECECECECFCFCFCFD0D0D0D0D0D1D1D1D1D1D2D2D2D2D2D3D3D3D3D3D4D4D4 +D4D5D5D5D5D5D6D6D6D6D6D7D7D7D7D7D8D8D8D8D8D9D9D9D9DADADADADADBDBDBDBDBDCDCDCDCDC +DDDDDDDDDDDEDEDEDEDFDFDFDFDFE0E0E0E0E0E1E1E1E1E1E2E2E2E2E2E3E3E3E3E4E4E4E4E4E5E5 +E5E5E5E6E6E6E6E6E7E7E7E7E7E8E8E8E8E9E9E9E9E9EAEAEAEAEAEBEBEBEBEBECECECECECEDEDED +EDEEEEEEEEEEEFEFEFEFEFF0F0F0F0F0F1F1F1F1F1F2F2F2F2F3F3F3F3F3F4F4F4F4F4F5F5F5F5F5 +F6F6F6F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFAFAFBFBFBFBFBFCFCFCFCFDFDFDFDFDFEFE +FEFEFEFFFFFF +> +0 +1 %_Br +< +E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBE +BDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A99989796 +9594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B7A797877767574737271706F6E +6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A49484746 +4544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E +1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403020100 +> +< +E5E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9EAEAEAEA +EAEAEAEAEAEBEBEBEBEBEBEBEBEBECECECECECECECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEE +EEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F3F3F3 +F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 +F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFCFC +FCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFF +> +< +00010203040405060708090A0B0C0C0D0E0F10111213141415161718191A1B1C1D1D1E1F20212223 +242525262728292A2B2C2D2D2E2F30313233343535363738393A3B3C3D3D3E3F4041424344454546 +4748494A4B4C4D4E4E4F50515253545556565758595A5B5C5D5E5E5F60616263646566666768696A +6B6C6D6E6E6F70717273747576767778797A7B7C7D7E7F7F80818283848586878788898A8B8C8D8E +8F8F90919293949596979798999A9B9C9D9E9F9FA0A1A2A3A4A5A6A7A7A8A9AAABACADAEAFAFB0B1 +B2B3B4B5B6B7B8B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C8C9CACBCC +> +0 +1 %_Br +[ +0 0.04 1 0 1 50 100 %_Bs +0 1 0.8 0 1 50 50 %_Bs +0.9 0.9 0 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Rainbow) +(Rainbow) 0 6 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +0 +1 %_Br +1 +< +0708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E +2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556 +5758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E +7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6 +A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCE +CFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6 +F7F8F9FAFBFCFDFEFF +> +0 +0 +1 %_Br +1 +< +00000000000000000000000000000000000001010101010101010101010101010101010101010101 +01010101010101010101010101010202020202020202020202020202020202020202020202020202 +02020202020202020202030303030303030303030303030303030303030303030303030303030303 +03030303030304040404040404040404040404040404040404040404040404040404040404040404 +04040505050505050505050505050505050505050505050505050505050505050505050505050606 +06060606060606060606060606060606060606060606060606060606060606060606070707070707 +07070707070707070707070707070707 +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 +1 +0 +1 %_Br +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +1 %_Br +[ +0 1 0 0 1 50 100 %_Bs +1 1 0 0 1 50 80 %_Bs +1 0.0279 0 0 1 50 60 %_Bs +1 0 1 0 1 50 40 %_Bs +0 0 1 0 1 50 20 %_Bs +0 1 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Steel Bar) +(Steel Bar) 0 3 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 70 %_Bs +0 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Orange Radial) +(Yellow & Orange Radial) 1 2 Bd +[ +0 +< +0001010203040506060708090A0B0C0C0D0E0F10111213131415161718191A1B1C1D1D1E1F202122 +232425262728292A2B2B2C2D2E2F303132333435363738393A3B3C3D3E3E3F404142434445464748 +494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60606162636465666768696A6B6C6D6E6F +707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C +> +< +FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9 +F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2 +F2F2F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEDEDEDEDEDEDECECECECECEBEBEBEBEB +EBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E8E8E8E7E7E7E7E7E6E6E6E6E6E5 +> +0 +1 %_Br +[ +0 0 1 0 1 52 19 %_Bs +0 0.55 0.9 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Purple Radial) +(Yellow & Purple Radial) 1 2 Bd +[ +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +< +1415161718191A1B1C1D1E1F1F202122232425262728292A2A2B2C2D2E2F30313233343536363738 +393A3B3C3D3E3F40414142434445464748494A4B4C4D4D4E4F50515253545556575858595A5B5C5D +5E5F60616263646465666768696A6B6C6D6E6F6F707172737475767778797A7B7B7C7D7E7F808182 +83848586868788898A8B8C8D8E8F90919292939495969798999A9B9C9D9D9E9FA0A1A2A3A4A5A6A7 +A8A9A9AAABACADAEAFB0B1B2B3B4B4B5B6B7B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C9CACBCB +CCCDCECFD0D1D2D3D4D5D6D7D7D8D9DADBDCDDDEDFE0E1E2E2E3E4E5E6E7E8E9EAEBECEDEEEEEFF0 +F1F2F3F4F5F6F7F8F9F9FAFBFCFDFEFF +> +< +ABAAAAA9A8A7A7A6A5A5A4A3A3A2A1A1A09F9F9E9D9D9C9B9B9A9999989797969595949393929191 +908F8F8E8D8D8C8B8B8A8989888787868585848383828181807F7F7E7D7D7C7B7B7A797978777776 +7575747373727171706F6F6E6D6D6C6B6B6A6969686767666565646362626160605F5E5E5D5C5C5B +5A5A5958585756565554545352525150504F4E4E4D4C4C4B4A4A4948484746464544444342424140 +403F3E3E3D3C3C3B3A3A3938383736363534343332323130302F2E2E2D2C2C2B2A2A292828272626 +25242423222121201F1F1E1D1D1C1B1B1A1919181717161515141313121111100F0F0E0D0D0C0B0B +0A090908070706050504030302010100 +> +0 +1 %_Br +[ +0 0.08 0.67 0 1 50 14 %_Bs +1 1 0 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_End_NonPrinting-- +%AI5_BeginPalette +0 0 Pb +Pn +Pc +1 g +Pc +0 g +Pc +0 0 0 0 k +Pc +0.75 g +Pc +0.5 g +Pc +0.25 g +Pc +0 g +Pc +Bb +2 (Black & White) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0 0 0 k +Pc +0.5 0 0 0 k +Pc +0.75 0 0 0 k +Pc +1 0 0 0 k +Pc +0.25 0.25 0 0 k +Pc +0.5 0.5 0 0 k +Pc +0.75 0.75 0 0 k +Pc +1 1 0 0 k +Pc +Bb +2 (Pink, Yellow, Green) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0 0 k +Pc +0 0.5 0 0 k +Pc +0 0.75 0 0 k +Pc +0 1 0 0 k +Pc +0 0.25 0.25 0 k +Pc +0 0.5 0.5 0 k +Pc +0 0.75 0.75 0 k +Pc +0 1 1 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Purple Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0 0.25 0 k +Pc +0 0 0.5 0 k +Pc +0 0 0.75 0 k +Pc +0 0 1 0 k +Pc +0.25 0 0.25 0 k +Pc +0.5 0 0.5 0 k +Pc +0.75 0 0.75 0 k +Pc +1 0 1 0 k +Pc +Bb +2 (Rainbow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0 0 k +Pc +0.5 0.25 0 0 k +Pc +0.75 0.375 0 0 k +Pc +1 0.5 0 0 k +Pc +0.125 0.25 0 0 k +Pc +0.25 0.5 0 0 k +Pc +0.375 0.75 0 0 k +Pc +0.5 1 0 0 k +Pc +Bb +2 (Steel Bar) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0.125 0 k +Pc +0 0.5 0.25 0 k +Pc +0 0.75 0.375 0 k +Pc +0 1 0.5 0 k +Pc +0 0.125 0.25 0 k +Pc +0 0.25 0.5 0 k +Pc +0 0.375 0.75 0 k +Pc +0 0.5 1 0 k +Pc +Bb +2 (Purple, Red & Yellow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0 0.25 0 k +Pc +0.25 0 0.5 0 k +Pc +0.375 0 0.75 0 k +Pc +0.5 0 1 0 k +Pc +0.25 0 0.125 0 k +Pc +0.5 0 0.25 0 k +Pc +0.75 0 0.375 0 k +Pc +1 0 0.5 0 k +Pc +Bb +2 (Green & Blue) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0.125 0 k +Pc +0.5 0.25 0.25 0 k +Pc +0.75 0.375 0.375 0 k +Pc +1 0.5 0.5 0 k +Pc +0.25 0.25 0.125 0 k +Pc +0.5 0.5 0.25 0 k +Pc +0.75 0.75 0.375 0 k +Pc +1 1 0.5 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Orange Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0.25 0.125 0 k +Pc +0.25 0.5 0.25 0 k +Pc +0.375 0.75 0.375 0 k +Pc +0.5 1 0.5 0 k +Pc +0.125 0.25 0.25 0 k +Pc +0.25 0.5 0.5 0 k +Pc +0.375 0.75 0.75 0 k +Pc +0.5 1 1 0 k +Pc +0 0 0 0 k +Pc +0.125 0.125 0.25 0 k +Pc +0.25 0.25 0.5 0 k +Pc +0.375 0.375 0.75 0 k +Pc +0.5 0.5 1 0 k +Pc +0.25 0.125 0.25 0 k +Pc +0.5 0.25 0.5 0 k +Pc +0.75 0.375 0.75 0 k +Pc +1 0.5 1 0 k +Pc +PB +%AI5_EndPalette +%%EndSetup +%AI5_BeginLayer +1 1 1 1 0 0 0 79 128 255 Lb +(Layer 1) Ln +0 A +800 Ar +0 J 0 j 1 w 4 M []0 d +%AI3_Note: +0 D +0 XR +-4014 283.5 m +4626 283.5 L +(N) * +453.5 4716 m +453.5 -3924 L +(N) * +85 4716 m +85 -3924 L +(N) * +-4014 765.5 m +4626 765.5 L +(N) * +0 R +0 G +113 683.5 m +439 683.5 l +S +113 663.5 m +439 663.5 l +S +113 643.5 m +439 643.5 l +S +113 686 m +439 686 l +S +1 Ap +439 624 m +439 709 L +113 709 L +113 624 L +439 624 L +s +0 Ap +178.5 709 m +178.5 624 l +S +243 709 m +243 624 l +S +374 709 m +374 624 l +S +308.5 709 m +308.5 624 l +S +0 To +1 0 0 1 146 692 0 Tp +TP +-12.2278 0 Td +0 Tr +0 O +0 g +/_Univers 10 Tf +0 Ts +100 Tz +0 Tt +1 TA +%_ 0 XL +36 0 Xb +XB +0 0 5 TC +100 100 200 TW +0 0 0 Ti +1 Ta +0 0 2 2 3 Th +0 Tq +0 0 Tl +0 Tc +0 Tw +(key 1) Tx +(\r) TX +TO +0 To +1 0 0 1 213 692 0 Tp +TP +-12.2278 0 Td +0 Tr +(key 2) Tx +(\r) TX +TO +0 To +1 0 0 1 276 692 0 Tp +TP +-11.1121 0 Td +0 Tr +(col 3) Tx +(\r) TX +TO +0 To +1 0 0 1 225.5 747.5 0 Tp +TP +0 Tr +(\r) Tx +TO +0 To +1 0 0 1 336.5 693.5 0 Tp +TP +0 Tr +(\r) Tx +TO +0 To +1 0 0 1 341 692 0 Tp +TP +-11.1121 0 Td +0 Tr +(col 4) Tx +(\r) TX +TO +0 To +1 0 0 1 407.5 692 0 Tp +TP +-11.1121 0 Td +0 Tr +(col 5) Tx +(\r) TX +TO +0 To +1 0 0 1 185.5 736 0 Tp +TP +0 Tr +(\r) Tx +TO +0 To +1 0 0 1 145 669.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(1) Tx +(\r) TX +TO +0 To +1 0 0 1 144.5 650.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(1) Tx +(\r) TX +TO +0 To +1 0 0 1 145 630 0 Tp +TP +-2.7795 0 Td +0 Tr +(2) Tx +(\r) TX +TO +0 To +1 0 0 1 209.5 669 0 Tp +TP +-2.7795 0 Td +0 Tr +(1) Tx +(\r) TX +TO +0 To +1 0 0 1 209.5 649.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(2) Tx +(\r) TX +TO +0 To +1 0 0 1 209.5 629.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(1) Tx +(\r) TX +TO +0 To +1 0 0 1 274.5 669 0 Tp +TP +-2.7795 0 Td +0 Tr +(a) Tx +(\r) TX +TO +0 To +1 0 0 1 274.5 649.5 0 Tp +TP +-3.0542 0 Td +0 Tr +(d) Tx +(\r) TX +TO +0 To +1 0 0 1 274.5 629.5 0 Tp +TP +-3.0542 0 Td +0 Tr +(g) Tx +(\r) TX +TO +0 To +1 0 0 1 340 669 0 Tp +TP +-3.0542 0 Td +0 Tr +(b) Tx +(\r) TX +TO +0 To +1 0 0 1 340 649.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(e) Tx +(\r) TX +TO +0 To +1 0 0 1 340 629.5 0 Tp +TP +-8.8879 0 Td +0 Tr +(N/A) Tx +(\r) TX +TO +0 To +1 0 0 1 405 669 0 Tp +TP +-2.5 0 Td +0 Tr +(c) Tx +(\r) TX +TO +0 To +1 0 0 1 405 649.5 0 Tp +TP +-1.6638 0 Td +0 Tr +(f) Tx +(\r) TX +TO +0 To +1 0 0 1 405 629.5 0 Tp +TP +-1.3892 0 Td +0 Tr +(i) Tx +(\r) TX +TO +LB +%AI5_EndLayer-- +%%PageTrailer +gsave annotatepage grestore showpage +%%Trailer +Adobe_Illustrator_AI5 /terminate get exec +Adobe_ColorImage_AI6 /terminate get exec +Adobe_typography_AI5 /terminate get exec +Adobe_level2_AI5 /terminate get exec +%%EOF diff --git a/lib/snmp/doc/src/getnext2.gif b/lib/snmp/doc/src/getnext2.gif Binary files differnew file mode 100644 index 0000000000..caf44e93aa --- /dev/null +++ b/lib/snmp/doc/src/getnext2.gif diff --git a/lib/snmp/doc/src/getnext2.ps b/lib/snmp/doc/src/getnext2.ps new file mode 100644 index 0000000000..49721647cf --- /dev/null +++ b/lib/snmp/doc/src/getnext2.ps @@ -0,0 +1,2997 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Adobe Illustrator(r) 6.0 +%%For: (Anna Fedoriw) (Ericsson Telecom) +%%Title: (GetNext311.eps) +%%CreationDate: (97-05-23) (14.04) +%%BoundingBox: 112 623 440 757 +%%HiResBoundingBox: 112.5 623.5 439.5 756.8677 +%%DocumentProcessColors: Black +%%DocumentFonts: Univers +%%DocumentSuppliedResources: procset Adobe_level2_AI5 1.0 0 +%%+ procset Adobe_typography_AI5 1.0 0 +%%+ procset Adobe_Illustrator_AI6_vars Adobe_Illustrator_AI6 +%%+ procset Adobe_Illustrator_AI5 1.0 0 +%AI5_FileFormat 2.0 +%AI3_ColorUsage: Black&White +%%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) +%%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 -1 -1 +%%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () +%AI3_TemplateBox: 306 396 306 396 +%AI3_TileBox: 21 -12 588 802 +%AI3_DocumentPreview: Macintosh_ColorPic +%AI5_ArtSize: 595.2756 841.8898 +%AI5_RulerUnits: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 1 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI5_OpenToView: 54 804 2 1146 827 58 1 1 3 40 +%AI5_OpenViewLayers: 7 +%%EndComments +%%BeginProlog +%%BeginResource: procset Adobe_level2_AI5 1.2 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) +%%Version: 1.2 +%%CreationDate: (04/10/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +userdict /Adobe_level2_AI5 23 dict dup begin + put + /packedarray where not + { + userdict begin + /packedarray + { + array astore readonly + } bind def + /setpacking /pop load def + /currentpacking false def + end + 0 + } if + pop + userdict /defaultpacking currentpacking put true setpacking + /initialize + { + Adobe_level2_AI5 begin + } bind def + /terminate + { + currentdict Adobe_level2_AI5 eq + { + end + } if + } bind def + mark + /setcustomcolor where not + { + /findcmykcustomcolor + { + 5 packedarray + } bind def + /setcustomcolor + { + exch aload pop pop + 4 + { + 4 index mul 4 1 roll + } repeat + 5 -1 roll pop + setcmykcolor + } + def + } if + + /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def + userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put + userdict /level2? + systemdict /languagelevel known dup + { + pop systemdict /languagelevel get 2 ge + } if + put +/level2ScreenFreq +{ + begin + 60 + HalftoneType 1 eq + { + pop Frequency + } if + HalftoneType 2 eq + { + pop GrayFrequency + } if + HalftoneType 5 eq + { + pop Default level2ScreenFreq + } if + end +} bind def +userdict /currentScreenFreq + level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put +level2? not + { + /setcmykcolor where not + { + /setcmykcolor + { + exch .11 mul add exch .59 mul add exch .3 mul add + 1 exch sub setgray + } def + } if + /currentcmykcolor where not + { + /currentcmykcolor + { + 0 0 0 1 currentgray sub + } def + } if + /setoverprint where not + { + /setoverprint /pop load def + } if + /selectfont where not + { + /selectfont + { + exch findfont exch + dup type /arraytype eq + { + makefont + } + { + scalefont + } ifelse + setfont + } bind def + } if + /cshow where not + { + /cshow + { + [ + 0 0 5 -1 roll aload pop + ] cvx bind forall + } bind def + } if + } if + cleartomark + /anyColor? + { + add add add 0 ne + } bind def + /testColor + { + gsave + setcmykcolor currentcmykcolor + grestore + } bind def + /testCMYKColorThrough + { + testColor anyColor? + } bind def + userdict /composite? + level2? + { + gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore + add add add 4 eq + } + { + 1 0 0 0 testCMYKColorThrough + 0 1 0 0 testCMYKColorThrough + 0 0 1 0 testCMYKColorThrough + 0 0 0 1 testCMYKColorThrough + and and and + } ifelse + put + composite? not + { + userdict begin + gsave + /cyan? 1 0 0 0 testCMYKColorThrough def + /magenta? 0 1 0 0 testCMYKColorThrough def + /yellow? 0 0 1 0 testCMYKColorThrough def + /black? 0 0 0 1 testCMYKColorThrough def + grestore + /isCMYKSep? cyan? magenta? yellow? black? or or or def + /customColor? isCMYKSep? not def + end + } if + end defaultpacking setpacking +%%EndResource +%%BeginResource: procset Adobe_typography_AI5 1.0 1 +%%Title: (Typography Operators) +%%Version: 1.0 +%%CreationDate:(03/26/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_typography_AI5 54 dict dup begin +put +/initialize +{ + begin + begin + Adobe_typography_AI5 begin + Adobe_typography_AI5 + { + dup xcheck + { + bind + } if + pop pop + } forall + end + end + end + Adobe_typography_AI5 begin +} def +/terminate +{ + currentdict Adobe_typography_AI5 eq + { + end + } if +} def +/modifyEncoding +{ + /_tempEncode exch ddef + /_pntr 0 ddef + { + counttomark -1 roll + dup type dup /marktype eq + { + pop pop exit + } + { + /nametype eq + { + _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll + put + } + { + /_pntr exch ddef + } ifelse + } ifelse + } loop + _tempEncode +} def +/TE +{ + StandardEncoding 256 array copy modifyEncoding + /_nativeEncoding exch def +} def +% +/TZ +{ + dup type /arraytype eq + { + /_wv exch def + } + { + /_wv 0 def + } ifelse + /_useNativeEncoding exch def + pop pop + findfont _wv type /arraytype eq + { + _wv makeblendedfont + } if + dup length 2 add dict + begin + mark exch + { + 1 index /FID ne + { + def + } if + cleartomark mark + } forall + pop + /FontName exch def + counttomark 0 eq + { + 1 _useNativeEncoding eq + { + /Encoding _nativeEncoding def + } if + cleartomark + } + { + /Encoding load 256 array copy + modifyEncoding /Encoding exch def + } ifelse + FontName currentdict + end + definefont pop +} def +/tr +{ + _ax _ay 3 2 roll +} def +/trj +{ + _cx _cy _sp _ax _ay 6 5 roll +} def +/a0 +{ + /Tx + { + dup + currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + } ddef + /Tj + { + dup + currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + } ddef +} def +/a1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/e0 +{ + /Tx + { + tr _psf + } ddef + /Tj + { + trj _pjsf + } ddef +} def +/e1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + tr _psf + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + trj _pjsf + grestore 3 1 roll moveto tr jsp + } ddef +} def +/i0 +{ + /Tx + { + tr sp + } ddef + /Tj + { + trj jsp + } ddef +} def +/i1 +{ + W N +} def +/o0 +{ + /Tx + { + tr sw rmoveto + } ddef + /Tj + { + trj swj rmoveto + } ddef +} def +/r0 +{ + /Tx + { + tr _ctm _pss + } ddef + /Tj + { + trj _ctm _pjss + } ddef +} def +/r1 +{ + /Tx + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/To +{ + pop _ctm currentmatrix pop +} def +/TO +{ + iTe _ctm setmatrix newpath +} def +/Tp +{ + pop _tm astore pop _ctm setmatrix + _tDict begin + /W + { + } def + /h + { + } def +} def +/TP +{ + end + iTm 0 0 moveto +} def +/Tr +{ + _render 3 le + { + currentpoint newpath moveto + } if + dup 8 eq + { + pop 0 + } + { + dup 9 eq + { + pop 1 + } if + } ifelse + dup /_render exch ddef + _renderStart exch get load exec +} def +/iTm +{ + _ctm setmatrix _tm concat 0 _rise translate _hs 1 scale +} def +/Tm +{ + _tm astore pop iTm 0 0 moveto +} def +/Td +{ + _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto +} def +/iTe +{ + _render -1 eq + { + } + { + _renderEnd _render get dup null ne + { + load exec + } + { + pop + } ifelse + } ifelse + /_render -1 ddef +} def +/Ta +{ + pop +} def +/Tf +{ + dup 1000 div /_fScl exch ddef +% + selectfont +} def +/Tl +{ + pop + 0 exch _leading astore pop +} def +/Tt +{ + pop +} def +/TW +{ + 3 npop +} def +/Tw +{ + /_cx exch ddef +} def +/TC +{ + 3 npop +} def +/Tc +{ + /_ax exch ddef +} def +/Ts +{ + /_rise exch ddef + currentpoint + iTm + moveto +} def +/Ti +{ + 3 npop +} def +/Tz +{ + 100 div /_hs exch ddef + iTm +} def +/TA +{ + pop +} def +/Tq +{ + pop +} def +/Th +{ + pop pop pop pop pop +} def +/TX +{ + pop +} def +/Tk +{ + exch pop _fScl mul neg 0 rmoveto +} def +/TK +{ + 2 npop +} def +/T* +{ + _leading aload pop neg Td +} def +/T*- +{ + _leading aload pop Td +} def +/T- +{ + _ax neg 0 rmoveto + _hyphen Tx +} def +/T+ +{ +} def +/TR +{ + _ctm currentmatrix pop + _tm astore pop + iTm 0 0 moveto +} def +/TS +{ + currentfont 3 1 roll + /_Symbol_ _fScl 1000 mul selectfont + + 0 eq + { + Tx + } + { + Tj + } ifelse + setfont +} def +/Xb +{ + pop pop +} def +/Tb /Xb load def +/Xe +{ + pop pop pop pop +} def +/Te /Xe load def +/XB +{ +} def +/TB /XB load def +currentdict readonly pop +end +setpacking +%%EndResource +%%BeginProcSet: Adobe_ColorImage_AI6 1.0 0 +userdict /Adobe_ColorImage_AI6 known not +{ + userdict /Adobe_ColorImage_AI6 17 dict put +} if +userdict /Adobe_ColorImage_AI6 get begin + + /initialize + { + Adobe_ColorImage_AI6 begin + Adobe_ColorImage_AI6 + { + dup type /arraytype eq + { + dup xcheck + { + bind + } if + } if + pop pop + } forall + } def + /terminate { end } def + + currentdict /Adobe_ColorImage_AI6_Vars known not + { + /Adobe_ColorImage_AI6_Vars 14 dict def + } if + + Adobe_ColorImage_AI6_Vars begin + /channelcount 0 def + /sourcecount 0 def + /sourcearray 4 array def + /plateindex -1 def + /XIMask 0 def + /XIBinary 0 def + /XIChannelCount 0 def + /XIBitsPerPixel 0 def + /XIImageHeight 0 def + /XIImageWidth 0 def + /XIImageMatrix null def + /XIBuffer null def + /XIDataProc null def + end + + /WalkRGBString null def + /WalkCMYKString null def + + /StuffRGBIntoGrayString null def + /RGBToGrayImageProc null def + /StuffCMYKIntoGrayString null def + /CMYKToGrayImageProc null def + /ColorImageCompositeEmulator null def + + /SeparateCMYKImageProc null def + + /FourEqual null def + /TestPlateIndex null def + + currentdict /_colorimage known not + { + /colorimage where + { + /colorimage get /_colorimage exch def + } + { + /_colorimage null def + } ifelse + } if + + /_currenttransfer systemdict /currenttransfer get def + + /colorimage null def + /XI null def + + + /WalkRGBString + { + 0 3 index + + dup length 1 sub 0 3 3 -1 roll + { + 3 getinterval { } forall + + 5 index exec + + 3 index + } for + + 5 { pop } repeat + + } def + + + /WalkCMYKString + { + 0 3 index + + dup length 1 sub 0 4 3 -1 roll + { + 4 getinterval { } forall + + 6 index exec + + 3 index + + } for + + 5 { pop } repeat + + } def + + + /StuffRGBIntoGrayString + { + .11 mul exch + + .59 mul add exch + + .3 mul add + + cvi 3 copy put + + pop 1 add + } def + + + /RGBToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 3 idiv string + dup 3 1 roll + + /StuffRGBIntoGrayString load exch + WalkRGBString + end + } def + + + /StuffCMYKIntoGrayString + { + exch .11 mul add + + exch .59 mul add + + exch .3 mul add + + dup 255 gt { pop 255 } if + + 255 exch sub cvi 3 copy put + + pop 1 add + } def + + + /CMYKToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 4 idiv string + dup 3 1 roll + + /StuffCMYKIntoGrayString load exch + WalkCMYKString + end + } def + + + /ColorImageCompositeEmulator + { + pop true eq + { + Adobe_ColorImage_AI6_Vars /sourcecount get 5 add { pop } repeat + } + { + Adobe_ColorImage_AI6_Vars /channelcount get 1 ne + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 3 -1 roll put + + channelcount 3 eq + { + /RGBToGrayImageProc + } + { + /CMYKToGrayImageProc + } ifelse + load + end + } if + image + } ifelse + } def + + + /SeparateCMYKImageProc + { + Adobe_ColorImage_AI6_Vars begin + + sourcecount 0 ne + { + sourcearray plateindex get exec + } + { + sourcearray 0 get exec + + dup length 4 idiv string + + 0 2 index + + plateindex 4 2 index length 1 sub + { + get 255 exch sub + + 3 copy put pop 1 add + + 2 index + } for + + pop pop exch pop + } ifelse + end + } def + + + /FourEqual + { + 4 index ne + { + pop pop pop false + } + { + 4 index ne + { + pop pop false + } + { + 4 index ne + { + pop false + } + { + 4 index eq + } ifelse + } ifelse + } ifelse + } def + + + /TestPlateIndex + { + Adobe_ColorImage_AI6_Vars begin + /plateindex -1 def + + /setcmykcolor where + { + pop + gsave + 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub + grestore + + 1 0 0 0 FourEqual + { + /plateindex 0 def + } + { + 0 1 0 0 FourEqual + { + /plateindex 1 def + } + { + 0 0 1 0 FourEqual + { + /plateindex 2 def + } + { + 0 0 0 1 FourEqual + { + /plateindex 3 def + } + { + 0 0 0 0 FourEqual + { + /plateindex 5 def + } if + } ifelse + } ifelse + } ifelse + } ifelse + pop pop pop pop + } if + plateindex + end + } def + + + /colorimage + { + Adobe_ColorImage_AI6_Vars begin + /channelcount 1 index def + /sourcecount 2 index 1 eq { channelcount 1 sub } { 0 } ifelse def + + 4 sourcecount add index dup + 8 eq exch 1 eq or not + end + + { + /_colorimage load null ne + { + _colorimage + } + { + Adobe_ColorImage_AI6_Vars /sourcecount get + 7 add { pop } repeat + } ifelse + } + { + dup 3 eq + TestPlateIndex + dup -1 eq exch 5 eq or or + { + /_colorimage load null eq + { + ColorImageCompositeEmulator + } + { + dup 1 eq + { + pop pop image + } + { + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + gsave + + 0 _currenttransfer exec + 1 _currenttransfer exec + eq + { 0 _currenttransfer exec 0.5 lt } + { 0 _currenttransfer exec 1 _currenttransfer exec gt } ifelse + + { { pop 0 } } { { pop 1 } } ifelse + systemdict /settransfer get exec + } if + + _colorimage + + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + grestore + } if + } ifelse + } ifelse + } + { + dup 1 eq + { + pop pop + image + } + { + pop pop + + Adobe_ColorImage_AI6_Vars begin + sourcecount -1 0 + { + exch sourcearray 3 1 roll put + } for + + /SeparateCMYKImageProc load + end + + systemdict /image get exec + } ifelse + } ifelse + } ifelse + } def + + /XI + { + Adobe_ColorImage_AI6_Vars begin + gsave + /XIMask exch 0 ne def + /XIBinary exch 0 ne def + pop + pop + /XIChannelCount exch def + /XIBitsPerPixel exch def + /XIImageHeight exch def + /XIImageWidth exch def + pop pop pop pop + /XIImageMatrix exch def + + XIBitsPerPixel 1 eq + { + XIImageWidth 8 div ceiling cvi + } + { + XIImageWidth XIChannelCount mul + } ifelse + /XIBuffer exch string def + + XIBinary + { + /XIDataProc { currentfile XIBuffer readstring pop } def + currentfile 128 string readline pop pop + } + { + /XIDataProc { currentfile XIBuffer readhexstring pop } def + } ifelse + + 0 0 moveto + XIImageMatrix concat + XIImageWidth XIImageHeight scale + + XIMask + { + XIImageWidth XIImageHeight + false + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + /_lp /null ddef + _fc + /_lp /imagemask ddef + + imagemask + } + { + XIImageWidth XIImageHeight + XIBitsPerPixel + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + XIChannelCount 1 eq + { + + gsave + 0 setgray + + image + + grestore + } + { + false + XIChannelCount + colorimage + } ifelse + } ifelse + grestore + end + } def + +end +%%EndProcSet +%%BeginResource: procset Adobe_Illustrator_AI5 1.1 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Full Prolog) +%%Version: 1.1 +%%CreationDate: (3/7/1994) () +%%Copyright: ((C) 1987-1994 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_Illustrator_AI5_vars 81 dict dup begin +put +/_eo false def +/_lp /none def +/_pf +{ +} def +/_ps +{ +} def +/_psf +{ +} def +/_pss +{ +} def +/_pjsf +{ +} def +/_pjss +{ +} def +/_pola 0 def +/_doClip 0 def +/cf currentflat def +/_tm matrix def +/_renderStart +[ +/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 +] def +/_renderEnd +[ +null null null null /i1 /i1 /i1 /i1 +] def +/_render -1 def +/_rise 0 def +/_ax 0 def +/_ay 0 def +/_cx 0 def +/_cy 0 def +/_leading +[ +0 0 +] def +/_ctm matrix def +/_mtx matrix def +/_sp 16#020 def +/_hyphen (-) def +/_fScl 0 def +/_cnt 0 def +/_hs 1 def +/_nativeEncoding 0 def +/_useNativeEncoding 0 def +/_tempEncode 0 def +/_pntr 0 def +/_tDict 2 dict def +/_wv 0 def +/Tx +{ +} def +/Tj +{ +} def +/CRender +{ +} def +/_AI3_savepage +{ +} def +/_gf null def +/_cf 4 array def +/_if null def +/_of false def +/_fc +{ +} def +/_gs null def +/_cs 4 array def +/_is null def +/_os false def +/_sc +{ +} def +/_pd 1 dict def +/_ed 15 dict def +/_pm matrix def +/_fm null def +/_fd null def +/_fdd null def +/_sm null def +/_sd null def +/_sdd null def +/_i null def +/discardSave null def +/buffer 256 string def +/beginString null def +/endString null def +/endStringLength null def +/layerCnt 1 def +/layerCount 1 def +/perCent (%) 0 get def +/perCentSeen? false def +/newBuff null def +/newBuffButFirst null def +/newBuffLast null def +/clipForward? false def +end +userdict /Adobe_Illustrator_AI5 known not { + userdict /Adobe_Illustrator_AI5 91 dict put +} if +userdict /Adobe_Illustrator_AI5 get begin +/initialize +{ + Adobe_Illustrator_AI5 dup begin + Adobe_Illustrator_AI5_vars begin + discardDict + { + bind pop pop + } forall + dup /nc get begin + { + dup xcheck 1 index type /operatortype ne and + { + bind + } if + pop pop + } forall + end + newpath +} def +/terminate +{ + end + end +} def +/_ +null def +/ddef +{ + Adobe_Illustrator_AI5_vars 3 1 roll put +} def +/xput +{ + dup load dup length exch maxlength eq + { + dup dup load dup + length 2 mul dict copy def + } if + load begin + def + end +} def +/npop +{ + { + pop + } repeat +} def +/sw +{ + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add +} def +/swj +{ + dup 4 1 roll + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add + 6 2 roll /_cnt 0 ddef + { + 1 index eq + { + /_cnt _cnt 1 add ddef + } if + } forall + pop + exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop +} def +/ss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put pop + gsave + false charpath currentpoint + 4 index setmatrix + stroke + grestore + moveto + 2 copy rmoveto + } exch cshow + 3 npop +} def +/jss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put + gsave + _sp eq + { + exch 6 index 6 index 6 index 5 -1 roll widthshow + currentpoint + } + { + false charpath currentpoint + 4 index setmatrix stroke + } ifelse + grestore + moveto + 2 copy rmoveto + } exch cshow + 6 npop +} def +/sp +{ + { + 2 npop (0) exch + 2 copy 0 exch put pop + false charpath + 2 copy rmoveto + } exch cshow + 2 npop +} def +/jsp +{ + { + 2 npop + (0) exch 2 copy 0 exch put + _sp eq + { + exch 5 index 5 index 5 index 5 -1 roll widthshow + } + { + false charpath + } ifelse + 2 copy rmoveto + } exch cshow + 5 npop +} def +/pl +{ + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform +} def +/setstrokeadjust where +{ + pop true setstrokeadjust + /c + { + curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll curveto + } def + /V + /v load def + /y + { + 2 copy curveto + } def + /Y + /y load def + /l + { + lineto + } def + /L + /l load def + /m + { + moveto + } def +} +{ + /c + { + pl curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll pl curveto + } def + /V + /v load def + /y + { + pl 2 copy curveto + } def + /Y + /y load def + /l + { + pl lineto + } def + /L + /l load def + /m + { + pl moveto + } def +} ifelse +/d +{ + setdash +} def +/cf +{ +} def +/i +{ + dup 0 eq + { + pop cf + } if + setflat +} def +/j +{ + setlinejoin +} def +/J +{ + setlinecap +} def +/M +{ + setmiterlimit +} def +/w +{ + setlinewidth +} def +/XR +{ + 0 ne + /_eo exch ddef +} def +/H +{ +} def +/h +{ + closepath +} def +/N +{ + _pola 0 eq + { + _doClip 1 eq + { + _eo {eoclip} {clip} ifelse /_doClip 0 ddef + } if + newpath + } + { + /CRender + { + N + } ddef + } ifelse +} def +/n +{ + N +} def +/F +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc + /_doClip 0 ddef + } + { + _pf + } ifelse + } + { + /CRender + { + F + } ddef + } ifelse +} def +/f +{ + closepath + F +} def +/S +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + _ps + } ifelse + } + { + /CRender + { + S + } ddef + } ifelse +} def +/s +{ + closepath + S +} def +/B +{ + _pola 0 eq + { + _doClip 1 eq + gsave F grestore + { + gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + S + } ifelse + } + { + /CRender + { + B + } ddef + } ifelse +} def +/b +{ + closepath + B +} def +/W +{ + /_doClip 1 ddef +} def +/* +{ + count 0 ne + { + dup type /stringtype eq + { + pop + } if + } if + newpath +} def +/u +{ +} def +/U +{ +} def +/q +{ + _pola 0 eq + { + gsave + } if +} def +/Q +{ + _pola 0 eq + { + grestore + } if +} def +/*u +{ + _pola 1 add /_pola exch ddef +} def +/*U +{ + _pola 1 sub /_pola exch ddef + _pola 0 eq + { + CRender + } if +} def +/D +{ + pop +} def +/*w +{ +} def +/*W +{ +} def +/` +{ + /_i save ddef + clipForward? + { + nulldevice + } if + 6 1 roll 4 npop + concat pop + userdict begin + /showpage + { + } def + 0 setgray + 0 setlinecap + 1 setlinewidth + 0 setlinejoin + 10 setmiterlimit + [] 0 setdash + /setstrokeadjust where {pop false setstrokeadjust} if + newpath + 0 setgray + false setoverprint +} def +/~ +{ + end + _i restore +} def +/O +{ + 0 ne + /_of exch ddef + /_lp /none ddef +} def +/R +{ + 0 ne + /_os exch ddef + /_lp /none ddef +} def +/g +{ + /_gf exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _gf setgray + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/G +{ + /_gs exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _gs setgray + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/k +{ + _cf astore pop + /_fc + { + _lp /fill ne + { + _of setoverprint + _cf aload pop setcmykcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/K +{ + _cs astore pop + /_sc + { + _lp /stroke ne + { + _os setoverprint + _cs aload pop setcmykcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/x +{ + /_gf exch ddef + findcmykcustomcolor + /_if exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _if _gf 1 exch sub setcustomcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/X +{ + /_gs exch ddef + findcmykcustomcolor + /_is exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _is _gs 1 exch sub setcustomcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/A +{ + pop +} def +/annotatepage +{ +userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse +} def +/XT { + pop pop +} def +/discard +{ + save /discardSave exch store + discardDict begin + /endString exch store + gt38? + { + 2 add + } if + load + stopped + pop + end + discardSave restore +} bind def +userdict /discardDict 7 dict dup begin +put +/pre38Initialize +{ + /endStringLength endString length store + /newBuff buffer 0 endStringLength getinterval store + /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store + /newBuffLast newBuff endStringLength 1 sub 1 getinterval store +} def +/shiftBuffer +{ + newBuff 0 newBuffButFirst putinterval + newBuffLast 0 + currentfile read not + { + stop + } if + put +} def +0 +{ + pre38Initialize + mark + currentfile newBuff readstring exch pop + { + { + newBuff endString eq + { + cleartomark stop + } if + shiftBuffer + } loop + } + { + stop + } ifelse +} def +1 +{ + pre38Initialize + /beginString exch store + mark + currentfile newBuff readstring exch pop + { + { + newBuff beginString eq + { + /layerCount dup load 1 add store + } + { + newBuff endString eq + { + /layerCount dup load 1 sub store + layerCount 0 eq + { + cleartomark stop + } if + } if + } ifelse + shiftBuffer + } loop + } if +} def +2 +{ + mark + { + currentfile buffer readline not + { + stop + } if + endString eq + { + cleartomark stop + } if + } loop +} def +3 +{ + /beginString exch store + /layerCnt 1 store + mark + { + currentfile buffer readline not + { + stop + } if + dup beginString eq + { + pop /layerCnt dup load 1 add store + } + { + endString eq + { + layerCnt 1 eq + { + cleartomark stop + } + { + /layerCnt dup load 1 sub store + } ifelse + } if + } ifelse + } loop +} def +end +userdict /clipRenderOff 15 dict dup begin +put +{ + /n /N /s /S /f /F /b /B +} +{ + { + _doClip 1 eq + { + /_doClip 0 ddef _eo {eoclip} {clip} ifelse + } if + newpath + } def +} forall +/Tr /pop load def +/Bb {} def +/BB /pop load def +/Bg {12 npop} def +/Bm {6 npop} def +/Bc /Bm load def +/Bh {4 npop} def +end +/Lb +{ + 4 npop + 6 1 roll + pop + 4 1 roll + pop pop pop + 0 eq + { + 0 eq + { + (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard + } + { + + /clipForward? true def + + /Tx /pop load def + /Tj /pop load def + + currentdict end clipRenderOff begin begin + } ifelse + } + { + 0 eq + { + save /discardSave exch store + } if + } ifelse +} bind def +/LB +{ + discardSave dup null ne + { + restore + } + { + pop + clipForward? + { + currentdict + end + end + begin + + /clipForward? false ddef + } if + } ifelse +} bind def +/Pb +{ + pop pop + 0 (%AI5_EndPalette) discard +} bind def +/Np +{ + 0 (%AI5_End_NonPrinting--) discard +} bind def +/Ln /pop load def +/Ap +/pop load def +/Ar +{ + 72 exch div + 0 dtransform dup mul exch dup mul add sqrt + dup 1 lt + { + pop 1 + } if + setflat +} def +/Mb +{ + q +} def +/Md +{ +} def +/MB +{ + Q +} def +/nc 3 dict def +nc begin +/setgray +{ + pop +} bind def +/setcmykcolor +{ + 4 npop +} bind def +/setcustomcolor +{ + 2 npop +} bind def +currentdict readonly pop +end +end +setpacking +%%EndResource +%%EndProlog +%%BeginSetup +%%IncludeFont: Univers +Adobe_level2_AI5 /initialize get exec +Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_typography_AI5 /initialize get exec +Adobe_ColorImage_AI6 /initialize get exec +Adobe_Illustrator_AI5 /initialize get exec +[ +39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis +/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute +/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde +/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex +/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls +/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash +/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef +/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash +/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef +/guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe +/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide +/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright +/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand +/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex +/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex +/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla +/hungarumlaut/ogonek/caron +TE +%AI3_BeginEncoding: _Univers Univers +[/_Univers/Univers 0 0 1 TZ +%AI3_EndEncoding AdobeType +%AI5_Begin_NonPrinting +Np +8 Bn +%AI5_BeginGradient: (Black & White) +(Black & White) 0 2 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Green & Blue) +(Green & Blue) 0 2 Bd +[ +< +99999A9A9B9B9B9C9C9D9D9D9E9E9F9F9FA0A0A1A1A1A2A2A3A3A3A4A4A5A5A5A6A6A7A7A7A8A8A9 +A9A9AAAAABABABACACADADADAEAEAFAFAFB0B0B1B1B1B2B2B3B3B3B4B4B5B5B5B6B6B7B7B7B8B8B9 +B9B9BABABBBBBBBCBCBDBDBDBEBEBFBFBFC0C0C1C1C1C2C2C3C3C3C4C4C5C5C5C6C6C7C7C7C8C8C9 +C9C9CACACBCBCBCCCCCDCDCDCECECFCFCFD0D0D1D1D1D2D2D3D3D3D4D4D5D5D5D6D6D7D7D7D8D8D9 +D9D9DADADBDBDBDCDCDDDDDDDEDEDFDFDFE0E0E1E1E1E2E2E3E3E3E4E4E5E5E5E6E6E7E7E7E8E8E9 +E9E9EAEAEBEBEBECECEDEDEDEEEEEFEFEFF0F0F1F1F1F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F9 +F9F9FAFAFBFBFBFCFCFDFDFDFEFEFFFF +> +< +000102020304050506070808090A0B0B0C0D0E0E0F101111121314141516171718191A1A1B1C1D1D +1E1F20202122232324252626272829292A2B2C2C2D2E2F2F303132323334353536373838393A3B3B +3C3D3E3E3F404141424344444546474748494A4A4B4C4D4D4E4F5050515253535455565657585959 +5A5B5C5C5D5E5F5F606162626364656566676868696A6B6B6C6D6E6E6F7071717273747475767777 +78797A7A7B7C7D7D7E7F80808182828384858586878888898A8B8B8C8D8E8E8F9091919293949495 +96979798999A9A9B9C9D9D9E9FA0A0A1A2A3A3A4A5A6A6A7A8A9A9AAABACACADAEAFAFB0B1B2B2B3 +B4B5B5B6B7B8B8B9BABBBBBCBDBEBEBF +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +[ +1 0.75 0 0 1 50 100 %_Bs +0.6 0 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Pink, Yellow, Green) +(Pink, Yellow, Green) 0 3 Bd +[ +< +00000000000000000000000000000000000000010101010101010101010101010101010101010101 +01010101010202020202020202020202020202020202020202020203030303030303030303030303 +03030303030303030404040404040404040404040404040404040404050505050505050505050505 +05050505050505060606060606060606060606060606060606060707070707070707070707070707 +07070707080808080808080808080808080808080809090909090909090909090909090909090A0A +0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C +0C0C0C0C0C0C0C0D0D0D0D0D +> +< +050506060606070708080809090A0A0A0B0B0C0C0D0D0E0E0F0F1010111112121313141415151617 +17181819191A1A1B1C1C1D1D1E1F1F202021222223232425252626272828292A2A2B2C2C2D2D2E2F +2F3031313233333435353637373839393A3B3B3C3D3E3E3F4040414242434445454647474849494A +4B4C4C4D4E4F4F505151525354545556575758595A5A5B5C5C5D5E5F5F6061626363646566666768 +69696A6B6C6C6D6E6F707071727373747576777778797A7B7B7C7D7E7F7F80818283838485868787 +88898A8B8B8C8D8E8F8F9091929394949596979898999A9B9C9D9D9E9FA0A1A2A2A3A4A5A6A7A7A8 +A9AAABACADADAEAFB0B1B2B2 +> +< +CCCCCBCBCBCACACAC9C9C8C8C7C7C6C6C5C5C4C4C3C2C2C1C1C0C0BFBEBEBDBDBCBBBBBAB9B9B8B7 +B7B6B6B5B4B4B3B2B1B1B0AFAFAEADADACABAAAAA9A8A8A7A6A5A5A4A3A2A2A1A0A09F9E9D9C9C9B +9A999998979696959493929291908F8E8E8D8C8B8A8A8988878686858483828181807F7E7D7C7C7B +7A7978777776757473727171706F6E6D6C6B6A6A69686766656463636261605F5E5D5C5B5B5A5958 +5756555453525151504F4E4D4C4B4A49484746464544434241403F3E3D3C3B3A3938383736353433 +3231302F2E2D2C2B2A29282726252423222221201F1E1D1C1B1A191817161514131211100F0E0D0C +0B0A09080706050403020100 +> +0 +1 %_Br +< +737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5B5A59585756555453525150504F4E +4D4C4B4A4949484746454443434241403F3E3E3D3C3B3A3A393837363635343333323130302F2E2D +2D2C2B2A2A29282827262525242323222121201F1F1E1D1D1C1C1B1A1A1918181717161615141413 +1312121111100F0F0E0E0D0D0C0C0C0B0B0A0A090908080807070606060505050404040303030202 +020201010101010000000000 +> +< +00000000000000000000000001010101010101010101010101010101010101010101010102020202 +02020202020202020202020202020202020202020202030303030303030303030303030303030303 +03030303030303030303030303040404040404040404040404040404040404040404040404040404 +04040404040404040404050505050505050505050505050505050505050505050505050505050505 +050505050505050505050505 +> +< +BFBFBFC0C0C0C0C0C0C0C0C0C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C2C2C3C3C3C3C3C3C3C3C3 +C3C4C4C4C4C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C6C6C6C7C7C7C7C7C7 +C7C7C7C7C7C7C8C8C8C8C8C8C8C8C8C8C8C8C8C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9CACACACACACA +CACACACACACACACACACACBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCCCCCCCCCC +> +0 +1 %_Br +[ +0.05 0.7 0 0 1 50 100 %_Bs +0 0.02 0.8 0 1 57 36 %_Bs +0.45 0 0.75 0 1 37 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Purple, Red & Yellow) +(Purple, Red & Yellow) 0 3 Bd +[ +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A +> +< +CCCCCCCDCDCDCDCDCECECECECECFCFCFCFD0D0D0D0D0D1D1D1D1D1D2D2D2D2D2D3D3D3D3D3D4D4D4 +D4D5D5D5D5D5D6D6D6D6D6D7D7D7D7D7D8D8D8D8D8D9D9D9D9DADADADADADBDBDBDBDBDCDCDCDCDC +DDDDDDDDDDDEDEDEDEDFDFDFDFDFE0E0E0E0E0E1E1E1E1E1E2E2E2E2E2E3E3E3E3E4E4E4E4E4E5E5 +E5E5E5E6E6E6E6E6E7E7E7E7E7E8E8E8E8E9E9E9E9E9EAEAEAEAEAEBEBEBEBEBECECECECECEDEDED +EDEEEEEEEEEEEFEFEFEFEFF0F0F0F0F0F1F1F1F1F1F2F2F2F2F3F3F3F3F3F4F4F4F4F4F5F5F5F5F5 +F6F6F6F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFAFAFBFBFBFBFBFCFCFCFCFDFDFDFDFDFEFE +FEFEFEFFFFFF +> +0 +1 %_Br +< +E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBE +BDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A99989796 +9594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B7A797877767574737271706F6E +6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A49484746 +4544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E +1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403020100 +> +< +E5E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9EAEAEAEA +EAEAEAEAEAEBEBEBEBEBEBEBEBEBECECECECECECECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEE +EEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F3F3F3 +F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 +F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFCFC +FCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFF +> +< +00010203040405060708090A0B0C0C0D0E0F10111213141415161718191A1B1C1D1D1E1F20212223 +242525262728292A2B2C2D2D2E2F30313233343535363738393A3B3C3D3D3E3F4041424344454546 +4748494A4B4C4D4E4E4F50515253545556565758595A5B5C5D5E5E5F60616263646566666768696A +6B6C6D6E6E6F70717273747576767778797A7B7C7D7E7F7F80818283848586878788898A8B8C8D8E +8F8F90919293949596979798999A9B9C9D9E9F9FA0A1A2A3A4A5A6A7A7A8A9AAABACADAEAFAFB0B1 +B2B3B4B5B6B7B8B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C8C9CACBCC +> +0 +1 %_Br +[ +0 0.04 1 0 1 50 100 %_Bs +0 1 0.8 0 1 50 50 %_Bs +0.9 0.9 0 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Rainbow) +(Rainbow) 0 6 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +0 +1 %_Br +1 +< +0708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E +2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556 +5758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E +7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6 +A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCE +CFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6 +F7F8F9FAFBFCFDFEFF +> +0 +0 +1 %_Br +1 +< +00000000000000000000000000000000000001010101010101010101010101010101010101010101 +01010101010101010101010101010202020202020202020202020202020202020202020202020202 +02020202020202020202030303030303030303030303030303030303030303030303030303030303 +03030303030304040404040404040404040404040404040404040404040404040404040404040404 +04040505050505050505050505050505050505050505050505050505050505050505050505050606 +06060606060606060606060606060606060606060606060606060606060606060606070707070707 +07070707070707070707070707070707 +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 +1 +0 +1 %_Br +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +1 %_Br +[ +0 1 0 0 1 50 100 %_Bs +1 1 0 0 1 50 80 %_Bs +1 0.0279 0 0 1 50 60 %_Bs +1 0 1 0 1 50 40 %_Bs +0 0 1 0 1 50 20 %_Bs +0 1 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Steel Bar) +(Steel Bar) 0 3 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 70 %_Bs +0 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Orange Radial) +(Yellow & Orange Radial) 1 2 Bd +[ +0 +< +0001010203040506060708090A0B0C0C0D0E0F10111213131415161718191A1B1C1D1D1E1F202122 +232425262728292A2B2B2C2D2E2F303132333435363738393A3B3C3D3E3E3F404142434445464748 +494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60606162636465666768696A6B6C6D6E6F +707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C +> +< +FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9 +F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2 +F2F2F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEDEDEDEDEDEDECECECECECEBEBEBEBEB +EBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E8E8E8E7E7E7E7E7E6E6E6E6E6E5 +> +0 +1 %_Br +[ +0 0 1 0 1 52 19 %_Bs +0 0.55 0.9 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Purple Radial) +(Yellow & Purple Radial) 1 2 Bd +[ +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +< +1415161718191A1B1C1D1E1F1F202122232425262728292A2A2B2C2D2E2F30313233343536363738 +393A3B3C3D3E3F40414142434445464748494A4B4C4D4D4E4F50515253545556575858595A5B5C5D +5E5F60616263646465666768696A6B6C6D6E6F6F707172737475767778797A7B7B7C7D7E7F808182 +83848586868788898A8B8C8D8E8F90919292939495969798999A9B9C9D9D9E9FA0A1A2A3A4A5A6A7 +A8A9A9AAABACADAEAFB0B1B2B3B4B4B5B6B7B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C9CACBCB +CCCDCECFD0D1D2D3D4D5D6D7D7D8D9DADBDCDDDEDFE0E1E2E2E3E4E5E6E7E8E9EAEBECEDEEEEEFF0 +F1F2F3F4F5F6F7F8F9F9FAFBFCFDFEFF +> +< +ABAAAAA9A8A7A7A6A5A5A4A3A3A2A1A1A09F9F9E9D9D9C9B9B9A9999989797969595949393929191 +908F8F8E8D8D8C8B8B8A8989888787868585848383828181807F7F7E7D7D7C7B7B7A797978777776 +7575747373727171706F6F6E6D6D6C6B6B6A6969686767666565646362626160605F5E5E5D5C5C5B +5A5A5958585756565554545352525150504F4E4E4D4C4C4B4A4A4948484746464544444342424140 +403F3E3E3D3C3C3B3A3A3938383736363534343332323130302F2E2E2D2C2C2B2A2A292828272626 +25242423222121201F1F1E1D1D1C1B1B1A1919181717161515141313121111100F0F0E0D0D0C0B0B +0A090908070706050504030302010100 +> +0 +1 %_Br +[ +0 0.08 0.67 0 1 50 14 %_Bs +1 1 0 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_End_NonPrinting-- +%AI5_BeginPalette +0 2 Pb +Pn +Pc +1 g +Pc +0 g +Pc +0 0 0 0 k +Pc +0.75 g +Pc +0.5 g +Pc +0.25 g +Pc +0 g +Pc +Bb +2 (Black & White) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0 0 0 k +Pc +0.5 0 0 0 k +Pc +0.75 0 0 0 k +Pc +1 0 0 0 k +Pc +0.25 0.25 0 0 k +Pc +0.5 0.5 0 0 k +Pc +0.75 0.75 0 0 k +Pc +1 1 0 0 k +Pc +Bb +2 (Pink, Yellow, Green) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0 0 k +Pc +0 0.5 0 0 k +Pc +0 0.75 0 0 k +Pc +0 1 0 0 k +Pc +0 0.25 0.25 0 k +Pc +0 0.5 0.5 0 k +Pc +0 0.75 0.75 0 k +Pc +0 1 1 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Purple Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0 0.25 0 k +Pc +0 0 0.5 0 k +Pc +0 0 0.75 0 k +Pc +0 0 1 0 k +Pc +0.25 0 0.25 0 k +Pc +0.5 0 0.5 0 k +Pc +0.75 0 0.75 0 k +Pc +1 0 1 0 k +Pc +Bb +2 (Rainbow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0 0 k +Pc +0.5 0.25 0 0 k +Pc +0.75 0.375 0 0 k +Pc +1 0.5 0 0 k +Pc +0.125 0.25 0 0 k +Pc +0.25 0.5 0 0 k +Pc +0.375 0.75 0 0 k +Pc +0.5 1 0 0 k +Pc +Bb +2 (Steel Bar) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0.125 0 k +Pc +0 0.5 0.25 0 k +Pc +0 0.75 0.375 0 k +Pc +0 1 0.5 0 k +Pc +0 0.125 0.25 0 k +Pc +0 0.25 0.5 0 k +Pc +0 0.375 0.75 0 k +Pc +0 0.5 1 0 k +Pc +Bb +2 (Purple, Red & Yellow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0 0.25 0 k +Pc +0.25 0 0.5 0 k +Pc +0.375 0 0.75 0 k +Pc +0.5 0 1 0 k +Pc +0.25 0 0.125 0 k +Pc +0.5 0 0.25 0 k +Pc +0.75 0 0.375 0 k +Pc +1 0 0.5 0 k +Pc +Bb +2 (Green & Blue) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0.125 0 k +Pc +0.5 0.25 0.25 0 k +Pc +0.75 0.375 0.375 0 k +Pc +1 0.5 0.5 0 k +Pc +0.25 0.25 0.125 0 k +Pc +0.5 0.5 0.25 0 k +Pc +0.75 0.75 0.375 0 k +Pc +1 1 0.5 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Orange Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0.25 0.125 0 k +Pc +0.25 0.5 0.25 0 k +Pc +0.375 0.75 0.375 0 k +Pc +0.5 1 0.5 0 k +Pc +0.125 0.25 0.25 0 k +Pc +0.25 0.5 0.5 0 k +Pc +0.375 0.75 0.75 0 k +Pc +0.5 1 1 0 k +Pc +0 0 0 0 k +Pc +0.125 0.125 0.25 0 k +Pc +0.25 0.25 0.5 0 k +Pc +0.375 0.375 0.75 0 k +Pc +0.5 0.5 1 0 k +Pc +0.25 0.125 0.25 0 k +Pc +0.5 0.25 0.5 0 k +Pc +0.75 0.375 0.75 0 k +Pc +1 0.5 1 0 k +Pc +PB +%AI5_EndPalette +%%EndSetup +%AI5_BeginLayer +1 1 1 1 0 0 0 79 128 255 Lb +(Layer 1) Ln +0 A +800 Ar +0 J 0 j 1 w 4 M []0 d +%AI3_Note: +0 D +0 XR +-4014 283.5 m +4626 283.5 L +(N) * +453.5 4716 m +453.5 -3924 L +(N) * +85 4716 m +85 -3924 L +(N) * +-4014 765.5 m +4626 765.5 L +(N) * +0 R +0 G +113 683.5 m +439 683.5 l +S +113 663.5 m +439 663.5 l +S +113 643.5 m +439 643.5 l +S +113 686 m +439 686 l +S +1 Ap +439 624 m +439 709 L +113 709 L +113 624 L +439 624 L +s +0 Ap +178.5 709 m +178.5 624 l +S +243 709 m +243 624 l +S +374 709 m +374 624 l +S +308.5 709 m +308.5 624 l +S +0 To +1 0 0 1 146 692 0 Tp +TP +-12.2278 0 Td +0 Tr +0 O +0 g +/_Univers 10 Tf +0 Ts +100 Tz +0 Tt +1 TA +%_ 0 XL +36 0 Xb +XB +0 0 5 TC +100 100 200 TW +0 0 0 Ti +1 Ta +0 0 2 2 3 Th +0 Tq +0 0 Tl +0 Tc +0 Tw +(key 1) Tx +(\r) TX +TO +0 To +1 0 0 1 213 692 0 Tp +TP +-12.2278 0 Td +0 Tr +(key 2) Tx +(\r) TX +TO +0 To +1 0 0 1 276 692 0 Tp +TP +-11.1121 0 Td +0 Tr +(col 3) Tx +(\r) TX +TO +0 To +1 0 0 1 225.5 747.5 0 Tp +TP +0 Tr +(\r) Tx +TO +0 To +1 0 0 1 336.5 693.5 0 Tp +TP +0 Tr +(\r) Tx +TO +0 To +1 0 0 1 341 692 0 Tp +TP +-11.1121 0 Td +0 Tr +(col 4) Tx +(\r) TX +TO +0 To +1 0 0 1 407.5 692 0 Tp +TP +-11.1121 0 Td +0 Tr +(col 5) Tx +(\r) TX +TO +0 To +1 0 0 1 185.5 736 0 Tp +TP +0 Tr +(\r) Tx +TO +0 To +1 0 0 1 145 669.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(1) Tx +(\r) TX +TO +0 To +1 0 0 1 144.5 650.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(1) Tx +(\r) TX +TO +0 To +1 0 0 1 145 630 0 Tp +TP +-2.7795 0 Td +0 Tr +(2) Tx +(\r) TX +TO +0 To +1 0 0 1 209.5 669 0 Tp +TP +-2.7795 0 Td +0 Tr +(1) Tx +(\r) TX +TO +0 To +1 0 0 1 209.5 649.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(2) Tx +(\r) TX +TO +0 To +1 0 0 1 209.5 629.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(1) Tx +(\r) TX +TO +0 To +1 0 0 1 274.5 669 0 Tp +TP +-2.7795 0 Td +0 Tr +(a) Tx +(\r) TX +TO +0 To +1 0 0 1 274.5 649.5 0 Tp +TP +-3.0542 0 Td +0 Tr +(d) Tx +(\r) TX +TO +0 To +1 0 0 1 274.5 629.5 0 Tp +TP +-3.0542 0 Td +0 Tr +(g) Tx +(\r) TX +TO +0 To +1 0 0 1 340 669 0 Tp +TP +-3.0542 0 Td +0 Tr +(b) Tx +(\r) TX +TO +0 To +1 0 0 1 340 649.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(e) Tx +(\r) TX +TO +0 To +1 0 0 1 340 629.5 0 Tp +TP +-8.8879 0 Td +0 Tr +(N/A) Tx +(\r) TX +TO +0 To +1 0 0 1 405 669 0 Tp +TP +-2.5 0 Td +0 Tr +(c) Tx +(\r) TX +TO +0 To +1 0 0 1 405 649.5 0 Tp +TP +-1.6638 0 Td +0 Tr +(f) Tx +(\r) TX +TO +0 To +1 0 0 1 405 629.5 0 Tp +TP +-1.3892 0 Td +0 Tr +(i) Tx +(\r) TX +TO +u +1 Ap +0 R +0 G +274.4998 662.9963 m +279.1963 662.9963 283.0037 666.8037 283.0037 671.5002 c +283.0037 676.1968 279.1963 680.0042 274.4998 680.0042 c +269.8032 680.0042 265.9958 676.1968 265.9958 671.5002 c +265.9958 666.8037 269.8032 662.9963 274.4998 662.9963 c +s +[3 4 3 4 3 4 ]0 d +274.4998 643.4963 m +279.1963 643.4963 283.0037 647.3037 283.0037 652.0002 c +283.0037 656.6968 279.1963 660.5042 274.4998 660.5042 c +269.8032 660.5042 265.9958 656.6968 265.9958 652.0002 c +265.9958 647.3037 269.8032 643.4963 274.4998 643.4963 c +s +u +u +0 Ap +[]0 d +265.9958 671.5002 m +251 671.5 250.5 662 v +250.1312 654.9919 257.5 653 y +S +0 O +0 g +260.0476 653.373 m +258.5818 654.2863 257.6645 655.0108 256.5229 655.8709 c +255.2066 651.0014 l +255.7237 651.0949 257.7835 651.333 259.5097 651.3831 c +261.3573 651.4376 263.0016 651.3718 264.0403 651.2262 c +263.0697 651.6237 261.6162 652.3953 260.0476 653.373 c +f +U +U +U +u +1 Ap +0 R +0 G +404.9998 662.9963 m +409.6963 662.9963 413.5037 666.8037 413.5037 671.5002 c +413.5037 676.1968 409.6963 680.0042 404.9998 680.0042 c +400.3032 680.0042 396.4958 676.1968 396.4958 671.5002 c +396.4958 666.8037 400.3032 662.9963 404.9998 662.9963 c +s +[3 4 3 4 3 4 ]0 d +404.9998 643.4963 m +409.6963 643.4963 413.5037 647.3037 413.5037 652.0002 c +413.5037 656.6968 409.6963 660.5042 404.9998 660.5042 c +400.3032 660.5042 396.4958 656.6968 396.4958 652.0002 c +396.4958 647.3037 400.3032 643.4963 404.9998 643.4963 c +s +u +u +0 Ap +[]0 d +396.4958 671.5002 m +381.5 671.5 381 662 v +380.6312 654.9919 388 653 y +S +0 O +0 g +390.5476 653.373 m +389.0818 654.2863 388.1645 655.0108 387.0229 655.8709 c +385.7066 651.0014 l +386.2237 651.0949 388.2835 651.333 390.0097 651.3831 c +391.8573 651.4376 393.5016 651.3718 394.5403 651.2262 c +393.5697 651.6237 392.1162 652.3953 390.5476 653.373 c +f +U +U +U +LB +%AI5_EndLayer-- +%%PageTrailer +gsave annotatepage grestore showpage +%%Trailer +Adobe_Illustrator_AI5 /terminate get exec +Adobe_ColorImage_AI6 /terminate get exec +Adobe_typography_AI5 /terminate get exec +Adobe_level2_AI5 /terminate get exec +%%EOF diff --git a/lib/snmp/doc/src/getnext3.gif b/lib/snmp/doc/src/getnext3.gif Binary files differnew file mode 100644 index 0000000000..2e37cbc6dd --- /dev/null +++ b/lib/snmp/doc/src/getnext3.gif diff --git a/lib/snmp/doc/src/getnext3.ps b/lib/snmp/doc/src/getnext3.ps new file mode 100644 index 0000000000..1d1be88a12 --- /dev/null +++ b/lib/snmp/doc/src/getnext3.ps @@ -0,0 +1,3003 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Adobe Illustrator(r) 6.0 +%%For: (Anna Fedoriw) (Ericsson Telecom) +%%Title: (GetNext321.eps) +%%CreationDate: (97-05-23) (14.04) +%%BoundingBox: 112 579 440 757 +%%HiResBoundingBox: 112.5 579.5 439.5 756.8677 +%%DocumentProcessColors: Black +%%DocumentFonts: Univers +%%DocumentSuppliedResources: procset Adobe_level2_AI5 1.0 0 +%%+ procset Adobe_typography_AI5 1.0 0 +%%+ procset Adobe_Illustrator_AI6_vars Adobe_Illustrator_AI6 +%%+ procset Adobe_Illustrator_AI5 1.0 0 +%AI5_FileFormat 2.0 +%AI3_ColorUsage: Black&White +%%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) +%%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 -1 -1 +%%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () +%AI3_TemplateBox: 306 396 306 396 +%AI3_TileBox: 21 -12 588 802 +%AI3_DocumentPreview: Macintosh_ColorPic +%AI5_ArtSize: 595.2756 841.8898 +%AI5_RulerUnits: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 1 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI5_OpenToView: 54 804 2 1146 827 58 1 1 3 40 +%AI5_OpenViewLayers: 7 +%%EndComments +%%BeginProlog +%%BeginResource: procset Adobe_level2_AI5 1.2 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) +%%Version: 1.2 +%%CreationDate: (04/10/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +userdict /Adobe_level2_AI5 23 dict dup begin + put + /packedarray where not + { + userdict begin + /packedarray + { + array astore readonly + } bind def + /setpacking /pop load def + /currentpacking false def + end + 0 + } if + pop + userdict /defaultpacking currentpacking put true setpacking + /initialize + { + Adobe_level2_AI5 begin + } bind def + /terminate + { + currentdict Adobe_level2_AI5 eq + { + end + } if + } bind def + mark + /setcustomcolor where not + { + /findcmykcustomcolor + { + 5 packedarray + } bind def + /setcustomcolor + { + exch aload pop pop + 4 + { + 4 index mul 4 1 roll + } repeat + 5 -1 roll pop + setcmykcolor + } + def + } if + + /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def + userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put + userdict /level2? + systemdict /languagelevel known dup + { + pop systemdict /languagelevel get 2 ge + } if + put +/level2ScreenFreq +{ + begin + 60 + HalftoneType 1 eq + { + pop Frequency + } if + HalftoneType 2 eq + { + pop GrayFrequency + } if + HalftoneType 5 eq + { + pop Default level2ScreenFreq + } if + end +} bind def +userdict /currentScreenFreq + level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put +level2? not + { + /setcmykcolor where not + { + /setcmykcolor + { + exch .11 mul add exch .59 mul add exch .3 mul add + 1 exch sub setgray + } def + } if + /currentcmykcolor where not + { + /currentcmykcolor + { + 0 0 0 1 currentgray sub + } def + } if + /setoverprint where not + { + /setoverprint /pop load def + } if + /selectfont where not + { + /selectfont + { + exch findfont exch + dup type /arraytype eq + { + makefont + } + { + scalefont + } ifelse + setfont + } bind def + } if + /cshow where not + { + /cshow + { + [ + 0 0 5 -1 roll aload pop + ] cvx bind forall + } bind def + } if + } if + cleartomark + /anyColor? + { + add add add 0 ne + } bind def + /testColor + { + gsave + setcmykcolor currentcmykcolor + grestore + } bind def + /testCMYKColorThrough + { + testColor anyColor? + } bind def + userdict /composite? + level2? + { + gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore + add add add 4 eq + } + { + 1 0 0 0 testCMYKColorThrough + 0 1 0 0 testCMYKColorThrough + 0 0 1 0 testCMYKColorThrough + 0 0 0 1 testCMYKColorThrough + and and and + } ifelse + put + composite? not + { + userdict begin + gsave + /cyan? 1 0 0 0 testCMYKColorThrough def + /magenta? 0 1 0 0 testCMYKColorThrough def + /yellow? 0 0 1 0 testCMYKColorThrough def + /black? 0 0 0 1 testCMYKColorThrough def + grestore + /isCMYKSep? cyan? magenta? yellow? black? or or or def + /customColor? isCMYKSep? not def + end + } if + end defaultpacking setpacking +%%EndResource +%%BeginResource: procset Adobe_typography_AI5 1.0 1 +%%Title: (Typography Operators) +%%Version: 1.0 +%%CreationDate:(03/26/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_typography_AI5 54 dict dup begin +put +/initialize +{ + begin + begin + Adobe_typography_AI5 begin + Adobe_typography_AI5 + { + dup xcheck + { + bind + } if + pop pop + } forall + end + end + end + Adobe_typography_AI5 begin +} def +/terminate +{ + currentdict Adobe_typography_AI5 eq + { + end + } if +} def +/modifyEncoding +{ + /_tempEncode exch ddef + /_pntr 0 ddef + { + counttomark -1 roll + dup type dup /marktype eq + { + pop pop exit + } + { + /nametype eq + { + _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll + put + } + { + /_pntr exch ddef + } ifelse + } ifelse + } loop + _tempEncode +} def +/TE +{ + StandardEncoding 256 array copy modifyEncoding + /_nativeEncoding exch def +} def +% +/TZ +{ + dup type /arraytype eq + { + /_wv exch def + } + { + /_wv 0 def + } ifelse + /_useNativeEncoding exch def + pop pop + findfont _wv type /arraytype eq + { + _wv makeblendedfont + } if + dup length 2 add dict + begin + mark exch + { + 1 index /FID ne + { + def + } if + cleartomark mark + } forall + pop + /FontName exch def + counttomark 0 eq + { + 1 _useNativeEncoding eq + { + /Encoding _nativeEncoding def + } if + cleartomark + } + { + /Encoding load 256 array copy + modifyEncoding /Encoding exch def + } ifelse + FontName currentdict + end + definefont pop +} def +/tr +{ + _ax _ay 3 2 roll +} def +/trj +{ + _cx _cy _sp _ax _ay 6 5 roll +} def +/a0 +{ + /Tx + { + dup + currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + } ddef + /Tj + { + dup + currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + } ddef +} def +/a1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/e0 +{ + /Tx + { + tr _psf + } ddef + /Tj + { + trj _pjsf + } ddef +} def +/e1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + tr _psf + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + trj _pjsf + grestore 3 1 roll moveto tr jsp + } ddef +} def +/i0 +{ + /Tx + { + tr sp + } ddef + /Tj + { + trj jsp + } ddef +} def +/i1 +{ + W N +} def +/o0 +{ + /Tx + { + tr sw rmoveto + } ddef + /Tj + { + trj swj rmoveto + } ddef +} def +/r0 +{ + /Tx + { + tr _ctm _pss + } ddef + /Tj + { + trj _ctm _pjss + } ddef +} def +/r1 +{ + /Tx + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/To +{ + pop _ctm currentmatrix pop +} def +/TO +{ + iTe _ctm setmatrix newpath +} def +/Tp +{ + pop _tm astore pop _ctm setmatrix + _tDict begin + /W + { + } def + /h + { + } def +} def +/TP +{ + end + iTm 0 0 moveto +} def +/Tr +{ + _render 3 le + { + currentpoint newpath moveto + } if + dup 8 eq + { + pop 0 + } + { + dup 9 eq + { + pop 1 + } if + } ifelse + dup /_render exch ddef + _renderStart exch get load exec +} def +/iTm +{ + _ctm setmatrix _tm concat 0 _rise translate _hs 1 scale +} def +/Tm +{ + _tm astore pop iTm 0 0 moveto +} def +/Td +{ + _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto +} def +/iTe +{ + _render -1 eq + { + } + { + _renderEnd _render get dup null ne + { + load exec + } + { + pop + } ifelse + } ifelse + /_render -1 ddef +} def +/Ta +{ + pop +} def +/Tf +{ + dup 1000 div /_fScl exch ddef +% + selectfont +} def +/Tl +{ + pop + 0 exch _leading astore pop +} def +/Tt +{ + pop +} def +/TW +{ + 3 npop +} def +/Tw +{ + /_cx exch ddef +} def +/TC +{ + 3 npop +} def +/Tc +{ + /_ax exch ddef +} def +/Ts +{ + /_rise exch ddef + currentpoint + iTm + moveto +} def +/Ti +{ + 3 npop +} def +/Tz +{ + 100 div /_hs exch ddef + iTm +} def +/TA +{ + pop +} def +/Tq +{ + pop +} def +/Th +{ + pop pop pop pop pop +} def +/TX +{ + pop +} def +/Tk +{ + exch pop _fScl mul neg 0 rmoveto +} def +/TK +{ + 2 npop +} def +/T* +{ + _leading aload pop neg Td +} def +/T*- +{ + _leading aload pop Td +} def +/T- +{ + _ax neg 0 rmoveto + _hyphen Tx +} def +/T+ +{ +} def +/TR +{ + _ctm currentmatrix pop + _tm astore pop + iTm 0 0 moveto +} def +/TS +{ + currentfont 3 1 roll + /_Symbol_ _fScl 1000 mul selectfont + + 0 eq + { + Tx + } + { + Tj + } ifelse + setfont +} def +/Xb +{ + pop pop +} def +/Tb /Xb load def +/Xe +{ + pop pop pop pop +} def +/Te /Xe load def +/XB +{ +} def +/TB /XB load def +currentdict readonly pop +end +setpacking +%%EndResource +%%BeginProcSet: Adobe_ColorImage_AI6 1.0 0 +userdict /Adobe_ColorImage_AI6 known not +{ + userdict /Adobe_ColorImage_AI6 17 dict put +} if +userdict /Adobe_ColorImage_AI6 get begin + + /initialize + { + Adobe_ColorImage_AI6 begin + Adobe_ColorImage_AI6 + { + dup type /arraytype eq + { + dup xcheck + { + bind + } if + } if + pop pop + } forall + } def + /terminate { end } def + + currentdict /Adobe_ColorImage_AI6_Vars known not + { + /Adobe_ColorImage_AI6_Vars 14 dict def + } if + + Adobe_ColorImage_AI6_Vars begin + /channelcount 0 def + /sourcecount 0 def + /sourcearray 4 array def + /plateindex -1 def + /XIMask 0 def + /XIBinary 0 def + /XIChannelCount 0 def + /XIBitsPerPixel 0 def + /XIImageHeight 0 def + /XIImageWidth 0 def + /XIImageMatrix null def + /XIBuffer null def + /XIDataProc null def + end + + /WalkRGBString null def + /WalkCMYKString null def + + /StuffRGBIntoGrayString null def + /RGBToGrayImageProc null def + /StuffCMYKIntoGrayString null def + /CMYKToGrayImageProc null def + /ColorImageCompositeEmulator null def + + /SeparateCMYKImageProc null def + + /FourEqual null def + /TestPlateIndex null def + + currentdict /_colorimage known not + { + /colorimage where + { + /colorimage get /_colorimage exch def + } + { + /_colorimage null def + } ifelse + } if + + /_currenttransfer systemdict /currenttransfer get def + + /colorimage null def + /XI null def + + + /WalkRGBString + { + 0 3 index + + dup length 1 sub 0 3 3 -1 roll + { + 3 getinterval { } forall + + 5 index exec + + 3 index + } for + + 5 { pop } repeat + + } def + + + /WalkCMYKString + { + 0 3 index + + dup length 1 sub 0 4 3 -1 roll + { + 4 getinterval { } forall + + 6 index exec + + 3 index + + } for + + 5 { pop } repeat + + } def + + + /StuffRGBIntoGrayString + { + .11 mul exch + + .59 mul add exch + + .3 mul add + + cvi 3 copy put + + pop 1 add + } def + + + /RGBToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 3 idiv string + dup 3 1 roll + + /StuffRGBIntoGrayString load exch + WalkRGBString + end + } def + + + /StuffCMYKIntoGrayString + { + exch .11 mul add + + exch .59 mul add + + exch .3 mul add + + dup 255 gt { pop 255 } if + + 255 exch sub cvi 3 copy put + + pop 1 add + } def + + + /CMYKToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 4 idiv string + dup 3 1 roll + + /StuffCMYKIntoGrayString load exch + WalkCMYKString + end + } def + + + /ColorImageCompositeEmulator + { + pop true eq + { + Adobe_ColorImage_AI6_Vars /sourcecount get 5 add { pop } repeat + } + { + Adobe_ColorImage_AI6_Vars /channelcount get 1 ne + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 3 -1 roll put + + channelcount 3 eq + { + /RGBToGrayImageProc + } + { + /CMYKToGrayImageProc + } ifelse + load + end + } if + image + } ifelse + } def + + + /SeparateCMYKImageProc + { + Adobe_ColorImage_AI6_Vars begin + + sourcecount 0 ne + { + sourcearray plateindex get exec + } + { + sourcearray 0 get exec + + dup length 4 idiv string + + 0 2 index + + plateindex 4 2 index length 1 sub + { + get 255 exch sub + + 3 copy put pop 1 add + + 2 index + } for + + pop pop exch pop + } ifelse + end + } def + + + /FourEqual + { + 4 index ne + { + pop pop pop false + } + { + 4 index ne + { + pop pop false + } + { + 4 index ne + { + pop false + } + { + 4 index eq + } ifelse + } ifelse + } ifelse + } def + + + /TestPlateIndex + { + Adobe_ColorImage_AI6_Vars begin + /plateindex -1 def + + /setcmykcolor where + { + pop + gsave + 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub + grestore + + 1 0 0 0 FourEqual + { + /plateindex 0 def + } + { + 0 1 0 0 FourEqual + { + /plateindex 1 def + } + { + 0 0 1 0 FourEqual + { + /plateindex 2 def + } + { + 0 0 0 1 FourEqual + { + /plateindex 3 def + } + { + 0 0 0 0 FourEqual + { + /plateindex 5 def + } if + } ifelse + } ifelse + } ifelse + } ifelse + pop pop pop pop + } if + plateindex + end + } def + + + /colorimage + { + Adobe_ColorImage_AI6_Vars begin + /channelcount 1 index def + /sourcecount 2 index 1 eq { channelcount 1 sub } { 0 } ifelse def + + 4 sourcecount add index dup + 8 eq exch 1 eq or not + end + + { + /_colorimage load null ne + { + _colorimage + } + { + Adobe_ColorImage_AI6_Vars /sourcecount get + 7 add { pop } repeat + } ifelse + } + { + dup 3 eq + TestPlateIndex + dup -1 eq exch 5 eq or or + { + /_colorimage load null eq + { + ColorImageCompositeEmulator + } + { + dup 1 eq + { + pop pop image + } + { + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + gsave + + 0 _currenttransfer exec + 1 _currenttransfer exec + eq + { 0 _currenttransfer exec 0.5 lt } + { 0 _currenttransfer exec 1 _currenttransfer exec gt } ifelse + + { { pop 0 } } { { pop 1 } } ifelse + systemdict /settransfer get exec + } if + + _colorimage + + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + grestore + } if + } ifelse + } ifelse + } + { + dup 1 eq + { + pop pop + image + } + { + pop pop + + Adobe_ColorImage_AI6_Vars begin + sourcecount -1 0 + { + exch sourcearray 3 1 roll put + } for + + /SeparateCMYKImageProc load + end + + systemdict /image get exec + } ifelse + } ifelse + } ifelse + } def + + /XI + { + Adobe_ColorImage_AI6_Vars begin + gsave + /XIMask exch 0 ne def + /XIBinary exch 0 ne def + pop + pop + /XIChannelCount exch def + /XIBitsPerPixel exch def + /XIImageHeight exch def + /XIImageWidth exch def + pop pop pop pop + /XIImageMatrix exch def + + XIBitsPerPixel 1 eq + { + XIImageWidth 8 div ceiling cvi + } + { + XIImageWidth XIChannelCount mul + } ifelse + /XIBuffer exch string def + + XIBinary + { + /XIDataProc { currentfile XIBuffer readstring pop } def + currentfile 128 string readline pop pop + } + { + /XIDataProc { currentfile XIBuffer readhexstring pop } def + } ifelse + + 0 0 moveto + XIImageMatrix concat + XIImageWidth XIImageHeight scale + + XIMask + { + XIImageWidth XIImageHeight + false + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + /_lp /null ddef + _fc + /_lp /imagemask ddef + + imagemask + } + { + XIImageWidth XIImageHeight + XIBitsPerPixel + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + XIChannelCount 1 eq + { + + gsave + 0 setgray + + image + + grestore + } + { + false + XIChannelCount + colorimage + } ifelse + } ifelse + grestore + end + } def + +end +%%EndProcSet +%%BeginResource: procset Adobe_Illustrator_AI5 1.1 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Full Prolog) +%%Version: 1.1 +%%CreationDate: (3/7/1994) () +%%Copyright: ((C) 1987-1994 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_Illustrator_AI5_vars 81 dict dup begin +put +/_eo false def +/_lp /none def +/_pf +{ +} def +/_ps +{ +} def +/_psf +{ +} def +/_pss +{ +} def +/_pjsf +{ +} def +/_pjss +{ +} def +/_pola 0 def +/_doClip 0 def +/cf currentflat def +/_tm matrix def +/_renderStart +[ +/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 +] def +/_renderEnd +[ +null null null null /i1 /i1 /i1 /i1 +] def +/_render -1 def +/_rise 0 def +/_ax 0 def +/_ay 0 def +/_cx 0 def +/_cy 0 def +/_leading +[ +0 0 +] def +/_ctm matrix def +/_mtx matrix def +/_sp 16#020 def +/_hyphen (-) def +/_fScl 0 def +/_cnt 0 def +/_hs 1 def +/_nativeEncoding 0 def +/_useNativeEncoding 0 def +/_tempEncode 0 def +/_pntr 0 def +/_tDict 2 dict def +/_wv 0 def +/Tx +{ +} def +/Tj +{ +} def +/CRender +{ +} def +/_AI3_savepage +{ +} def +/_gf null def +/_cf 4 array def +/_if null def +/_of false def +/_fc +{ +} def +/_gs null def +/_cs 4 array def +/_is null def +/_os false def +/_sc +{ +} def +/_pd 1 dict def +/_ed 15 dict def +/_pm matrix def +/_fm null def +/_fd null def +/_fdd null def +/_sm null def +/_sd null def +/_sdd null def +/_i null def +/discardSave null def +/buffer 256 string def +/beginString null def +/endString null def +/endStringLength null def +/layerCnt 1 def +/layerCount 1 def +/perCent (%) 0 get def +/perCentSeen? false def +/newBuff null def +/newBuffButFirst null def +/newBuffLast null def +/clipForward? false def +end +userdict /Adobe_Illustrator_AI5 known not { + userdict /Adobe_Illustrator_AI5 91 dict put +} if +userdict /Adobe_Illustrator_AI5 get begin +/initialize +{ + Adobe_Illustrator_AI5 dup begin + Adobe_Illustrator_AI5_vars begin + discardDict + { + bind pop pop + } forall + dup /nc get begin + { + dup xcheck 1 index type /operatortype ne and + { + bind + } if + pop pop + } forall + end + newpath +} def +/terminate +{ + end + end +} def +/_ +null def +/ddef +{ + Adobe_Illustrator_AI5_vars 3 1 roll put +} def +/xput +{ + dup load dup length exch maxlength eq + { + dup dup load dup + length 2 mul dict copy def + } if + load begin + def + end +} def +/npop +{ + { + pop + } repeat +} def +/sw +{ + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add +} def +/swj +{ + dup 4 1 roll + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add + 6 2 roll /_cnt 0 ddef + { + 1 index eq + { + /_cnt _cnt 1 add ddef + } if + } forall + pop + exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop +} def +/ss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put pop + gsave + false charpath currentpoint + 4 index setmatrix + stroke + grestore + moveto + 2 copy rmoveto + } exch cshow + 3 npop +} def +/jss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put + gsave + _sp eq + { + exch 6 index 6 index 6 index 5 -1 roll widthshow + currentpoint + } + { + false charpath currentpoint + 4 index setmatrix stroke + } ifelse + grestore + moveto + 2 copy rmoveto + } exch cshow + 6 npop +} def +/sp +{ + { + 2 npop (0) exch + 2 copy 0 exch put pop + false charpath + 2 copy rmoveto + } exch cshow + 2 npop +} def +/jsp +{ + { + 2 npop + (0) exch 2 copy 0 exch put + _sp eq + { + exch 5 index 5 index 5 index 5 -1 roll widthshow + } + { + false charpath + } ifelse + 2 copy rmoveto + } exch cshow + 5 npop +} def +/pl +{ + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform +} def +/setstrokeadjust where +{ + pop true setstrokeadjust + /c + { + curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll curveto + } def + /V + /v load def + /y + { + 2 copy curveto + } def + /Y + /y load def + /l + { + lineto + } def + /L + /l load def + /m + { + moveto + } def +} +{ + /c + { + pl curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll pl curveto + } def + /V + /v load def + /y + { + pl 2 copy curveto + } def + /Y + /y load def + /l + { + pl lineto + } def + /L + /l load def + /m + { + pl moveto + } def +} ifelse +/d +{ + setdash +} def +/cf +{ +} def +/i +{ + dup 0 eq + { + pop cf + } if + setflat +} def +/j +{ + setlinejoin +} def +/J +{ + setlinecap +} def +/M +{ + setmiterlimit +} def +/w +{ + setlinewidth +} def +/XR +{ + 0 ne + /_eo exch ddef +} def +/H +{ +} def +/h +{ + closepath +} def +/N +{ + _pola 0 eq + { + _doClip 1 eq + { + _eo {eoclip} {clip} ifelse /_doClip 0 ddef + } if + newpath + } + { + /CRender + { + N + } ddef + } ifelse +} def +/n +{ + N +} def +/F +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc + /_doClip 0 ddef + } + { + _pf + } ifelse + } + { + /CRender + { + F + } ddef + } ifelse +} def +/f +{ + closepath + F +} def +/S +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + _ps + } ifelse + } + { + /CRender + { + S + } ddef + } ifelse +} def +/s +{ + closepath + S +} def +/B +{ + _pola 0 eq + { + _doClip 1 eq + gsave F grestore + { + gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + S + } ifelse + } + { + /CRender + { + B + } ddef + } ifelse +} def +/b +{ + closepath + B +} def +/W +{ + /_doClip 1 ddef +} def +/* +{ + count 0 ne + { + dup type /stringtype eq + { + pop + } if + } if + newpath +} def +/u +{ +} def +/U +{ +} def +/q +{ + _pola 0 eq + { + gsave + } if +} def +/Q +{ + _pola 0 eq + { + grestore + } if +} def +/*u +{ + _pola 1 add /_pola exch ddef +} def +/*U +{ + _pola 1 sub /_pola exch ddef + _pola 0 eq + { + CRender + } if +} def +/D +{ + pop +} def +/*w +{ +} def +/*W +{ +} def +/` +{ + /_i save ddef + clipForward? + { + nulldevice + } if + 6 1 roll 4 npop + concat pop + userdict begin + /showpage + { + } def + 0 setgray + 0 setlinecap + 1 setlinewidth + 0 setlinejoin + 10 setmiterlimit + [] 0 setdash + /setstrokeadjust where {pop false setstrokeadjust} if + newpath + 0 setgray + false setoverprint +} def +/~ +{ + end + _i restore +} def +/O +{ + 0 ne + /_of exch ddef + /_lp /none ddef +} def +/R +{ + 0 ne + /_os exch ddef + /_lp /none ddef +} def +/g +{ + /_gf exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _gf setgray + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/G +{ + /_gs exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _gs setgray + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/k +{ + _cf astore pop + /_fc + { + _lp /fill ne + { + _of setoverprint + _cf aload pop setcmykcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/K +{ + _cs astore pop + /_sc + { + _lp /stroke ne + { + _os setoverprint + _cs aload pop setcmykcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/x +{ + /_gf exch ddef + findcmykcustomcolor + /_if exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _if _gf 1 exch sub setcustomcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/X +{ + /_gs exch ddef + findcmykcustomcolor + /_is exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _is _gs 1 exch sub setcustomcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/A +{ + pop +} def +/annotatepage +{ +userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse +} def +/XT { + pop pop +} def +/discard +{ + save /discardSave exch store + discardDict begin + /endString exch store + gt38? + { + 2 add + } if + load + stopped + pop + end + discardSave restore +} bind def +userdict /discardDict 7 dict dup begin +put +/pre38Initialize +{ + /endStringLength endString length store + /newBuff buffer 0 endStringLength getinterval store + /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store + /newBuffLast newBuff endStringLength 1 sub 1 getinterval store +} def +/shiftBuffer +{ + newBuff 0 newBuffButFirst putinterval + newBuffLast 0 + currentfile read not + { + stop + } if + put +} def +0 +{ + pre38Initialize + mark + currentfile newBuff readstring exch pop + { + { + newBuff endString eq + { + cleartomark stop + } if + shiftBuffer + } loop + } + { + stop + } ifelse +} def +1 +{ + pre38Initialize + /beginString exch store + mark + currentfile newBuff readstring exch pop + { + { + newBuff beginString eq + { + /layerCount dup load 1 add store + } + { + newBuff endString eq + { + /layerCount dup load 1 sub store + layerCount 0 eq + { + cleartomark stop + } if + } if + } ifelse + shiftBuffer + } loop + } if +} def +2 +{ + mark + { + currentfile buffer readline not + { + stop + } if + endString eq + { + cleartomark stop + } if + } loop +} def +3 +{ + /beginString exch store + /layerCnt 1 store + mark + { + currentfile buffer readline not + { + stop + } if + dup beginString eq + { + pop /layerCnt dup load 1 add store + } + { + endString eq + { + layerCnt 1 eq + { + cleartomark stop + } + { + /layerCnt dup load 1 sub store + } ifelse + } if + } ifelse + } loop +} def +end +userdict /clipRenderOff 15 dict dup begin +put +{ + /n /N /s /S /f /F /b /B +} +{ + { + _doClip 1 eq + { + /_doClip 0 ddef _eo {eoclip} {clip} ifelse + } if + newpath + } def +} forall +/Tr /pop load def +/Bb {} def +/BB /pop load def +/Bg {12 npop} def +/Bm {6 npop} def +/Bc /Bm load def +/Bh {4 npop} def +end +/Lb +{ + 4 npop + 6 1 roll + pop + 4 1 roll + pop pop pop + 0 eq + { + 0 eq + { + (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard + } + { + + /clipForward? true def + + /Tx /pop load def + /Tj /pop load def + + currentdict end clipRenderOff begin begin + } ifelse + } + { + 0 eq + { + save /discardSave exch store + } if + } ifelse +} bind def +/LB +{ + discardSave dup null ne + { + restore + } + { + pop + clipForward? + { + currentdict + end + end + begin + + /clipForward? false ddef + } if + } ifelse +} bind def +/Pb +{ + pop pop + 0 (%AI5_EndPalette) discard +} bind def +/Np +{ + 0 (%AI5_End_NonPrinting--) discard +} bind def +/Ln /pop load def +/Ap +/pop load def +/Ar +{ + 72 exch div + 0 dtransform dup mul exch dup mul add sqrt + dup 1 lt + { + pop 1 + } if + setflat +} def +/Mb +{ + q +} def +/Md +{ +} def +/MB +{ + Q +} def +/nc 3 dict def +nc begin +/setgray +{ + pop +} bind def +/setcmykcolor +{ + 4 npop +} bind def +/setcustomcolor +{ + 2 npop +} bind def +currentdict readonly pop +end +end +setpacking +%%EndResource +%%EndProlog +%%BeginSetup +%%IncludeFont: Univers +Adobe_level2_AI5 /initialize get exec +Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_typography_AI5 /initialize get exec +Adobe_ColorImage_AI6 /initialize get exec +Adobe_Illustrator_AI5 /initialize get exec +[ +39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis +/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute +/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde +/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex +/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls +/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash +/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef +/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash +/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef +/guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe +/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide +/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright +/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand +/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex +/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex +/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla +/hungarumlaut/ogonek/caron +TE +%AI3_BeginEncoding: _Univers Univers +[/_Univers/Univers 0 0 1 TZ +%AI3_EndEncoding AdobeType +%AI5_Begin_NonPrinting +Np +8 Bn +%AI5_BeginGradient: (Black & White) +(Black & White) 0 2 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Green & Blue) +(Green & Blue) 0 2 Bd +[ +< +99999A9A9B9B9B9C9C9D9D9D9E9E9F9F9FA0A0A1A1A1A2A2A3A3A3A4A4A5A5A5A6A6A7A7A7A8A8A9 +A9A9AAAAABABABACACADADADAEAEAFAFAFB0B0B1B1B1B2B2B3B3B3B4B4B5B5B5B6B6B7B7B7B8B8B9 +B9B9BABABBBBBBBCBCBDBDBDBEBEBFBFBFC0C0C1C1C1C2C2C3C3C3C4C4C5C5C5C6C6C7C7C7C8C8C9 +C9C9CACACBCBCBCCCCCDCDCDCECECFCFCFD0D0D1D1D1D2D2D3D3D3D4D4D5D5D5D6D6D7D7D7D8D8D9 +D9D9DADADBDBDBDCDCDDDDDDDEDEDFDFDFE0E0E1E1E1E2E2E3E3E3E4E4E5E5E5E6E6E7E7E7E8E8E9 +E9E9EAEAEBEBEBECECEDEDEDEEEEEFEFEFF0F0F1F1F1F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F9 +F9F9FAFAFBFBFBFCFCFDFDFDFEFEFFFF +> +< +000102020304050506070808090A0B0B0C0D0E0E0F101111121314141516171718191A1A1B1C1D1D +1E1F20202122232324252626272829292A2B2C2C2D2E2F2F303132323334353536373838393A3B3B +3C3D3E3E3F404141424344444546474748494A4A4B4C4D4D4E4F5050515253535455565657585959 +5A5B5C5C5D5E5F5F606162626364656566676868696A6B6B6C6D6E6E6F7071717273747475767777 +78797A7A7B7C7D7D7E7F80808182828384858586878888898A8B8B8C8D8E8E8F9091919293949495 +96979798999A9A9B9C9D9D9E9FA0A0A1A2A3A3A4A5A6A6A7A8A9A9AAABACACADAEAFAFB0B1B2B2B3 +B4B5B5B6B7B8B8B9BABBBBBCBDBEBEBF +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +[ +1 0.75 0 0 1 50 100 %_Bs +0.6 0 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Pink, Yellow, Green) +(Pink, Yellow, Green) 0 3 Bd +[ +< +00000000000000000000000000000000000000010101010101010101010101010101010101010101 +01010101010202020202020202020202020202020202020202020203030303030303030303030303 +03030303030303030404040404040404040404040404040404040404050505050505050505050505 +05050505050505060606060606060606060606060606060606060707070707070707070707070707 +07070707080808080808080808080808080808080809090909090909090909090909090909090A0A +0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C +0C0C0C0C0C0C0C0D0D0D0D0D +> +< +050506060606070708080809090A0A0A0B0B0C0C0D0D0E0E0F0F1010111112121313141415151617 +17181819191A1A1B1C1C1D1D1E1F1F202021222223232425252626272828292A2A2B2C2C2D2D2E2F +2F3031313233333435353637373839393A3B3B3C3D3E3E3F4040414242434445454647474849494A +4B4C4C4D4E4F4F505151525354545556575758595A5A5B5C5C5D5E5F5F6061626363646566666768 +69696A6B6C6C6D6E6F707071727373747576777778797A7B7B7C7D7E7F7F80818283838485868787 +88898A8B8B8C8D8E8F8F9091929394949596979898999A9B9C9D9D9E9FA0A1A2A2A3A4A5A6A7A7A8 +A9AAABACADADAEAFB0B1B2B2 +> +< +CCCCCBCBCBCACACAC9C9C8C8C7C7C6C6C5C5C4C4C3C2C2C1C1C0C0BFBEBEBDBDBCBBBBBAB9B9B8B7 +B7B6B6B5B4B4B3B2B1B1B0AFAFAEADADACABAAAAA9A8A8A7A6A5A5A4A3A2A2A1A0A09F9E9D9C9C9B +9A999998979696959493929291908F8E8E8D8C8B8A8A8988878686858483828181807F7E7D7C7C7B +7A7978777776757473727171706F6E6D6C6B6A6A69686766656463636261605F5E5D5C5B5B5A5958 +5756555453525151504F4E4D4C4B4A49484746464544434241403F3E3D3C3B3A3938383736353433 +3231302F2E2D2C2B2A29282726252423222221201F1E1D1C1B1A191817161514131211100F0E0D0C +0B0A09080706050403020100 +> +0 +1 %_Br +< +737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5B5A59585756555453525150504F4E +4D4C4B4A4949484746454443434241403F3E3E3D3C3B3A3A393837363635343333323130302F2E2D +2D2C2B2A2A29282827262525242323222121201F1F1E1D1D1C1C1B1A1A1918181717161615141413 +1312121111100F0F0E0E0D0D0C0C0C0B0B0A0A090908080807070606060505050404040303030202 +020201010101010000000000 +> +< +00000000000000000000000001010101010101010101010101010101010101010101010102020202 +02020202020202020202020202020202020202020202030303030303030303030303030303030303 +03030303030303030303030303040404040404040404040404040404040404040404040404040404 +04040404040404040404050505050505050505050505050505050505050505050505050505050505 +050505050505050505050505 +> +< +BFBFBFC0C0C0C0C0C0C0C0C0C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C2C2C3C3C3C3C3C3C3C3C3 +C3C4C4C4C4C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C6C6C6C7C7C7C7C7C7 +C7C7C7C7C7C7C8C8C8C8C8C8C8C8C8C8C8C8C8C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9CACACACACACA +CACACACACACACACACACACBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCCCCCCCCCC +> +0 +1 %_Br +[ +0.05 0.7 0 0 1 50 100 %_Bs +0 0.02 0.8 0 1 57 36 %_Bs +0.45 0 0.75 0 1 37 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Purple, Red & Yellow) +(Purple, Red & Yellow) 0 3 Bd +[ +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A +> +< +CCCCCCCDCDCDCDCDCECECECECECFCFCFCFD0D0D0D0D0D1D1D1D1D1D2D2D2D2D2D3D3D3D3D3D4D4D4 +D4D5D5D5D5D5D6D6D6D6D6D7D7D7D7D7D8D8D8D8D8D9D9D9D9DADADADADADBDBDBDBDBDCDCDCDCDC +DDDDDDDDDDDEDEDEDEDFDFDFDFDFE0E0E0E0E0E1E1E1E1E1E2E2E2E2E2E3E3E3E3E4E4E4E4E4E5E5 +E5E5E5E6E6E6E6E6E7E7E7E7E7E8E8E8E8E9E9E9E9E9EAEAEAEAEAEBEBEBEBEBECECECECECEDEDED +EDEEEEEEEEEEEFEFEFEFEFF0F0F0F0F0F1F1F1F1F1F2F2F2F2F3F3F3F3F3F4F4F4F4F4F5F5F5F5F5 +F6F6F6F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFAFAFBFBFBFBFBFCFCFCFCFDFDFDFDFDFEFE +FEFEFEFFFFFF +> +0 +1 %_Br +< +E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBE +BDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A99989796 +9594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B7A797877767574737271706F6E +6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A49484746 +4544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E +1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403020100 +> +< +E5E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9EAEAEAEA +EAEAEAEAEAEBEBEBEBEBEBEBEBEBECECECECECECECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEE +EEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F3F3F3 +F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 +F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFCFC +FCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFF +> +< +00010203040405060708090A0B0C0C0D0E0F10111213141415161718191A1B1C1D1D1E1F20212223 +242525262728292A2B2C2D2D2E2F30313233343535363738393A3B3C3D3D3E3F4041424344454546 +4748494A4B4C4D4E4E4F50515253545556565758595A5B5C5D5E5E5F60616263646566666768696A +6B6C6D6E6E6F70717273747576767778797A7B7C7D7E7F7F80818283848586878788898A8B8C8D8E +8F8F90919293949596979798999A9B9C9D9E9F9FA0A1A2A3A4A5A6A7A7A8A9AAABACADAEAFAFB0B1 +B2B3B4B5B6B7B8B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C8C9CACBCC +> +0 +1 %_Br +[ +0 0.04 1 0 1 50 100 %_Bs +0 1 0.8 0 1 50 50 %_Bs +0.9 0.9 0 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Rainbow) +(Rainbow) 0 6 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +0 +1 %_Br +1 +< +0708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E +2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556 +5758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E +7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6 +A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCE +CFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6 +F7F8F9FAFBFCFDFEFF +> +0 +0 +1 %_Br +1 +< +00000000000000000000000000000000000001010101010101010101010101010101010101010101 +01010101010101010101010101010202020202020202020202020202020202020202020202020202 +02020202020202020202030303030303030303030303030303030303030303030303030303030303 +03030303030304040404040404040404040404040404040404040404040404040404040404040404 +04040505050505050505050505050505050505050505050505050505050505050505050505050606 +06060606060606060606060606060606060606060606060606060606060606060606070707070707 +07070707070707070707070707070707 +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 +1 +0 +1 %_Br +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +1 %_Br +[ +0 1 0 0 1 50 100 %_Bs +1 1 0 0 1 50 80 %_Bs +1 0.0279 0 0 1 50 60 %_Bs +1 0 1 0 1 50 40 %_Bs +0 0 1 0 1 50 20 %_Bs +0 1 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Steel Bar) +(Steel Bar) 0 3 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 70 %_Bs +0 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Orange Radial) +(Yellow & Orange Radial) 1 2 Bd +[ +0 +< +0001010203040506060708090A0B0C0C0D0E0F10111213131415161718191A1B1C1D1D1E1F202122 +232425262728292A2B2B2C2D2E2F303132333435363738393A3B3C3D3E3E3F404142434445464748 +494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60606162636465666768696A6B6C6D6E6F +707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C +> +< +FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9 +F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2 +F2F2F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEDEDEDEDEDEDECECECECECEBEBEBEBEB +EBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E8E8E8E7E7E7E7E7E6E6E6E6E6E5 +> +0 +1 %_Br +[ +0 0 1 0 1 52 19 %_Bs +0 0.55 0.9 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Purple Radial) +(Yellow & Purple Radial) 1 2 Bd +[ +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +< +1415161718191A1B1C1D1E1F1F202122232425262728292A2A2B2C2D2E2F30313233343536363738 +393A3B3C3D3E3F40414142434445464748494A4B4C4D4D4E4F50515253545556575858595A5B5C5D +5E5F60616263646465666768696A6B6C6D6E6F6F707172737475767778797A7B7B7C7D7E7F808182 +83848586868788898A8B8C8D8E8F90919292939495969798999A9B9C9D9D9E9FA0A1A2A3A4A5A6A7 +A8A9A9AAABACADAEAFB0B1B2B3B4B4B5B6B7B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C9CACBCB +CCCDCECFD0D1D2D3D4D5D6D7D7D8D9DADBDCDDDEDFE0E1E2E2E3E4E5E6E7E8E9EAEBECEDEEEEEFF0 +F1F2F3F4F5F6F7F8F9F9FAFBFCFDFEFF +> +< +ABAAAAA9A8A7A7A6A5A5A4A3A3A2A1A1A09F9F9E9D9D9C9B9B9A9999989797969595949393929191 +908F8F8E8D8D8C8B8B8A8989888787868585848383828181807F7F7E7D7D7C7B7B7A797978777776 +7575747373727171706F6F6E6D6D6C6B6B6A6969686767666565646362626160605F5E5E5D5C5C5B +5A5A5958585756565554545352525150504F4E4E4D4C4C4B4A4A4948484746464544444342424140 +403F3E3E3D3C3C3B3A3A3938383736363534343332323130302F2E2E2D2C2C2B2A2A292828272626 +25242423222121201F1F1E1D1D1C1B1B1A1919181717161515141313121111100F0F0E0D0D0C0B0B +0A090908070706050504030302010100 +> +0 +1 %_Br +[ +0 0.08 0.67 0 1 50 14 %_Bs +1 1 0 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_End_NonPrinting-- +%AI5_BeginPalette +0 2 Pb +Pn +Pc +1 g +Pc +0 g +Pc +0 0 0 0 k +Pc +0.75 g +Pc +0.5 g +Pc +0.25 g +Pc +0 g +Pc +Bb +2 (Black & White) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0 0 0 k +Pc +0.5 0 0 0 k +Pc +0.75 0 0 0 k +Pc +1 0 0 0 k +Pc +0.25 0.25 0 0 k +Pc +0.5 0.5 0 0 k +Pc +0.75 0.75 0 0 k +Pc +1 1 0 0 k +Pc +Bb +2 (Pink, Yellow, Green) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0 0 k +Pc +0 0.5 0 0 k +Pc +0 0.75 0 0 k +Pc +0 1 0 0 k +Pc +0 0.25 0.25 0 k +Pc +0 0.5 0.5 0 k +Pc +0 0.75 0.75 0 k +Pc +0 1 1 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Purple Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0 0.25 0 k +Pc +0 0 0.5 0 k +Pc +0 0 0.75 0 k +Pc +0 0 1 0 k +Pc +0.25 0 0.25 0 k +Pc +0.5 0 0.5 0 k +Pc +0.75 0 0.75 0 k +Pc +1 0 1 0 k +Pc +Bb +2 (Rainbow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0 0 k +Pc +0.5 0.25 0 0 k +Pc +0.75 0.375 0 0 k +Pc +1 0.5 0 0 k +Pc +0.125 0.25 0 0 k +Pc +0.25 0.5 0 0 k +Pc +0.375 0.75 0 0 k +Pc +0.5 1 0 0 k +Pc +Bb +2 (Steel Bar) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0.125 0 k +Pc +0 0.5 0.25 0 k +Pc +0 0.75 0.375 0 k +Pc +0 1 0.5 0 k +Pc +0 0.125 0.25 0 k +Pc +0 0.25 0.5 0 k +Pc +0 0.375 0.75 0 k +Pc +0 0.5 1 0 k +Pc +Bb +2 (Purple, Red & Yellow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0 0.25 0 k +Pc +0.25 0 0.5 0 k +Pc +0.375 0 0.75 0 k +Pc +0.5 0 1 0 k +Pc +0.25 0 0.125 0 k +Pc +0.5 0 0.25 0 k +Pc +0.75 0 0.375 0 k +Pc +1 0 0.5 0 k +Pc +Bb +2 (Green & Blue) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0.125 0 k +Pc +0.5 0.25 0.25 0 k +Pc +0.75 0.375 0.375 0 k +Pc +1 0.5 0.5 0 k +Pc +0.25 0.25 0.125 0 k +Pc +0.5 0.5 0.25 0 k +Pc +0.75 0.75 0.375 0 k +Pc +1 1 0.5 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Orange Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0.25 0.125 0 k +Pc +0.25 0.5 0.25 0 k +Pc +0.375 0.75 0.375 0 k +Pc +0.5 1 0.5 0 k +Pc +0.125 0.25 0.25 0 k +Pc +0.25 0.5 0.5 0 k +Pc +0.375 0.75 0.75 0 k +Pc +0.5 1 1 0 k +Pc +0 0 0 0 k +Pc +0.125 0.125 0.25 0 k +Pc +0.25 0.25 0.5 0 k +Pc +0.375 0.375 0.75 0 k +Pc +0.5 0.5 1 0 k +Pc +0.25 0.125 0.25 0 k +Pc +0.5 0.25 0.5 0 k +Pc +0.75 0.375 0.75 0 k +Pc +1 0.5 1 0 k +Pc +PB +%AI5_EndPalette +%%EndSetup +%AI5_BeginLayer +1 1 1 1 0 0 0 79 128 255 Lb +(Layer 1) Ln +0 A +800 Ar +0 J 0 j 1 w 4 M []0 d +%AI3_Note: +0 D +0 XR +-4014 283.5 m +4626 283.5 L +(N) * +453.5 4716 m +453.5 -3924 L +(N) * +85 4716 m +85 -3924 L +(N) * +-4014 765.5 m +4626 765.5 L +(N) * +0 R +0 G +113 683.5 m +439 683.5 l +S +113 663.5 m +439 663.5 l +S +113 643.5 m +439 643.5 l +S +113 686 m +439 686 l +S +1 Ap +439 624 m +439 709 L +113 709 L +113 624 L +439 624 L +s +0 Ap +178.5 709 m +178.5 624 l +S +243 709 m +243 624 l +S +374 709 m +374 624 l +S +308.5 709 m +308.5 624 l +S +0 To +1 0 0 1 146 692 0 Tp +TP +-12.2278 0 Td +0 Tr +0 O +0 g +/_Univers 10 Tf +0 Ts +100 Tz +0 Tt +1 TA +%_ 0 XL +36 0 Xb +XB +0 0 5 TC +100 100 200 TW +0 0 0 Ti +1 Ta +0 0 2 2 3 Th +0 Tq +0 0 Tl +0 Tc +0 Tw +(key 1) Tx +(\r) TX +TO +0 To +1 0 0 1 213 692 0 Tp +TP +-12.2278 0 Td +0 Tr +(key 2) Tx +(\r) TX +TO +0 To +1 0 0 1 276 692 0 Tp +TP +-11.1121 0 Td +0 Tr +(col 3) Tx +(\r) TX +TO +0 To +1 0 0 1 225.5 747.5 0 Tp +TP +0 Tr +(\r) Tx +TO +0 To +1 0 0 1 336.5 693.5 0 Tp +TP +0 Tr +(\r) Tx +TO +0 To +1 0 0 1 341 692 0 Tp +TP +-11.1121 0 Td +0 Tr +(col 4) Tx +(\r) TX +TO +0 To +1 0 0 1 407.5 692 0 Tp +TP +-11.1121 0 Td +0 Tr +(col 5) Tx +(\r) TX +TO +0 To +1 0 0 1 185.5 736 0 Tp +TP +0 Tr +(\r) Tx +TO +0 To +1 0 0 1 145 669.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(1) Tx +(\r) TX +TO +0 To +1 0 0 1 144.5 650.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(1) Tx +(\r) TX +TO +0 To +1 0 0 1 145 630 0 Tp +TP +-2.7795 0 Td +0 Tr +(2) Tx +(\r) TX +TO +0 To +1 0 0 1 209.5 669 0 Tp +TP +-2.7795 0 Td +0 Tr +(1) Tx +(\r) TX +TO +0 To +1 0 0 1 209.5 649.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(2) Tx +(\r) TX +TO +0 To +1 0 0 1 209.5 629.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(1) Tx +(\r) TX +TO +0 To +1 0 0 1 274.5 669 0 Tp +TP +-2.7795 0 Td +0 Tr +(a) Tx +(\r) TX +TO +0 To +1 0 0 1 274.5 649.5 0 Tp +TP +-3.0542 0 Td +0 Tr +(d) Tx +(\r) TX +TO +0 To +1 0 0 1 274.5 629.5 0 Tp +TP +-3.0542 0 Td +0 Tr +(g) Tx +(\r) TX +TO +0 To +1 0 0 1 340 669 0 Tp +TP +-3.0542 0 Td +0 Tr +(b) Tx +(\r) TX +TO +0 To +1 0 0 1 340 649.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(e) Tx +(\r) TX +TO +0 To +1 0 0 1 340 629.5 0 Tp +TP +-8.8879 0 Td +0 Tr +(N/A) Tx +(\r) TX +TO +0 To +1 0 0 1 405 669 0 Tp +TP +-2.5 0 Td +0 Tr +(c) Tx +(\r) TX +TO +0 To +1 0 0 1 405 649.5 0 Tp +TP +-1.6638 0 Td +0 Tr +(f) Tx +(\r) TX +TO +0 To +1 0 0 1 405 629.5 0 Tp +TP +-1.3892 0 Td +0 Tr +(i) Tx +(\r) TX +TO +1 Ap +0 R +0 G +274.4998 623.4963 m +279.1963 623.4963 283.0037 627.3037 283.0037 632.0002 c +283.0037 636.6968 279.1963 640.5042 274.4998 640.5042 c +269.8032 640.5042 265.9958 636.6968 265.9958 632.0002 c +265.9958 627.3037 269.8032 623.4963 274.4998 623.4963 c +s +[3 4 3 4 3 4 ]0 d +339.9998 663.4963 m +344.6963 663.4963 348.5037 667.3037 348.5037 672.0002 c +348.5037 676.6968 344.6963 680.5042 339.9998 680.5042 c +335.3032 680.5042 331.4958 676.6968 331.4958 672.0002 c +331.4958 667.3037 335.3032 663.4963 339.9998 663.4963 c +s +u +u +u +u +u +u +u +0 Ap +[]0 d +274.4998 623.4963 m +277 615.5 297 615.5 v +317 615.5 313.6364 635.614 316.5 648.5 c +318.5 657.5 326 662 y +S +0 O +0 g +327.4981 664.0941 m +325.8236 663.6715 324.6654 663.5131 323.254 663.2872 c +325.8493 658.9617 l +326.1406 659.3991 327.3976 661.0481 328.5586 662.3265 c +329.8008 663.6954 330.9886 664.8344 331.8138 665.4817 c +330.8543 665.0582 329.2904 664.5461 327.4981 664.0941 c +f +U +U +U +U +U +U +U +1 Ap +0 R +0 G +404.9998 624.4963 m +409.6963 624.4963 413.5037 628.3037 413.5037 633.0002 c +413.5037 637.6968 409.6963 641.5042 404.9998 641.5042 c +400.3032 641.5042 396.4958 637.6968 396.4958 633.0002 c +396.4958 628.3037 400.3032 624.4963 404.9998 624.4963 c +s +u +0 Ap +396.4958 633.0002 m +384.5 634.5089 384.5 620.5 v +383.5 603 l +S +0 O +0 g +384.3884 600.5834 m +384.9812 602.2055 385.5017 603.2521 386.1089 604.5461 c +381.0729 604.8338 l +381.2706 604.347 381.9268 602.38 382.3305 600.701 c +382.7634 598.904 383.0369 597.2812 383.1078 596.2348 c +383.2974 597.2663 383.7539 598.8474 384.3884 600.5834 c +f +U +0 To +1 0 0 1 383 582 0 Tp +TP +-26.9788 0 Td +0 Tr +(endOfT) Tx 1 104 Tk +(able) Tx +(\r) TX +TO +LB +%AI5_EndLayer-- +%%PageTrailer +gsave annotatepage grestore showpage +%%Trailer +Adobe_Illustrator_AI5 /terminate get exec +Adobe_ColorImage_AI6 /terminate get exec +Adobe_typography_AI5 /terminate get exec +Adobe_level2_AI5 /terminate get exec +%%EOF diff --git a/lib/snmp/doc/src/getnext4.gif b/lib/snmp/doc/src/getnext4.gif Binary files differnew file mode 100644 index 0000000000..703afcc7c5 --- /dev/null +++ b/lib/snmp/doc/src/getnext4.gif diff --git a/lib/snmp/doc/src/getnext4.ps b/lib/snmp/doc/src/getnext4.ps new file mode 100644 index 0000000000..8ef3ccf709 --- /dev/null +++ b/lib/snmp/doc/src/getnext4.ps @@ -0,0 +1,3002 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Adobe Illustrator(r) 6.0 +%%For: (Anna Fedoriw) (Ericsson Telecom) +%%Title: (GetNext312.eps) +%%CreationDate: (97-05-23) (14.04) +%%BoundingBox: 112 605 440 757 +%%HiResBoundingBox: 112.5 605.1454 439.5 756.8677 +%%DocumentProcessColors: Black +%%DocumentFonts: Univers +%%DocumentSuppliedResources: procset Adobe_level2_AI5 1.0 0 +%%+ procset Adobe_typography_AI5 1.0 0 +%%+ procset Adobe_Illustrator_AI6_vars Adobe_Illustrator_AI6 +%%+ procset Adobe_Illustrator_AI5 1.0 0 +%AI5_FileFormat 2.0 +%AI3_ColorUsage: Black&White +%%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) +%%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 -1 -1 +%%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () +%AI3_TemplateBox: 306 396 306 396 +%AI3_TileBox: 21 -12 588 802 +%AI3_DocumentPreview: Macintosh_ColorPic +%AI5_ArtSize: 595.2756 841.8898 +%AI5_RulerUnits: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 1 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI5_OpenToView: 54 804 2 1146 827 58 1 1 3 40 +%AI5_OpenViewLayers: 7 +%%EndComments +%%BeginProlog +%%BeginResource: procset Adobe_level2_AI5 1.2 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) +%%Version: 1.2 +%%CreationDate: (04/10/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +userdict /Adobe_level2_AI5 23 dict dup begin + put + /packedarray where not + { + userdict begin + /packedarray + { + array astore readonly + } bind def + /setpacking /pop load def + /currentpacking false def + end + 0 + } if + pop + userdict /defaultpacking currentpacking put true setpacking + /initialize + { + Adobe_level2_AI5 begin + } bind def + /terminate + { + currentdict Adobe_level2_AI5 eq + { + end + } if + } bind def + mark + /setcustomcolor where not + { + /findcmykcustomcolor + { + 5 packedarray + } bind def + /setcustomcolor + { + exch aload pop pop + 4 + { + 4 index mul 4 1 roll + } repeat + 5 -1 roll pop + setcmykcolor + } + def + } if + + /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def + userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put + userdict /level2? + systemdict /languagelevel known dup + { + pop systemdict /languagelevel get 2 ge + } if + put +/level2ScreenFreq +{ + begin + 60 + HalftoneType 1 eq + { + pop Frequency + } if + HalftoneType 2 eq + { + pop GrayFrequency + } if + HalftoneType 5 eq + { + pop Default level2ScreenFreq + } if + end +} bind def +userdict /currentScreenFreq + level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put +level2? not + { + /setcmykcolor where not + { + /setcmykcolor + { + exch .11 mul add exch .59 mul add exch .3 mul add + 1 exch sub setgray + } def + } if + /currentcmykcolor where not + { + /currentcmykcolor + { + 0 0 0 1 currentgray sub + } def + } if + /setoverprint where not + { + /setoverprint /pop load def + } if + /selectfont where not + { + /selectfont + { + exch findfont exch + dup type /arraytype eq + { + makefont + } + { + scalefont + } ifelse + setfont + } bind def + } if + /cshow where not + { + /cshow + { + [ + 0 0 5 -1 roll aload pop + ] cvx bind forall + } bind def + } if + } if + cleartomark + /anyColor? + { + add add add 0 ne + } bind def + /testColor + { + gsave + setcmykcolor currentcmykcolor + grestore + } bind def + /testCMYKColorThrough + { + testColor anyColor? + } bind def + userdict /composite? + level2? + { + gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore + add add add 4 eq + } + { + 1 0 0 0 testCMYKColorThrough + 0 1 0 0 testCMYKColorThrough + 0 0 1 0 testCMYKColorThrough + 0 0 0 1 testCMYKColorThrough + and and and + } ifelse + put + composite? not + { + userdict begin + gsave + /cyan? 1 0 0 0 testCMYKColorThrough def + /magenta? 0 1 0 0 testCMYKColorThrough def + /yellow? 0 0 1 0 testCMYKColorThrough def + /black? 0 0 0 1 testCMYKColorThrough def + grestore + /isCMYKSep? cyan? magenta? yellow? black? or or or def + /customColor? isCMYKSep? not def + end + } if + end defaultpacking setpacking +%%EndResource +%%BeginResource: procset Adobe_typography_AI5 1.0 1 +%%Title: (Typography Operators) +%%Version: 1.0 +%%CreationDate:(03/26/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_typography_AI5 54 dict dup begin +put +/initialize +{ + begin + begin + Adobe_typography_AI5 begin + Adobe_typography_AI5 + { + dup xcheck + { + bind + } if + pop pop + } forall + end + end + end + Adobe_typography_AI5 begin +} def +/terminate +{ + currentdict Adobe_typography_AI5 eq + { + end + } if +} def +/modifyEncoding +{ + /_tempEncode exch ddef + /_pntr 0 ddef + { + counttomark -1 roll + dup type dup /marktype eq + { + pop pop exit + } + { + /nametype eq + { + _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll + put + } + { + /_pntr exch ddef + } ifelse + } ifelse + } loop + _tempEncode +} def +/TE +{ + StandardEncoding 256 array copy modifyEncoding + /_nativeEncoding exch def +} def +% +/TZ +{ + dup type /arraytype eq + { + /_wv exch def + } + { + /_wv 0 def + } ifelse + /_useNativeEncoding exch def + pop pop + findfont _wv type /arraytype eq + { + _wv makeblendedfont + } if + dup length 2 add dict + begin + mark exch + { + 1 index /FID ne + { + def + } if + cleartomark mark + } forall + pop + /FontName exch def + counttomark 0 eq + { + 1 _useNativeEncoding eq + { + /Encoding _nativeEncoding def + } if + cleartomark + } + { + /Encoding load 256 array copy + modifyEncoding /Encoding exch def + } ifelse + FontName currentdict + end + definefont pop +} def +/tr +{ + _ax _ay 3 2 roll +} def +/trj +{ + _cx _cy _sp _ax _ay 6 5 roll +} def +/a0 +{ + /Tx + { + dup + currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + } ddef + /Tj + { + dup + currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + } ddef +} def +/a1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/e0 +{ + /Tx + { + tr _psf + } ddef + /Tj + { + trj _pjsf + } ddef +} def +/e1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + tr _psf + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + trj _pjsf + grestore 3 1 roll moveto tr jsp + } ddef +} def +/i0 +{ + /Tx + { + tr sp + } ddef + /Tj + { + trj jsp + } ddef +} def +/i1 +{ + W N +} def +/o0 +{ + /Tx + { + tr sw rmoveto + } ddef + /Tj + { + trj swj rmoveto + } ddef +} def +/r0 +{ + /Tx + { + tr _ctm _pss + } ddef + /Tj + { + trj _ctm _pjss + } ddef +} def +/r1 +{ + /Tx + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/To +{ + pop _ctm currentmatrix pop +} def +/TO +{ + iTe _ctm setmatrix newpath +} def +/Tp +{ + pop _tm astore pop _ctm setmatrix + _tDict begin + /W + { + } def + /h + { + } def +} def +/TP +{ + end + iTm 0 0 moveto +} def +/Tr +{ + _render 3 le + { + currentpoint newpath moveto + } if + dup 8 eq + { + pop 0 + } + { + dup 9 eq + { + pop 1 + } if + } ifelse + dup /_render exch ddef + _renderStart exch get load exec +} def +/iTm +{ + _ctm setmatrix _tm concat 0 _rise translate _hs 1 scale +} def +/Tm +{ + _tm astore pop iTm 0 0 moveto +} def +/Td +{ + _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto +} def +/iTe +{ + _render -1 eq + { + } + { + _renderEnd _render get dup null ne + { + load exec + } + { + pop + } ifelse + } ifelse + /_render -1 ddef +} def +/Ta +{ + pop +} def +/Tf +{ + dup 1000 div /_fScl exch ddef +% + selectfont +} def +/Tl +{ + pop + 0 exch _leading astore pop +} def +/Tt +{ + pop +} def +/TW +{ + 3 npop +} def +/Tw +{ + /_cx exch ddef +} def +/TC +{ + 3 npop +} def +/Tc +{ + /_ax exch ddef +} def +/Ts +{ + /_rise exch ddef + currentpoint + iTm + moveto +} def +/Ti +{ + 3 npop +} def +/Tz +{ + 100 div /_hs exch ddef + iTm +} def +/TA +{ + pop +} def +/Tq +{ + pop +} def +/Th +{ + pop pop pop pop pop +} def +/TX +{ + pop +} def +/Tk +{ + exch pop _fScl mul neg 0 rmoveto +} def +/TK +{ + 2 npop +} def +/T* +{ + _leading aload pop neg Td +} def +/T*- +{ + _leading aload pop Td +} def +/T- +{ + _ax neg 0 rmoveto + _hyphen Tx +} def +/T+ +{ +} def +/TR +{ + _ctm currentmatrix pop + _tm astore pop + iTm 0 0 moveto +} def +/TS +{ + currentfont 3 1 roll + /_Symbol_ _fScl 1000 mul selectfont + + 0 eq + { + Tx + } + { + Tj + } ifelse + setfont +} def +/Xb +{ + pop pop +} def +/Tb /Xb load def +/Xe +{ + pop pop pop pop +} def +/Te /Xe load def +/XB +{ +} def +/TB /XB load def +currentdict readonly pop +end +setpacking +%%EndResource +%%BeginProcSet: Adobe_ColorImage_AI6 1.0 0 +userdict /Adobe_ColorImage_AI6 known not +{ + userdict /Adobe_ColorImage_AI6 17 dict put +} if +userdict /Adobe_ColorImage_AI6 get begin + + /initialize + { + Adobe_ColorImage_AI6 begin + Adobe_ColorImage_AI6 + { + dup type /arraytype eq + { + dup xcheck + { + bind + } if + } if + pop pop + } forall + } def + /terminate { end } def + + currentdict /Adobe_ColorImage_AI6_Vars known not + { + /Adobe_ColorImage_AI6_Vars 14 dict def + } if + + Adobe_ColorImage_AI6_Vars begin + /channelcount 0 def + /sourcecount 0 def + /sourcearray 4 array def + /plateindex -1 def + /XIMask 0 def + /XIBinary 0 def + /XIChannelCount 0 def + /XIBitsPerPixel 0 def + /XIImageHeight 0 def + /XIImageWidth 0 def + /XIImageMatrix null def + /XIBuffer null def + /XIDataProc null def + end + + /WalkRGBString null def + /WalkCMYKString null def + + /StuffRGBIntoGrayString null def + /RGBToGrayImageProc null def + /StuffCMYKIntoGrayString null def + /CMYKToGrayImageProc null def + /ColorImageCompositeEmulator null def + + /SeparateCMYKImageProc null def + + /FourEqual null def + /TestPlateIndex null def + + currentdict /_colorimage known not + { + /colorimage where + { + /colorimage get /_colorimage exch def + } + { + /_colorimage null def + } ifelse + } if + + /_currenttransfer systemdict /currenttransfer get def + + /colorimage null def + /XI null def + + + /WalkRGBString + { + 0 3 index + + dup length 1 sub 0 3 3 -1 roll + { + 3 getinterval { } forall + + 5 index exec + + 3 index + } for + + 5 { pop } repeat + + } def + + + /WalkCMYKString + { + 0 3 index + + dup length 1 sub 0 4 3 -1 roll + { + 4 getinterval { } forall + + 6 index exec + + 3 index + + } for + + 5 { pop } repeat + + } def + + + /StuffRGBIntoGrayString + { + .11 mul exch + + .59 mul add exch + + .3 mul add + + cvi 3 copy put + + pop 1 add + } def + + + /RGBToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 3 idiv string + dup 3 1 roll + + /StuffRGBIntoGrayString load exch + WalkRGBString + end + } def + + + /StuffCMYKIntoGrayString + { + exch .11 mul add + + exch .59 mul add + + exch .3 mul add + + dup 255 gt { pop 255 } if + + 255 exch sub cvi 3 copy put + + pop 1 add + } def + + + /CMYKToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 4 idiv string + dup 3 1 roll + + /StuffCMYKIntoGrayString load exch + WalkCMYKString + end + } def + + + /ColorImageCompositeEmulator + { + pop true eq + { + Adobe_ColorImage_AI6_Vars /sourcecount get 5 add { pop } repeat + } + { + Adobe_ColorImage_AI6_Vars /channelcount get 1 ne + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 3 -1 roll put + + channelcount 3 eq + { + /RGBToGrayImageProc + } + { + /CMYKToGrayImageProc + } ifelse + load + end + } if + image + } ifelse + } def + + + /SeparateCMYKImageProc + { + Adobe_ColorImage_AI6_Vars begin + + sourcecount 0 ne + { + sourcearray plateindex get exec + } + { + sourcearray 0 get exec + + dup length 4 idiv string + + 0 2 index + + plateindex 4 2 index length 1 sub + { + get 255 exch sub + + 3 copy put pop 1 add + + 2 index + } for + + pop pop exch pop + } ifelse + end + } def + + + /FourEqual + { + 4 index ne + { + pop pop pop false + } + { + 4 index ne + { + pop pop false + } + { + 4 index ne + { + pop false + } + { + 4 index eq + } ifelse + } ifelse + } ifelse + } def + + + /TestPlateIndex + { + Adobe_ColorImage_AI6_Vars begin + /plateindex -1 def + + /setcmykcolor where + { + pop + gsave + 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub + grestore + + 1 0 0 0 FourEqual + { + /plateindex 0 def + } + { + 0 1 0 0 FourEqual + { + /plateindex 1 def + } + { + 0 0 1 0 FourEqual + { + /plateindex 2 def + } + { + 0 0 0 1 FourEqual + { + /plateindex 3 def + } + { + 0 0 0 0 FourEqual + { + /plateindex 5 def + } if + } ifelse + } ifelse + } ifelse + } ifelse + pop pop pop pop + } if + plateindex + end + } def + + + /colorimage + { + Adobe_ColorImage_AI6_Vars begin + /channelcount 1 index def + /sourcecount 2 index 1 eq { channelcount 1 sub } { 0 } ifelse def + + 4 sourcecount add index dup + 8 eq exch 1 eq or not + end + + { + /_colorimage load null ne + { + _colorimage + } + { + Adobe_ColorImage_AI6_Vars /sourcecount get + 7 add { pop } repeat + } ifelse + } + { + dup 3 eq + TestPlateIndex + dup -1 eq exch 5 eq or or + { + /_colorimage load null eq + { + ColorImageCompositeEmulator + } + { + dup 1 eq + { + pop pop image + } + { + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + gsave + + 0 _currenttransfer exec + 1 _currenttransfer exec + eq + { 0 _currenttransfer exec 0.5 lt } + { 0 _currenttransfer exec 1 _currenttransfer exec gt } ifelse + + { { pop 0 } } { { pop 1 } } ifelse + systemdict /settransfer get exec + } if + + _colorimage + + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + grestore + } if + } ifelse + } ifelse + } + { + dup 1 eq + { + pop pop + image + } + { + pop pop + + Adobe_ColorImage_AI6_Vars begin + sourcecount -1 0 + { + exch sourcearray 3 1 roll put + } for + + /SeparateCMYKImageProc load + end + + systemdict /image get exec + } ifelse + } ifelse + } ifelse + } def + + /XI + { + Adobe_ColorImage_AI6_Vars begin + gsave + /XIMask exch 0 ne def + /XIBinary exch 0 ne def + pop + pop + /XIChannelCount exch def + /XIBitsPerPixel exch def + /XIImageHeight exch def + /XIImageWidth exch def + pop pop pop pop + /XIImageMatrix exch def + + XIBitsPerPixel 1 eq + { + XIImageWidth 8 div ceiling cvi + } + { + XIImageWidth XIChannelCount mul + } ifelse + /XIBuffer exch string def + + XIBinary + { + /XIDataProc { currentfile XIBuffer readstring pop } def + currentfile 128 string readline pop pop + } + { + /XIDataProc { currentfile XIBuffer readhexstring pop } def + } ifelse + + 0 0 moveto + XIImageMatrix concat + XIImageWidth XIImageHeight scale + + XIMask + { + XIImageWidth XIImageHeight + false + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + /_lp /null ddef + _fc + /_lp /imagemask ddef + + imagemask + } + { + XIImageWidth XIImageHeight + XIBitsPerPixel + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + XIChannelCount 1 eq + { + + gsave + 0 setgray + + image + + grestore + } + { + false + XIChannelCount + colorimage + } ifelse + } ifelse + grestore + end + } def + +end +%%EndProcSet +%%BeginResource: procset Adobe_Illustrator_AI5 1.1 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Full Prolog) +%%Version: 1.1 +%%CreationDate: (3/7/1994) () +%%Copyright: ((C) 1987-1994 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_Illustrator_AI5_vars 81 dict dup begin +put +/_eo false def +/_lp /none def +/_pf +{ +} def +/_ps +{ +} def +/_psf +{ +} def +/_pss +{ +} def +/_pjsf +{ +} def +/_pjss +{ +} def +/_pola 0 def +/_doClip 0 def +/cf currentflat def +/_tm matrix def +/_renderStart +[ +/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 +] def +/_renderEnd +[ +null null null null /i1 /i1 /i1 /i1 +] def +/_render -1 def +/_rise 0 def +/_ax 0 def +/_ay 0 def +/_cx 0 def +/_cy 0 def +/_leading +[ +0 0 +] def +/_ctm matrix def +/_mtx matrix def +/_sp 16#020 def +/_hyphen (-) def +/_fScl 0 def +/_cnt 0 def +/_hs 1 def +/_nativeEncoding 0 def +/_useNativeEncoding 0 def +/_tempEncode 0 def +/_pntr 0 def +/_tDict 2 dict def +/_wv 0 def +/Tx +{ +} def +/Tj +{ +} def +/CRender +{ +} def +/_AI3_savepage +{ +} def +/_gf null def +/_cf 4 array def +/_if null def +/_of false def +/_fc +{ +} def +/_gs null def +/_cs 4 array def +/_is null def +/_os false def +/_sc +{ +} def +/_pd 1 dict def +/_ed 15 dict def +/_pm matrix def +/_fm null def +/_fd null def +/_fdd null def +/_sm null def +/_sd null def +/_sdd null def +/_i null def +/discardSave null def +/buffer 256 string def +/beginString null def +/endString null def +/endStringLength null def +/layerCnt 1 def +/layerCount 1 def +/perCent (%) 0 get def +/perCentSeen? false def +/newBuff null def +/newBuffButFirst null def +/newBuffLast null def +/clipForward? false def +end +userdict /Adobe_Illustrator_AI5 known not { + userdict /Adobe_Illustrator_AI5 91 dict put +} if +userdict /Adobe_Illustrator_AI5 get begin +/initialize +{ + Adobe_Illustrator_AI5 dup begin + Adobe_Illustrator_AI5_vars begin + discardDict + { + bind pop pop + } forall + dup /nc get begin + { + dup xcheck 1 index type /operatortype ne and + { + bind + } if + pop pop + } forall + end + newpath +} def +/terminate +{ + end + end +} def +/_ +null def +/ddef +{ + Adobe_Illustrator_AI5_vars 3 1 roll put +} def +/xput +{ + dup load dup length exch maxlength eq + { + dup dup load dup + length 2 mul dict copy def + } if + load begin + def + end +} def +/npop +{ + { + pop + } repeat +} def +/sw +{ + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add +} def +/swj +{ + dup 4 1 roll + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add + 6 2 roll /_cnt 0 ddef + { + 1 index eq + { + /_cnt _cnt 1 add ddef + } if + } forall + pop + exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop +} def +/ss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put pop + gsave + false charpath currentpoint + 4 index setmatrix + stroke + grestore + moveto + 2 copy rmoveto + } exch cshow + 3 npop +} def +/jss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put + gsave + _sp eq + { + exch 6 index 6 index 6 index 5 -1 roll widthshow + currentpoint + } + { + false charpath currentpoint + 4 index setmatrix stroke + } ifelse + grestore + moveto + 2 copy rmoveto + } exch cshow + 6 npop +} def +/sp +{ + { + 2 npop (0) exch + 2 copy 0 exch put pop + false charpath + 2 copy rmoveto + } exch cshow + 2 npop +} def +/jsp +{ + { + 2 npop + (0) exch 2 copy 0 exch put + _sp eq + { + exch 5 index 5 index 5 index 5 -1 roll widthshow + } + { + false charpath + } ifelse + 2 copy rmoveto + } exch cshow + 5 npop +} def +/pl +{ + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform +} def +/setstrokeadjust where +{ + pop true setstrokeadjust + /c + { + curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll curveto + } def + /V + /v load def + /y + { + 2 copy curveto + } def + /Y + /y load def + /l + { + lineto + } def + /L + /l load def + /m + { + moveto + } def +} +{ + /c + { + pl curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll pl curveto + } def + /V + /v load def + /y + { + pl 2 copy curveto + } def + /Y + /y load def + /l + { + pl lineto + } def + /L + /l load def + /m + { + pl moveto + } def +} ifelse +/d +{ + setdash +} def +/cf +{ +} def +/i +{ + dup 0 eq + { + pop cf + } if + setflat +} def +/j +{ + setlinejoin +} def +/J +{ + setlinecap +} def +/M +{ + setmiterlimit +} def +/w +{ + setlinewidth +} def +/XR +{ + 0 ne + /_eo exch ddef +} def +/H +{ +} def +/h +{ + closepath +} def +/N +{ + _pola 0 eq + { + _doClip 1 eq + { + _eo {eoclip} {clip} ifelse /_doClip 0 ddef + } if + newpath + } + { + /CRender + { + N + } ddef + } ifelse +} def +/n +{ + N +} def +/F +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc + /_doClip 0 ddef + } + { + _pf + } ifelse + } + { + /CRender + { + F + } ddef + } ifelse +} def +/f +{ + closepath + F +} def +/S +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + _ps + } ifelse + } + { + /CRender + { + S + } ddef + } ifelse +} def +/s +{ + closepath + S +} def +/B +{ + _pola 0 eq + { + _doClip 1 eq + gsave F grestore + { + gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + S + } ifelse + } + { + /CRender + { + B + } ddef + } ifelse +} def +/b +{ + closepath + B +} def +/W +{ + /_doClip 1 ddef +} def +/* +{ + count 0 ne + { + dup type /stringtype eq + { + pop + } if + } if + newpath +} def +/u +{ +} def +/U +{ +} def +/q +{ + _pola 0 eq + { + gsave + } if +} def +/Q +{ + _pola 0 eq + { + grestore + } if +} def +/*u +{ + _pola 1 add /_pola exch ddef +} def +/*U +{ + _pola 1 sub /_pola exch ddef + _pola 0 eq + { + CRender + } if +} def +/D +{ + pop +} def +/*w +{ +} def +/*W +{ +} def +/` +{ + /_i save ddef + clipForward? + { + nulldevice + } if + 6 1 roll 4 npop + concat pop + userdict begin + /showpage + { + } def + 0 setgray + 0 setlinecap + 1 setlinewidth + 0 setlinejoin + 10 setmiterlimit + [] 0 setdash + /setstrokeadjust where {pop false setstrokeadjust} if + newpath + 0 setgray + false setoverprint +} def +/~ +{ + end + _i restore +} def +/O +{ + 0 ne + /_of exch ddef + /_lp /none ddef +} def +/R +{ + 0 ne + /_os exch ddef + /_lp /none ddef +} def +/g +{ + /_gf exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _gf setgray + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/G +{ + /_gs exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _gs setgray + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/k +{ + _cf astore pop + /_fc + { + _lp /fill ne + { + _of setoverprint + _cf aload pop setcmykcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/K +{ + _cs astore pop + /_sc + { + _lp /stroke ne + { + _os setoverprint + _cs aload pop setcmykcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/x +{ + /_gf exch ddef + findcmykcustomcolor + /_if exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _if _gf 1 exch sub setcustomcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/X +{ + /_gs exch ddef + findcmykcustomcolor + /_is exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _is _gs 1 exch sub setcustomcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/A +{ + pop +} def +/annotatepage +{ +userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse +} def +/XT { + pop pop +} def +/discard +{ + save /discardSave exch store + discardDict begin + /endString exch store + gt38? + { + 2 add + } if + load + stopped + pop + end + discardSave restore +} bind def +userdict /discardDict 7 dict dup begin +put +/pre38Initialize +{ + /endStringLength endString length store + /newBuff buffer 0 endStringLength getinterval store + /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store + /newBuffLast newBuff endStringLength 1 sub 1 getinterval store +} def +/shiftBuffer +{ + newBuff 0 newBuffButFirst putinterval + newBuffLast 0 + currentfile read not + { + stop + } if + put +} def +0 +{ + pre38Initialize + mark + currentfile newBuff readstring exch pop + { + { + newBuff endString eq + { + cleartomark stop + } if + shiftBuffer + } loop + } + { + stop + } ifelse +} def +1 +{ + pre38Initialize + /beginString exch store + mark + currentfile newBuff readstring exch pop + { + { + newBuff beginString eq + { + /layerCount dup load 1 add store + } + { + newBuff endString eq + { + /layerCount dup load 1 sub store + layerCount 0 eq + { + cleartomark stop + } if + } if + } ifelse + shiftBuffer + } loop + } if +} def +2 +{ + mark + { + currentfile buffer readline not + { + stop + } if + endString eq + { + cleartomark stop + } if + } loop +} def +3 +{ + /beginString exch store + /layerCnt 1 store + mark + { + currentfile buffer readline not + { + stop + } if + dup beginString eq + { + pop /layerCnt dup load 1 add store + } + { + endString eq + { + layerCnt 1 eq + { + cleartomark stop + } + { + /layerCnt dup load 1 sub store + } ifelse + } if + } ifelse + } loop +} def +end +userdict /clipRenderOff 15 dict dup begin +put +{ + /n /N /s /S /f /F /b /B +} +{ + { + _doClip 1 eq + { + /_doClip 0 ddef _eo {eoclip} {clip} ifelse + } if + newpath + } def +} forall +/Tr /pop load def +/Bb {} def +/BB /pop load def +/Bg {12 npop} def +/Bm {6 npop} def +/Bc /Bm load def +/Bh {4 npop} def +end +/Lb +{ + 4 npop + 6 1 roll + pop + 4 1 roll + pop pop pop + 0 eq + { + 0 eq + { + (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard + } + { + + /clipForward? true def + + /Tx /pop load def + /Tj /pop load def + + currentdict end clipRenderOff begin begin + } ifelse + } + { + 0 eq + { + save /discardSave exch store + } if + } ifelse +} bind def +/LB +{ + discardSave dup null ne + { + restore + } + { + pop + clipForward? + { + currentdict + end + end + begin + + /clipForward? false ddef + } if + } ifelse +} bind def +/Pb +{ + pop pop + 0 (%AI5_EndPalette) discard +} bind def +/Np +{ + 0 (%AI5_End_NonPrinting--) discard +} bind def +/Ln /pop load def +/Ap +/pop load def +/Ar +{ + 72 exch div + 0 dtransform dup mul exch dup mul add sqrt + dup 1 lt + { + pop 1 + } if + setflat +} def +/Mb +{ + q +} def +/Md +{ +} def +/MB +{ + Q +} def +/nc 3 dict def +nc begin +/setgray +{ + pop +} bind def +/setcmykcolor +{ + 4 npop +} bind def +/setcustomcolor +{ + 2 npop +} bind def +currentdict readonly pop +end +end +setpacking +%%EndResource +%%EndProlog +%%BeginSetup +%%IncludeFont: Univers +Adobe_level2_AI5 /initialize get exec +Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_typography_AI5 /initialize get exec +Adobe_ColorImage_AI6 /initialize get exec +Adobe_Illustrator_AI5 /initialize get exec +[ +39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis +/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute +/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde +/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex +/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls +/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash +/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef +/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash +/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef +/guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe +/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide +/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright +/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand +/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex +/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex +/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla +/hungarumlaut/ogonek/caron +TE +%AI3_BeginEncoding: _Univers Univers +[/_Univers/Univers 0 0 1 TZ +%AI3_EndEncoding AdobeType +%AI5_Begin_NonPrinting +Np +8 Bn +%AI5_BeginGradient: (Black & White) +(Black & White) 0 2 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Green & Blue) +(Green & Blue) 0 2 Bd +[ +< +99999A9A9B9B9B9C9C9D9D9D9E9E9F9F9FA0A0A1A1A1A2A2A3A3A3A4A4A5A5A5A6A6A7A7A7A8A8A9 +A9A9AAAAABABABACACADADADAEAEAFAFAFB0B0B1B1B1B2B2B3B3B3B4B4B5B5B5B6B6B7B7B7B8B8B9 +B9B9BABABBBBBBBCBCBDBDBDBEBEBFBFBFC0C0C1C1C1C2C2C3C3C3C4C4C5C5C5C6C6C7C7C7C8C8C9 +C9C9CACACBCBCBCCCCCDCDCDCECECFCFCFD0D0D1D1D1D2D2D3D3D3D4D4D5D5D5D6D6D7D7D7D8D8D9 +D9D9DADADBDBDBDCDCDDDDDDDEDEDFDFDFE0E0E1E1E1E2E2E3E3E3E4E4E5E5E5E6E6E7E7E7E8E8E9 +E9E9EAEAEBEBEBECECEDEDEDEEEEEFEFEFF0F0F1F1F1F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F9 +F9F9FAFAFBFBFBFCFCFDFDFDFEFEFFFF +> +< +000102020304050506070808090A0B0B0C0D0E0E0F101111121314141516171718191A1A1B1C1D1D +1E1F20202122232324252626272829292A2B2C2C2D2E2F2F303132323334353536373838393A3B3B +3C3D3E3E3F404141424344444546474748494A4A4B4C4D4D4E4F5050515253535455565657585959 +5A5B5C5C5D5E5F5F606162626364656566676868696A6B6B6C6D6E6E6F7071717273747475767777 +78797A7A7B7C7D7D7E7F80808182828384858586878888898A8B8B8C8D8E8E8F9091919293949495 +96979798999A9A9B9C9D9D9E9FA0A0A1A2A3A3A4A5A6A6A7A8A9A9AAABACACADAEAFAFB0B1B2B2B3 +B4B5B5B6B7B8B8B9BABBBBBCBDBEBEBF +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +[ +1 0.75 0 0 1 50 100 %_Bs +0.6 0 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Pink, Yellow, Green) +(Pink, Yellow, Green) 0 3 Bd +[ +< +00000000000000000000000000000000000000010101010101010101010101010101010101010101 +01010101010202020202020202020202020202020202020202020203030303030303030303030303 +03030303030303030404040404040404040404040404040404040404050505050505050505050505 +05050505050505060606060606060606060606060606060606060707070707070707070707070707 +07070707080808080808080808080808080808080809090909090909090909090909090909090A0A +0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C +0C0C0C0C0C0C0C0D0D0D0D0D +> +< +050506060606070708080809090A0A0A0B0B0C0C0D0D0E0E0F0F1010111112121313141415151617 +17181819191A1A1B1C1C1D1D1E1F1F202021222223232425252626272828292A2A2B2C2C2D2D2E2F +2F3031313233333435353637373839393A3B3B3C3D3E3E3F4040414242434445454647474849494A +4B4C4C4D4E4F4F505151525354545556575758595A5A5B5C5C5D5E5F5F6061626363646566666768 +69696A6B6C6C6D6E6F707071727373747576777778797A7B7B7C7D7E7F7F80818283838485868787 +88898A8B8B8C8D8E8F8F9091929394949596979898999A9B9C9D9D9E9FA0A1A2A2A3A4A5A6A7A7A8 +A9AAABACADADAEAFB0B1B2B2 +> +< +CCCCCBCBCBCACACAC9C9C8C8C7C7C6C6C5C5C4C4C3C2C2C1C1C0C0BFBEBEBDBDBCBBBBBAB9B9B8B7 +B7B6B6B5B4B4B3B2B1B1B0AFAFAEADADACABAAAAA9A8A8A7A6A5A5A4A3A2A2A1A0A09F9E9D9C9C9B +9A999998979696959493929291908F8E8E8D8C8B8A8A8988878686858483828181807F7E7D7C7C7B +7A7978777776757473727171706F6E6D6C6B6A6A69686766656463636261605F5E5D5C5B5B5A5958 +5756555453525151504F4E4D4C4B4A49484746464544434241403F3E3D3C3B3A3938383736353433 +3231302F2E2D2C2B2A29282726252423222221201F1E1D1C1B1A191817161514131211100F0E0D0C +0B0A09080706050403020100 +> +0 +1 %_Br +< +737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5B5A59585756555453525150504F4E +4D4C4B4A4949484746454443434241403F3E3E3D3C3B3A3A393837363635343333323130302F2E2D +2D2C2B2A2A29282827262525242323222121201F1F1E1D1D1C1C1B1A1A1918181717161615141413 +1312121111100F0F0E0E0D0D0C0C0C0B0B0A0A090908080807070606060505050404040303030202 +020201010101010000000000 +> +< +00000000000000000000000001010101010101010101010101010101010101010101010102020202 +02020202020202020202020202020202020202020202030303030303030303030303030303030303 +03030303030303030303030303040404040404040404040404040404040404040404040404040404 +04040404040404040404050505050505050505050505050505050505050505050505050505050505 +050505050505050505050505 +> +< +BFBFBFC0C0C0C0C0C0C0C0C0C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C2C2C3C3C3C3C3C3C3C3C3 +C3C4C4C4C4C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C6C6C6C7C7C7C7C7C7 +C7C7C7C7C7C7C8C8C8C8C8C8C8C8C8C8C8C8C8C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9CACACACACACA +CACACACACACACACACACACBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCCCCCCCCCC +> +0 +1 %_Br +[ +0.05 0.7 0 0 1 50 100 %_Bs +0 0.02 0.8 0 1 57 36 %_Bs +0.45 0 0.75 0 1 37 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Purple, Red & Yellow) +(Purple, Red & Yellow) 0 3 Bd +[ +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A +> +< +CCCCCCCDCDCDCDCDCECECECECECFCFCFCFD0D0D0D0D0D1D1D1D1D1D2D2D2D2D2D3D3D3D3D3D4D4D4 +D4D5D5D5D5D5D6D6D6D6D6D7D7D7D7D7D8D8D8D8D8D9D9D9D9DADADADADADBDBDBDBDBDCDCDCDCDC +DDDDDDDDDDDEDEDEDEDFDFDFDFDFE0E0E0E0E0E1E1E1E1E1E2E2E2E2E2E3E3E3E3E4E4E4E4E4E5E5 +E5E5E5E6E6E6E6E6E7E7E7E7E7E8E8E8E8E9E9E9E9E9EAEAEAEAEAEBEBEBEBEBECECECECECEDEDED +EDEEEEEEEEEEEFEFEFEFEFF0F0F0F0F0F1F1F1F1F1F2F2F2F2F3F3F3F3F3F4F4F4F4F4F5F5F5F5F5 +F6F6F6F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFAFAFBFBFBFBFBFCFCFCFCFDFDFDFDFDFEFE +FEFEFEFFFFFF +> +0 +1 %_Br +< +E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBE +BDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A99989796 +9594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B7A797877767574737271706F6E +6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A49484746 +4544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E +1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403020100 +> +< +E5E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9EAEAEAEA +EAEAEAEAEAEBEBEBEBEBEBEBEBEBECECECECECECECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEE +EEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F3F3F3 +F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 +F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFCFC +FCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFF +> +< +00010203040405060708090A0B0C0C0D0E0F10111213141415161718191A1B1C1D1D1E1F20212223 +242525262728292A2B2C2D2D2E2F30313233343535363738393A3B3C3D3D3E3F4041424344454546 +4748494A4B4C4D4E4E4F50515253545556565758595A5B5C5D5E5E5F60616263646566666768696A +6B6C6D6E6E6F70717273747576767778797A7B7C7D7E7F7F80818283848586878788898A8B8C8D8E +8F8F90919293949596979798999A9B9C9D9E9F9FA0A1A2A3A4A5A6A7A7A8A9AAABACADAEAFAFB0B1 +B2B3B4B5B6B7B8B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C8C9CACBCC +> +0 +1 %_Br +[ +0 0.04 1 0 1 50 100 %_Bs +0 1 0.8 0 1 50 50 %_Bs +0.9 0.9 0 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Rainbow) +(Rainbow) 0 6 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +0 +1 %_Br +1 +< +0708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E +2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556 +5758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E +7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6 +A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCE +CFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6 +F7F8F9FAFBFCFDFEFF +> +0 +0 +1 %_Br +1 +< +00000000000000000000000000000000000001010101010101010101010101010101010101010101 +01010101010101010101010101010202020202020202020202020202020202020202020202020202 +02020202020202020202030303030303030303030303030303030303030303030303030303030303 +03030303030304040404040404040404040404040404040404040404040404040404040404040404 +04040505050505050505050505050505050505050505050505050505050505050505050505050606 +06060606060606060606060606060606060606060606060606060606060606060606070707070707 +07070707070707070707070707070707 +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 +1 +0 +1 %_Br +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +1 %_Br +[ +0 1 0 0 1 50 100 %_Bs +1 1 0 0 1 50 80 %_Bs +1 0.0279 0 0 1 50 60 %_Bs +1 0 1 0 1 50 40 %_Bs +0 0 1 0 1 50 20 %_Bs +0 1 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Steel Bar) +(Steel Bar) 0 3 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 70 %_Bs +0 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Orange Radial) +(Yellow & Orange Radial) 1 2 Bd +[ +0 +< +0001010203040506060708090A0B0C0C0D0E0F10111213131415161718191A1B1C1D1D1E1F202122 +232425262728292A2B2B2C2D2E2F303132333435363738393A3B3C3D3E3E3F404142434445464748 +494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60606162636465666768696A6B6C6D6E6F +707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C +> +< +FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9 +F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2 +F2F2F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEDEDEDEDEDEDECECECECECEBEBEBEBEB +EBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E8E8E8E7E7E7E7E7E6E6E6E6E6E5 +> +0 +1 %_Br +[ +0 0 1 0 1 52 19 %_Bs +0 0.55 0.9 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Purple Radial) +(Yellow & Purple Radial) 1 2 Bd +[ +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +< +1415161718191A1B1C1D1E1F1F202122232425262728292A2A2B2C2D2E2F30313233343536363738 +393A3B3C3D3E3F40414142434445464748494A4B4C4D4D4E4F50515253545556575858595A5B5C5D +5E5F60616263646465666768696A6B6C6D6E6F6F707172737475767778797A7B7B7C7D7E7F808182 +83848586868788898A8B8C8D8E8F90919292939495969798999A9B9C9D9D9E9FA0A1A2A3A4A5A6A7 +A8A9A9AAABACADAEAFB0B1B2B3B4B4B5B6B7B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C9CACBCB +CCCDCECFD0D1D2D3D4D5D6D7D7D8D9DADBDCDDDEDFE0E1E2E2E3E4E5E6E7E8E9EAEBECEDEEEEEFF0 +F1F2F3F4F5F6F7F8F9F9FAFBFCFDFEFF +> +< +ABAAAAA9A8A7A7A6A5A5A4A3A3A2A1A1A09F9F9E9D9D9C9B9B9A9999989797969595949393929191 +908F8F8E8D8D8C8B8B8A8989888787868585848383828181807F7F7E7D7D7C7B7B7A797978777776 +7575747373727171706F6F6E6D6D6C6B6B6A6969686767666565646362626160605F5E5E5D5C5C5B +5A5A5958585756565554545352525150504F4E4E4D4C4C4B4A4A4948484746464544444342424140 +403F3E3E3D3C3C3B3A3A3938383736363534343332323130302F2E2E2D2C2C2B2A2A292828272626 +25242423222121201F1F1E1D1D1C1B1B1A1919181717161515141313121111100F0F0E0D0D0C0B0B +0A090908070706050504030302010100 +> +0 +1 %_Br +[ +0 0.08 0.67 0 1 50 14 %_Bs +1 1 0 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_End_NonPrinting-- +%AI5_BeginPalette +0 2 Pb +Pn +Pc +1 g +Pc +0 g +Pc +0 0 0 0 k +Pc +0.75 g +Pc +0.5 g +Pc +0.25 g +Pc +0 g +Pc +Bb +2 (Black & White) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0 0 0 k +Pc +0.5 0 0 0 k +Pc +0.75 0 0 0 k +Pc +1 0 0 0 k +Pc +0.25 0.25 0 0 k +Pc +0.5 0.5 0 0 k +Pc +0.75 0.75 0 0 k +Pc +1 1 0 0 k +Pc +Bb +2 (Pink, Yellow, Green) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0 0 k +Pc +0 0.5 0 0 k +Pc +0 0.75 0 0 k +Pc +0 1 0 0 k +Pc +0 0.25 0.25 0 k +Pc +0 0.5 0.5 0 k +Pc +0 0.75 0.75 0 k +Pc +0 1 1 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Purple Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0 0.25 0 k +Pc +0 0 0.5 0 k +Pc +0 0 0.75 0 k +Pc +0 0 1 0 k +Pc +0.25 0 0.25 0 k +Pc +0.5 0 0.5 0 k +Pc +0.75 0 0.75 0 k +Pc +1 0 1 0 k +Pc +Bb +2 (Rainbow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0 0 k +Pc +0.5 0.25 0 0 k +Pc +0.75 0.375 0 0 k +Pc +1 0.5 0 0 k +Pc +0.125 0.25 0 0 k +Pc +0.25 0.5 0 0 k +Pc +0.375 0.75 0 0 k +Pc +0.5 1 0 0 k +Pc +Bb +2 (Steel Bar) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0.125 0 k +Pc +0 0.5 0.25 0 k +Pc +0 0.75 0.375 0 k +Pc +0 1 0.5 0 k +Pc +0 0.125 0.25 0 k +Pc +0 0.25 0.5 0 k +Pc +0 0.375 0.75 0 k +Pc +0 0.5 1 0 k +Pc +Bb +2 (Purple, Red & Yellow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0 0.25 0 k +Pc +0.25 0 0.5 0 k +Pc +0.375 0 0.75 0 k +Pc +0.5 0 1 0 k +Pc +0.25 0 0.125 0 k +Pc +0.5 0 0.25 0 k +Pc +0.75 0 0.375 0 k +Pc +1 0 0.5 0 k +Pc +Bb +2 (Green & Blue) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0.125 0 k +Pc +0.5 0.25 0.25 0 k +Pc +0.75 0.375 0.375 0 k +Pc +1 0.5 0.5 0 k +Pc +0.25 0.25 0.125 0 k +Pc +0.5 0.5 0.25 0 k +Pc +0.75 0.75 0.375 0 k +Pc +1 1 0.5 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Orange Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0.25 0.125 0 k +Pc +0.25 0.5 0.25 0 k +Pc +0.375 0.75 0.375 0 k +Pc +0.5 1 0.5 0 k +Pc +0.125 0.25 0.25 0 k +Pc +0.25 0.5 0.5 0 k +Pc +0.375 0.75 0.75 0 k +Pc +0.5 1 1 0 k +Pc +0 0 0 0 k +Pc +0.125 0.125 0.25 0 k +Pc +0.25 0.25 0.5 0 k +Pc +0.375 0.375 0.75 0 k +Pc +0.5 0.5 1 0 k +Pc +0.25 0.125 0.25 0 k +Pc +0.5 0.25 0.5 0 k +Pc +0.75 0.375 0.75 0 k +Pc +1 0.5 1 0 k +Pc +PB +%AI5_EndPalette +%%EndSetup +%AI5_BeginLayer +1 1 1 1 0 0 0 79 128 255 Lb +(Layer 1) Ln +0 A +800 Ar +0 J 0 j 1 w 4 M []0 d +%AI3_Note: +0 D +0 XR +-4014 283.5 m +4626 283.5 L +(N) * +453.5 4716 m +453.5 -3924 L +(N) * +85 4716 m +85 -3924 L +(N) * +-4014 765.5 m +4626 765.5 L +(N) * +0 R +0 G +113 683.5 m +439 683.5 l +S +113 663.5 m +439 663.5 l +S +113 643.5 m +439 643.5 l +S +113 686 m +439 686 l +S +1 Ap +439 624 m +439 709 L +113 709 L +113 624 L +439 624 L +s +0 Ap +178.5 709 m +178.5 624 l +S +243 709 m +243 624 l +S +374 709 m +374 624 l +S +308.5 709 m +308.5 624 l +S +0 To +1 0 0 1 146 692 0 Tp +TP +-12.2278 0 Td +0 Tr +0 O +0 g +/_Univers 10 Tf +0 Ts +100 Tz +0 Tt +1 TA +%_ 0 XL +36 0 Xb +XB +0 0 5 TC +100 100 200 TW +0 0 0 Ti +1 Ta +0 0 2 2 3 Th +0 Tq +0 0 Tl +0 Tc +0 Tw +(key 1) Tx +(\r) TX +TO +0 To +1 0 0 1 213 692 0 Tp +TP +-12.2278 0 Td +0 Tr +(key 2) Tx +(\r) TX +TO +0 To +1 0 0 1 276 692 0 Tp +TP +-11.1121 0 Td +0 Tr +(col 3) Tx +(\r) TX +TO +0 To +1 0 0 1 225.5 747.5 0 Tp +TP +0 Tr +(\r) Tx +TO +0 To +1 0 0 1 336.5 693.5 0 Tp +TP +0 Tr +(\r) Tx +TO +0 To +1 0 0 1 341 692 0 Tp +TP +-11.1121 0 Td +0 Tr +(col 4) Tx +(\r) TX +TO +0 To +1 0 0 1 407.5 692 0 Tp +TP +-11.1121 0 Td +0 Tr +(col 5) Tx +(\r) TX +TO +0 To +1 0 0 1 185.5 736 0 Tp +TP +0 Tr +(\r) Tx +TO +0 To +1 0 0 1 145 669.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(1) Tx +(\r) TX +TO +0 To +1 0 0 1 144.5 650.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(1) Tx +(\r) TX +TO +0 To +1 0 0 1 145 630 0 Tp +TP +-2.7795 0 Td +0 Tr +(2) Tx +(\r) TX +TO +0 To +1 0 0 1 209.5 669 0 Tp +TP +-2.7795 0 Td +0 Tr +(1) Tx +(\r) TX +TO +0 To +1 0 0 1 209.5 649.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(2) Tx +(\r) TX +TO +0 To +1 0 0 1 209.5 629.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(1) Tx +(\r) TX +TO +0 To +1 0 0 1 274.5 669 0 Tp +TP +-2.7795 0 Td +0 Tr +(a) Tx +(\r) TX +TO +0 To +1 0 0 1 274.5 649.5 0 Tp +TP +-3.0542 0 Td +0 Tr +(d) Tx +(\r) TX +TO +0 To +1 0 0 1 274.5 629.5 0 Tp +TP +-3.0542 0 Td +0 Tr +(g) Tx +(\r) TX +TO +0 To +1 0 0 1 340 669 0 Tp +TP +-3.0542 0 Td +0 Tr +(b) Tx +(\r) TX +TO +0 To +1 0 0 1 340 649.5 0 Tp +TP +-2.7795 0 Td +0 Tr +(e) Tx +(\r) TX +TO +0 To +1 0 0 1 340 629.5 0 Tp +TP +-8.8879 0 Td +0 Tr +(N/A) Tx +(\r) TX +TO +0 To +1 0 0 1 405 669 0 Tp +TP +-2.5 0 Td +0 Tr +(c) Tx +(\r) TX +TO +0 To +1 0 0 1 405 649.5 0 Tp +TP +-1.6638 0 Td +0 Tr +(f) Tx +(\r) TX +TO +0 To +1 0 0 1 405 629.5 0 Tp +TP +-1.3892 0 Td +0 Tr +(i) Tx +(\r) TX +TO +u +1 Ap +0 R +0 G +274.4998 643.4963 m +279.1963 643.4963 283.0037 647.3037 283.0037 652.0002 c +283.0037 656.6968 279.1963 660.5042 274.4998 660.5042 c +269.8032 660.5042 265.9958 656.6968 265.9958 652.0002 c +265.9958 647.3037 269.8032 643.4963 274.4998 643.4963 c +s +[3 4 3 4 3 4 ]0 d +274.4998 623.9963 m +279.1963 623.9963 283.0037 627.8037 283.0037 632.5002 c +283.0037 637.1968 279.1963 641.0042 274.4998 641.0042 c +269.8032 641.0042 265.9958 637.1968 265.9958 632.5002 c +265.9958 627.8037 269.8032 623.9963 274.4998 623.9963 c +s +u +u +0 Ap +[]0 d +265.9958 652.0002 m +251 652 250.5 642.5 v +250.1312 635.4919 257.5 633.5 y +S +0 O +0 g +260.0476 633.873 m +258.5818 634.7863 257.6645 635.5108 256.5229 636.3709 c +255.2066 631.5014 l +255.7237 631.5949 257.7835 631.833 259.5097 631.8831 c +261.3573 631.9376 263.0016 631.8718 264.0403 631.7262 c +263.0697 632.1237 261.6162 632.8953 260.0476 633.873 c +f +U +U +U +1 Ap +0 R +0 G +339.9998 643.4963 m +344.6963 643.4963 348.5037 647.3037 348.5037 652.0002 c +348.5037 656.6968 344.6963 660.5042 339.9998 660.5042 c +335.3032 660.5042 331.4958 656.6968 331.4958 652.0002 c +331.4958 647.3037 335.3032 643.4963 339.9998 643.4963 c +s +[3 4 3 4 3 4 ]0 d +404.9998 663.4963 m +409.6963 663.4963 413.5037 667.3037 413.5037 672.0002 c +413.5037 676.6968 409.6963 680.5042 404.9998 680.5042 c +400.3032 680.5042 396.4958 676.6968 396.4958 672.0002 c +396.4958 667.3037 400.3032 663.4963 404.9998 663.4963 c +s +u +u +u +u +u +0 Ap +[]0 d +331.4958 652.0002 m +305.5 617.5 323 607.5 v +338.4597 598.6658 363 623 377 643 c +383.7965 652.7091 392.5 660 y +S +0 O +0 g +393.6525 662.3024 m +392.0646 661.6234 390.9454 661.286 389.5867 660.8423 c +392.8259 656.9755 l +393.0452 657.453 394.0292 659.2782 394.9762 660.7223 c +395.9892 662.2684 396.9844 663.579 397.6983 664.3473 c +396.8168 663.779 395.3521 663.0289 393.6525 662.3024 c +f +U +U +U +U +U +LB +%AI5_EndLayer-- +%%PageTrailer +gsave annotatepage grestore showpage +%%Trailer +Adobe_Illustrator_AI5 /terminate get exec +Adobe_ColorImage_AI6 /terminate get exec +Adobe_typography_AI5 /terminate get exec +Adobe_level2_AI5 /terminate get exec +%%EOF diff --git a/lib/snmp/doc/src/index.html.src b/lib/snmp/doc/src/index.html.src new file mode 100644 index 0000000000..7ad2140559 --- /dev/null +++ b/lib/snmp/doc/src/index.html.src @@ -0,0 +1,98 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<!-- This file is obsolete --> +<HTML> +<!-- + ``The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved via the world wide web at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + The Initial Developer of the Original Code is Ericsson Utvecklings AB. + Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings + AB. All Rights Reserved.'' + + $Id$ +--> +<HEAD> +<TITLE>SNMP %VSN%</TITLE> +</HEAD> + +<BODY BGCOLOR="#FFFFFF"> + +<CENTER> +<A HREF="http://www.erlang.se/"><IMG ALT="Erlang/OTP" BORDER=0 SRC="html/min_head.gif"></A><BR> + +<FONT SIZE="-1"> +[<A HREF="../../../doc/index.html">Up</A> | +<A HREF="http://www.erlang.se/">Erlang/OTP</A>] +</FONT><BR> + +<P><FONT SIZE="+3"> +SNMP +</FONT><BR> +Version %VSN% +</CENTER> + +<P><TABLE> +<TR> +<TD> +<IMG ALIGN=LEFT ALT="SNMP" SRC="html/snmp.gif"> +</TD> + +<TD> +<P>A bilingual Simple Network Management Protocol application, + featuring an Extensible Agent, a simple manager, a MIB compiler + and facilities for implementing SNMP MIBs etc. +</TD> +</TR> +</TABLE> + +<P><CENTER> +<TABLE CELLPADDING=15> +<TR> +<TD ALIGN=CENTER> +<A HREF="html/users_guide.html"><IMG ALT="User's Guide" BORDER=0 SRC="html/user_guide.gif"></A><BR> +<FONT SIZE="-1"> +<A HREF="html/users_guide.html">User's Guide</A> +</FONT> +</TD> + +<TD ALIGN=CENTER> +<A HREF="html/index.html"><IMG ALT="Reference Manual" BORDER=0 SRC="html/ref_man.gif"></A><BR> +<FONT SIZE="-1"> +<A HREF="html/index.html">Reference Manual</A> +</FONT> +</TD> + +<TD ALIGN=CENTER> +<A HREF="html/release_notes.html"><IMG ALT="Release Notes" BORDER=0 SRC="html/notes.gif"></A><BR> +<FONT SIZE="-1"> +<A HREF="html/release_notes.html">Release Notes</A> +</FONT> +</TD> + +<TD ALIGN=CENTER> +<A HREF="pdf/snmp-%VSN%.pdf"><IMG ALT="Off-Print" BORDER=0 SRC="html/book.gif"></A><BR> +<FONT SIZE="-1"> +<A HREF="pdf/snmp-%VSN%.pdf">Off-Print</A> +</FONT> +</TD> +</TR> +</TABLE> +</CENTER> + +<P><CENTER> +<HR> +<FONT SIZE="-1"> +Copyright © 1991-2001 +<A HREF="http://www.erlang.se/">Ericsson Utvecklings AB</A> +</FONT> +</CENTER> +</BODY> +</HTML> diff --git a/lib/snmp/doc/src/make.dep b/lib/snmp/doc/src/make.dep new file mode 100644 index 0000000000..ccd01b9d3a --- /dev/null +++ b/lib/snmp/doc/src/make.dep @@ -0,0 +1,77 @@ +#-*-makefile-*- ; force emacs to enter makefile-mode + +# %CopyrightBegin% +# +# Copyright Ericsson AB 1999-2009. All Rights Reserved. +# +# The contents of this file are subject to the Erlang Public License, +# Version 1.1, (the "License"); you may not use this file except in +# compliance with the License. You should have received a copy of the +# Erlang Public License along with this software. If not, it can be +# retrieved online at http://www.erlang.org/. +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# %CopyrightEnd% + +# ---------------------------------------------------- +# >>>> Do not edit this file <<<< +# This file was automaticly generated by +# /home/otp/bin/docdepend +# ---------------------------------------------------- + + +# ---------------------------------------------------- +# TeX files that the DVI file depend on +# ---------------------------------------------------- + +book.dvi: book.tex part.tex ref_man.tex snmp.tex snmp_advanced_agent.tex \ + snmp_agent_config_files.tex snmp_agent_funct_descr.tex \ + snmp_agent_netif.tex snmp_app.tex snmp_app_a.tex \ + snmp_app_b.tex snmp_audit_trail_log.tex \ + snmp_community_mib.tex \ + snmp_config.tex snmp_def_instr_functions.tex \ + snmp_framework_mib.tex snmp_generic.tex \ + snmp_impl_example_agent.tex \ + snmp_impl_example_manager.tex snmp_index.tex \ + snmp_instr_functions.tex snmp_intro.tex \ + snmp_manager_config_files.tex \ + snmp_manager_funct_descr.tex snmp_manager_netif.tex \ + snmp_mib_compiler.tex snmp_notification_mib.tex \ + snmp_pdus.tex snmp_standard_mib.tex snmp_target_mib.tex \ + snmp_user_based_sm_mib.tex snmp_view_based_acm_mib.tex \ + snmpa.tex snmpa_conf.tex snmpa_error.tex snmpa_error_io.tex \ + snmpa_error_logger.tex snmpa_error_report.tex \ + snmpa_local_db.tex snmpa_mpd.tex \ + snmpa_discovery_handler.tex \ + snmpa_network_interface.tex \ + snmpa_network_interface_filter.tex \ + snmpa_notification_delivery_info_receiver.tex \ + snmpa_notification_filter.tex \ + snmpa_supervisor.tex \ + snmpc.tex snmpm.tex snmpm_conf.tex snmpm_mpd.tex \ + snmpm_network_interface.tex snmpm_network_interface_filter.tex \ + snmpm_user.tex + +# ---------------------------------------------------- +# Source inlined when transforming from source to LaTeX +# ---------------------------------------------------- + +book.tex: ref_man.xml + +# ---------------------------------------------------- +# Pictures that the DVI file depend on +# ---------------------------------------------------- + +book.dvi: MIB_mechanism.ps snmp-um-1-image-1.ps snmp-um-1-image-2.ps \ + snmp-um-1-image-3.ps + +book.dvi: snmp_agent_netif_1.ps + +book.dvi: getnext1.ps getnext2.ps getnext3.ps getnext4.ps + +book.dvi: snmp_manager_netif_1.ps + diff --git a/lib/snmp/doc/src/min_head.gif b/lib/snmp/doc/src/min_head.gif Binary files differnew file mode 100644 index 0000000000..67948a6378 --- /dev/null +++ b/lib/snmp/doc/src/min_head.gif diff --git a/lib/snmp/doc/src/note.gif b/lib/snmp/doc/src/note.gif Binary files differnew file mode 100644 index 0000000000..6fffe30419 --- /dev/null +++ b/lib/snmp/doc/src/note.gif diff --git a/lib/snmp/doc/src/notes.gif b/lib/snmp/doc/src/notes.gif Binary files differnew file mode 100644 index 0000000000..e000cca26a --- /dev/null +++ b/lib/snmp/doc/src/notes.gif diff --git a/lib/snmp/doc/src/notes.xml b/lib/snmp/doc/src/notes.xml new file mode 100644 index 0000000000..96a444227d --- /dev/null +++ b/lib/snmp/doc/src/notes.xml @@ -0,0 +1,1024 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>1996</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>SNMP Release Notes</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>notes.xml</file> + </header> + + <section> + <title>SNMP Development Toolkit 4.15</title> + + <p>Version 4.15 supports code replacement in runtime from/to + version 4.14 and 4.13.5.</p> + + <section> + <title>Improvements and new features</title> + <!-- + <p>-</p> + --> + + <list type="bulleted"> + <item> + <p>The documentation is now built with open source tools + (<em>xsltproc</em> and <em>fop</em>) that exists on most + platforms. One visible change is that the frames are removed.</p> + <p>Own Id: OTP-8249</p> + </item> + + </list> + + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>[manager] When information from an unknown agent is received, + it was previously delivered to the default user via calls to all + the functions of the callback API depending on the info type + (<c>pdu</c>, <c>trap</c>, <c>report</c> or <c>inform</c>). + The problem was that the <c>TargetName</c> argument was useless + in this case (only an already known agent has a known/valid + <c>TargetName</c>, but the <c>TargetName</c> used in these calls + was generated "on the fly"). </p> + <p>This has now been changed so that when a message is received + from an unknown agent, then only + <seealso marker="snmpm_user#handle_agent">handle_agent</seealso> + (for the default user) is called, but now this call also has a + <c>Type</c> argument, which is + <c>pdu | trap | report | inform</c>, depending on what kind of + message was actually received, thus making it possible for the + user to properly analyze the data received. </p> + <p>To handle this, the + <seealso marker="snmpm_user">snmpm_user</seealso> behaviour has + been updated. </p> + <p>*** POTENTIAL INCOMPATIBILITY ***</p> + <p>Own Id: OTP-8229</p> + <!-- <p>Aux Id: Seq 11312</p> --> + </item> + + </list> + + </section> + + </section> <!-- 4.15 --> + + + <section> + <title>SNMP Development Toolkit 4.14</title> + + <p>Version 4.14 supports code replacement in runtime from/to + version 4.13.5, 4.13.4, 4.13.3, 4.13.2, 4.13.1 and 4.13.</p> + + <section> + <title>Improvements and new features</title> + <!-- + <p>-</p> + --> + + <list type="bulleted"> + <item> + <p>[compiler] Include object- and notification groups in the + compiled mib. + This will make it possible to import groups from other mibs. </p> + <p>Also the SNMPv2-MIB-file has been updated to a more + up-to-date version. </p> + <p>Own Id: OTP-8223</p> + <!-- <p>Aux Id: Seq 11383</p> --> + </item> + + <item> + <p>[manager] Added support for message filtering in the + network interface module provided with the application. + The component that actually make the filter decisions + is the network interface filter module. This module + must implement the + <seealso marker="snmpm_network_interface_filter">network interface filter behaviour</seealso> + for message filtering. + See also the Configuring chapter of + the User's Guide to see how to configure this feature. </p> + <p>See the + <seealso marker="snmp_app#configuration_params">configuration</seealso> + chapter for more info about the filter options.</p> + <p>Own Id: OTP-8228</p> + <p>Aux Id: Seq 11411</p> + </item> + + <item> + <p>The MIBs delivered as part of the application is now + also available as man pages, section 7. </p> + <p>Own Id: OTP-8237</p> + <!-- <p>Aux Id: Seq 11383</p> --> + </item> + + </list> + + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <p>-</p> + + <!-- + <list type="bulleted"> + <item> + <p>[agent] The main agent type header file contained some miss-information + regarding the type of the entrytype field of the me-record, causing + unneccessary confusion.</p> + <p>Own Id: OTP-8116</p> + <p>Aux Id: Seq 11312</p> + </item> + + </list> + --> + + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.14 --> + + + <section> + <title>SNMP Development Toolkit 4.13.5</title> + + <p>Version 4.13.5 supports code replacement in runtime from/to + version 4.13.4, 4.13.3, 4.13.2, 4.13.1 and 4.13.</p> + + <section> + <title>Improvements and new features</title> + <!-- + <p>-</p> + --> + + <list type="bulleted"> + <item> + <p>[agent] Improved the cache handling of the mib server. </p> + <p>A number of new functions and config options for the mib server + cache has been added. </p> + <p>See + <seealso marker="snmpa#invalidate_mibs_cache">invalidate_mibs_cache/0,1</seealso>, + <seealso marker="snmpa#enable_mibs_cache">enable_mibs_cache/0,1</seealso>, + <seealso marker="snmpa#disable_mibs_cache">disable_mibs_cache/0,1</seealso>, + <seealso marker="snmpa#gc_mibs_cache">gc_mibs_cache/0,1,2,3</seealso>, + <seealso marker="snmpa#enable_mibs_cache_autogc">enable_mibs_cache_autogc/0,1</seealso>, + <seealso marker="snmpa#disable_mibs_cache_autogc">disable_mibs_cache_autogc/0,1</seealso>, + <seealso marker="snmpa#update_mibs_cache_age">update_mibs_cache_age/1,2</seealso> and + <seealso marker="snmpa#update_mibs_cache_gclimit">update_mibs_cache_gclimit/1,2</seealso> for more info. </p> + <p>See also the + <seealso marker="snmp_app#configuration_params">configuration</seealso> + chapter for more info about the mib server cache options.</p> + <p>Own Id: OTP-8182</p> + <p>Aux Id: Seq 11383</p> + </item> + + <item> + <p>[agent] A manager could no longer use the SNMPv3 user "initial" + as this was interpretated as the first step of the discovery. </p> + <p>Introduced a new terminating option, <c>trigger_username</c> to + make it possible to configure the username the agent reacts to. + Default is <c>""</c>. </p> + <p>See the + <seealso marker="snmp_app#configuration_params">configuration</seealso> + chapter for more info about the discovery options.</p> + <p>Own Id: OTP-8120</p> + <p>Aux Id: Seq 11361</p> + </item> + + </list> + + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>[agent] The main agent type header file contained some miss-information + regarding the type of the entrytype field of the me-record, causing + unneccessary confusion.</p> + <p>Own Id: OTP-8116</p> + <p>Aux Id: Seq 11312</p> + </item> + + </list> + + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.13.5 --> + + + <section> + <title>SNMP Development Toolkit 4.13.4</title> + + <p>Version 4.13.4 supports code replacement in runtime from/to + version 4.13.3, 4.13.2, 4.13.1 and 4.13.</p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + + <!-- + <list type="bulleted"> + <item> + <p>[agent] Support for the discovery process. </p> + <p>The agent can both initiate discovery itself (see the + <seealso marker="snmp_agent_funct_descr#discovery">discovery</seealso> chapter + for more info) and respond to discovery initiated by a manager.</p> + <p>Own Id: OTP-7571</p> + <p>Aux Id: Seq 11053</p> + </item> + + </list> + --> + + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>[agent] Originating discovery problems. </p> + <p>Invalid state variable update during second stage of + discovery causes master agent crash. </p> + <p>Also the net_if process failed to activate socket + ({active, once}) after first discovery response was sent. </p> + <p>Own Id: OTP-8044</p> + <p>Aux Id: Seq 11295</p> + </item> + + <item> + <p>[agent] Terminating discovery problem. </p> + <p>The reply to the second stage request should include a + varbind with <c>usmStatsNotInTimeWindows</c>.</p> + <p>Own Id: OTP-8062</p> + <p>Aux Id: Seq 11318</p> + </item> + + <item> + <p>[agent] Originating discovery improvement. </p> + <p>Added the ExtraInfo argument to the + <seealso marker="snmpa#discovery">discovery</seealso> function. + This argument will be passed on to the stage1_finish callback + function. Also, the + <seealso marker="snmpa#discovery">discovery</seealso> function + will now always return <c>{ok, ManagerEngineID}</c> on successful + discovery. </p> + <p>The <seealso marker="snmpa_discovery_handler">discovery handler</seealso> + behaviour updated accordingly. </p> + <p>Own Id: OTP-8098</p> + <p>Aux Id: Seq 11346</p> + </item> + + </list> + + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.13.4 --> + + + <section> + <title>SNMP Development Toolkit 4.13.3</title> + + <p>Version 4.13.3 supports code replacement in runtime from/to + version 4.13.2, 4.13.1 and 4.13.</p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + + <!-- + <list type="bulleted"> + <item> + <p>[agent] Support for the discovery process. </p> + <p>The agent can both initiate discovery itself (see the + <seealso marker="snmp_agent_funct_descr#discovery">discovery</seealso> chapter + for more info) and respond to discovery initiated by a manager.</p> + <p>Own Id: OTP-7571</p> + <p>Aux Id: Seq 11053</p> + </item> + + </list> + --> + + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>[manager] A request for an oid of type BITS was actually + returned as OCTET STRING. </p> + <p>Values of type BITS are encoded as OCTET STRING, + which makes it impossible for the decoder to know that + they should really be of type BITS. + Instead, this has to be done higher up in the stack, where + there is knowledge of the MIB (assuming that the mib has + been loaded, there is info about the type of the mibentry). </p> + <p>This problem has now been fixed, but requires that the MIB + defining this mib-entry is loaded! </p> + <p>The utility function + <seealso marker="snmpm#oid_to_type">oid_to_type</seealso> + has been added, for debug purpose. </p> + <p>The utility function(s) + <seealso marker="snmp#octet_string_to_bits">octet_string_to_bits</seealso> + and + <seealso marker="snmp#bits_to_octet_string">bits_to_octet_string</seealso> + has also been added. These can be used if the user prefers to + handle the conversion on their own. </p> + <p>Own Id: OTP-8015</p> + <p>Aux Id: Seq 11285</p> + </item> + + <item> + <p>[agent] Fixed some issues with the discovery handling. </p> + <p>Changed the API of the + <seealso marker="snmpa#discovery">discovery</seealso> + function to solve some + of these problems. </p> + <p>Introduced various options for controlling the discovery + process. See the + <seealso marker="snmp_app#configuration_params">configuration</seealso> + chapter for more info about the discovery options.</p> + <p>Own Id: OTP-8020</p> + <p>Aux Id: Seq 11295</p> + </item> + + </list> + + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.13.3 --> + + + <section> + <title>SNMP Development Toolkit 4.13.2</title> + + <p>Version 4.13.2 supports code replacement in runtime from/to + version 4.13.1 and 4.13.</p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + + <!-- + <list type="bulleted"> + <item> + <p>[agent] Support for the discovery process. </p> + <p>The agent can both initiate discovery itself (see the + <seealso marker="snmp_agent_funct_descr#discovery">discovery</seealso> chapter + for more info) and respond to discovery initiated by a manager.</p> + <p>Own Id: OTP-7571</p> + <p>Aux Id: Seq 11053</p> + </item> + + </list> + --> + + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>[manager] Failure during downed user cleanup. + As part of the cleanup after a crashed user, + the manager attempts to unregister the agents + registered by this user. This however failed, + causing a server crash. </p> + <p>Own Id: OTP-7961</p> + <p>Aux Id: Seq 11275</p> + </item> + + <item> + <p>[manager] Incorrectly documented value type for + IpAddress (ip). The value type for IpAddress is + documented as ip but is actually ia. The value type + ip has been added. The old (not documented) value + type ia still works. </p> + <p>Own Id: OTP-7977</p> + <p>Aux Id: Seq 11279</p> + </item> + + <item> + <p>[manager] EngineId lookup fails when using version-3. </p> + <p>Own Id: OTP-7983</p> + <p>Aux Id: Seq 11275</p> + </item> + + <item> + <p>[agent] As of version 4.13 the possible return values + of the function + <seealso marker="snmpa_mpd#process_packet">snmpa_mpd:process_packet/4</seealso> + changed, but this was not documented. </p> + <p>Own Id: OTP-7989</p> + <p>Aux Id: Seq 11275</p> + </item> + + </list> + + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.13.2 --> + + <section> + <title>SNMP Development Toolkit 4.13.1</title> + + <p>Version 4.13.1 supports code replacement in runtime from/to + version 4.13.</p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + + <!-- + <list type="bulleted"> + <item> + <p>[agent] Support for the discovery process. </p> + <p>The agent can both initiate discovery itself (see the + <seealso marker="snmp_agent_funct_descr#discovery">discovery</seealso> chapter + for more info) and respond to discovery initiated by a manager.</p> + <p>Own Id: OTP-7571</p> + <p>Aux Id: Seq 11053</p> + </item> + + </list> + --> + + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>[manager] Registration of users had some issues. </p> + <p>Not all of the registration functions where actually exported + (<seealso marker="snmpm#register_user">register_user/4</seealso> + and + <seealso marker="snmpm#register_user_monitor">register_user_monitor/4</seealso>). + This has now been fixed. </p> + <p>Also, the registration did not succeed unless + user implemented the *new* behaviour. This has now + also been fixed (registration succeeds if the user + implements either the new (i.e. updated + <seealso marker="snmpm_user">snmpm_user</seealso>) + or the old user behaviour (<c>snmpm_user_old</c>)). </p> + <p>Own Id: OTP-7902</p> + <p>Aux Id: Seq 11240</p> + </item> + + </list> + + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.13.1 --> + + <section> + <title>SNMP Development Toolkit 4.13</title> +<!-- + <p>Version 4.13 supports code replacement in runtime from/to + version 4.12.1.</p> +--> + + <section> + <title>Improvements and new features</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>[agent] Support for the discovery process. </p> + <p>The agent can both initiate discovery itself (see the + <seealso marker="snmp_agent_funct_descr#discovery">discovery</seealso> chapter + for more info) and respond to discovery initiated by a manager.</p> + <p>Own Id: OTP-7571</p> + <p>Aux Id: Seq 11053</p> + </item> + + </list> + + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>[agent] Unnecessary use of math:pow/2 could cause problems + on systems without floating point support. </p> + <p>Per Hedeland</p> + <p>Own Id: OTP-7735</p> + <!-- <p>Aux Id: Seq 10966</p> --> + </item> + + <item> + <p>[manager] A major flaw was discovered with the agent handling. </p> + <p>First, <c>TargetName</c> was never used as intended, as a unique + identifier for the target (agent in this case). </p> + <p>Second, <c>TargetName</c> had a <em>default value</em>, which meant + that several agents could have the same <c>TargetName</c>, causing + unpredictable behaviour in the manager. </p> + <p>Third, <c>EngineID</c> was not a mandatory config option and had + furthermore also a <em>default value</em>. </p> + + <p>These problems has been solved in the following way: </p> + <p>First, a new set of api functions has been introduced (and documented): + <seealso marker="snmpm#register_user">register_user/4</seealso>, + <seealso marker="snmpm#register_user_monitor">register_user_monitor/4</seealso>, + <seealso marker="snmpm#register_agent">register_agent/3</seealso>, + <seealso marker="snmpm#unregister_agent">unregister_agent/2</seealso>, + <seealso marker="snmpm#agent_info">agent_info/2</seealso>, + <seealso marker="snmpm#update_agent_info">update_agent_info/4</seealso>, + <seealso marker="snmpm#sync_get">sync_get/3,4,5,6</seealso>, + <seealso marker="snmpm#async_get">async_get/3,4,5,6</seealso>, + <seealso marker="snmpm#sync_get_next">sync_get_next/3,4,5,6</seealso>, + <seealso marker="snmpm#async_get_next">async_get_next/3,4,5,6</seealso>, + <seealso marker="snmpm#sync_set">sync_set/3,4,5,6</seealso>, + <seealso marker="snmpm#async_set">async_set/3,4,5,6</seealso>, + <seealso marker="snmpm#sync_get_bulk">sync_get_bulk/5,6,7,8</seealso> and + <seealso marker="snmpm#async_get_bulk">async_get_bulk/5,6,7,8</seealso> + that all use <c>TargetName</c> (and not, as previously, <c>Addr</c> + and <c>Port</c>) to identify the agent (also the return value of + <seealso marker="snmpm#which_agents">which_agents</seealso> has + been changed). </p> + <p>Second, for backward compatibility, the old functions still + exist, but are no longer documented and are now wrappers for the + new functions, including erroneous default value for EngineID and + all. The TargetName is however generated from the provided + <c>Addr</c>, <c>Port</c> and <c>Version</c> config options. </p> + <p>Third, the behaviour of the + <seealso marker="snmpm_user">SNMP manager user</seealso> has + been changed to reflect this, i.e. + <seealso marker="snmpm_user#handle_pdu">handle_pdu/4</seealso>, + <seealso marker="snmpm_user#handle_trap">handle_trap/3</seealso>, + <seealso marker="snmpm_user#handle_inform">handle_inform/3</seealso>, + <seealso marker="snmpm_user#handle_report">handle_report/3</seealso> + and the return-value of + <seealso marker="snmpm_user#handle_agent">handle_agent/4</seealso>. + The old (non-documented) callback-functions (using Addr and Port) + will still be called if the agent was registered using the old + registration functions. </p> + + <p>Own Id: OTP-7836</p> + <!-- <p>Aux Id: Seq 10966</p> --> + </item> + + </list> + + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.13 --> + + <section> + <title>SNMP Development Toolkit 4.12.2</title> + <p>Version 4.12.2 supports code replacement in runtime from/to + version 4.12.1, 4.12, 4.11.2, 4.11.1 and 4.11.</p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + <!-- + <list type="bulleted"> + <item> + <item> + <p>[agent] Improvement of the inform reporting. + It was previously not certain how many acks an + application received, 0, 1 or 2. This has now been + fixed, so that only 1 (one) ack is issued. </p> + <p>Per Hedeland</p> + <p>Own Id: OTP-7525</p> + </item> + + </list> + --> + + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>[agent] Bad session cache (usm+camv-info) invalidation + could cause user crash, through call(s) to (a number of) + MIB API function(s) (undefined function). </p> + <p>Own Id: OTP-7868</p> + <!-- <p>Aux Id: Seq 11124</p> --> + </item> + + </list> + + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.12.2 --> + + <section> + <title>SNMP Development Toolkit 4.12.1</title> + <p>Version 4.12.1 supports code replacement in runtime from/to + version 4.12, 4.11.2, 4.11.1 and 4.11.</p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + <!-- + <list type="bulleted"> + <item> + <item> + <p>[agent] Improvement of the inform reporting. + It was previously not certain how many acks an + application received, 0, 1 or 2. This has now been + fixed, so that only 1 (one) ack is issued. </p> + <p>Per Hedeland</p> + <p>Own Id: OTP-7525</p> + </item> + + </list> + --> + + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>Logging of messages with the GetBulk-request PDU + incorrectly produced an erroneous entry in the + log: "An error occurred". </p> + <p>The reason for this was that the PDU-fields + error_status and error_index is re-used for + Non-repeaters and Max-repetitions for + GetBulk-request PDUs, but this was not handled + by the logging code. </p> + <p>Own Id: OTP-7695</p> + <p>Aux Id: Seq 11124</p> + </item> + + <item> + <p>[agent] An attempt to set the row status to active for an + notReady table row, could result in an "inconsistentValue" + error. </p> + <p>The same problem existed when attempting to set row status + to notInService for a row in notReady. </p> + <p>Serge Aleynikov</p> + <p>Own Id: OTP-7698</p> + <!-- <p>Aux Id: Seq 10966</p> --> + </item> + + </list> + + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.12.1 --> + + <section> + <title>SNMP Development Toolkit 4.12</title> + <p>Version 4.12 supports code replacement in runtime from/to + version 4.11.2, 4.11.1 and 4.11.</p> + + <section> + <title>Improvements and new features</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>[agent] A simple lookup cache has been added to improve + the mib server lookup performance. </p> + <p>This can be disabled with the mib_server + <seealso marker="snmp_app">cache</seealso> option. </p> + <p>Own Id: OTP-7346</p> + </item> + + <item> + <p>[agent] Improvement of the inform reporting. + It was previously not certain how many acks an + application received, 0, 1 or 2. This has now been + fixed, so that only 1 (one) ack is issued. </p> + <p>Per Hedeland</p> + <p>Own Id: OTP-7525</p> + </item> + + </list> + + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <p>-</p> + <!-- + <list type="bulleted"> + <item> + <p>[manager] Encryption error when attempting to send + version 3 inform-requests. </p> + <p>Own Id: OTP-7432</p> + <p>Aux Id: Seq 10966</p> + </item> + + </list> + --> + + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.12 --> + + <section> + <title>SNMP Development Toolkit 4.11.2</title> + <p>Version 4.11.2 supports code replacement in runtime from/to + version 4.11.1 and 4.11. </p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + <!-- + <list type="bulleted"> + <item> + <p>Added utility functions for transforming DateAndTime + as [int()] to strings; + <seealso marker="snmp#dat2s">date_and_time_to_string/2</seealso> + and + <seealso marker="snmp#dat2s2">date_and_time_to_string2/1</seealso>. </p> + <p>Also added new validation function + <seealso marker="snmp#vdat">validate_date_and_time/2</seealso>. </p> + <p>Own Id: OTP-7412</p> + <p>Aux Id: Seq 10987</p> + </item> + </list> + --> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>[manager] Erroneous engine-id check when receiving version 3 + informs. </p> + <p>Own Id: OTP-7570</p> + <p>Aux Id: Seq 11060</p> + </item> + + <item> + <p>Receiving an snmp message with a very large version + number could cause the erlang node to run out of + memory and consequently crash. </p> + <p>The standard specifies the snmp version as an + (unlimited) INTEGER, but today only + 0 (version 1), 1 (version 2) and 3 (version 3) is + actually used. So, when decoding a message, a limit + has been put on the snmp version integer in order + to not allow this kind of a problem. </p> + <p>Own Id: OTP-7575</p> + <p>Aux Id: Seq 11064</p> + </item> + + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.11.2 --> + + + <section> + <title>SNMP Development Toolkit 4.11.1</title> + <p>Version 4.11.1 supports code replacement in runtime from/to + version 4.11.</p> + + <section> + <title>Improvements and new features</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>[compiler] The MIB compiler did not retrieve the REFERENCE part + of a SNMP MIB definition. </p> + <p>This problem has been partly solved. For SNMP tables, + the assocList field of the tables mib-entry record now contains + this info (as <c>{reference, string()}</c>), <em>if</em> the + MIB was compiled with the compiler option <em>+reference</em>. </p> + <p>This solution is temporary, until such time as a permanent + solution (and probably not backward compatible) is devised, which + retrieves and stores all REFERENCE part(s) of a MIB. </p> + <p>See the + <seealso marker="snmpc#compiler_opts">compiler options</seealso> + for more info. </p> + + <p>Serge Aleynikov</p> + <p>Own Id: OTP-7426</p> + </item> + + <item> + <p>Added utility functions for transforming DateAndTime + as [int()] to strings; + <seealso marker="snmp#dat2s">date_and_time_to_string/2</seealso> + and + <seealso marker="snmp#dat2s2">date_and_time_to_string2/1</seealso>. </p> + <p>Also added new validation function + <seealso marker="snmp#vdat">validate_date_and_time/2</seealso>. </p> + <p>Own Id: OTP-7412</p> + <p>Aux Id: Seq 10987</p> + </item> + + </list> + + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>[manager] Encryption error when attempting to send + version 3 inform-requests. </p> + <p>Own Id: OTP-7432</p> + <p>Aux Id: Seq 10966</p> + </item> + + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.11.1 --> + + <section> + <title>SNMP Development Toolkit 4.11</title> + <p>Version 4.11 supports code replacement in runtime from/to + version 4.10.3, 4.10.2, 4.10.1 and 4.10.</p> + + <section> + <title>Improvements and new features</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>[agent] Performance improvements in the case when an SNMP + manager performs an snmpwalk. </p> + <p>Martin Björklund</p> + <p>Own Id: OTP-7201</p> + </item> + + <item> + <p>The API for sending inform(s) has been improved. Also + the documentation has been corrected and updated. See + <seealso marker="snmpa#send_notification">snmpa:send_notification</seealso> and + <seealso marker="snmpa_notification_delivery_info_receiver">snmpa_notification_delivery_info_receiver</seealso> + for more info.</p> + <p>Own Id: OTP-7287</p> + <p>Aux Id: Seq 10926</p> + </item> + + <item> + <p>[agent] Performance of the internal database (local-db) + has been improved.</p> + <p>Own Id: OTP-7319</p> + <p>Aux Id: Seq 10942</p> + </item> + + <item> + <p>[agent] Added utility functions, + <seealso marker="snmpa#restart_worker">snmpa:restart_worker/0,1</seealso> and + <seealso marker="snmpa#restart_set_worker">snmpa:restart_set_worker/0,1</seealso>, + for restarting the agent worker processes (in case the agent is + multi-threaded).</p> + <p>Own Id: OTP-7369</p> + </item> + + <item> + <p>Add utility function to + <seealso marker="snmp#read_mib">read</seealso> + a compiled mib. </p> + <p>Own Id: OTP-7371</p> + </item> + + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>[manager] Encryption error when attempting to send + version 3 inform-requests. </p> + <p>Own Id: OTP-7377</p> + <p>Aux Id: Seq 10966</p> + </item> + + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.11 --> + + <!-- section> + <title>Release notes history</title> + <p>For information about older versions see + <url href="part_notes_history_frame.html">release notes history</url>.</p> + </section --> +</chapter> + diff --git a/lib/snmp/doc/src/notes_history.xml b/lib/snmp/doc/src/notes_history.xml new file mode 100644 index 0000000000..8739400773 --- /dev/null +++ b/lib/snmp/doc/src/notes_history.xml @@ -0,0 +1,2151 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>2004</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>SNMP Release Notes history</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>notes_history.xml</file> + </header> + + <section> + <title>SNMP Development Toolkit 4.10.3</title> + <p>Version 4.10.3 supports code replacement in runtime from/to + version 4.10.2, 4.10.1 and 4.10.</p> + + <section> + <title>Improvements and new features</title> + <!-- + <list type="bulleted"> + <item> + <p>The snmp documentation source has been converted + from SGML to XML.</p> + <p>Own Id: OTP-6771</p> + </item> + </list> + --> + <p>-</p> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[manager] The configuration option + <seealso marker="snmp_app">inform_request_behaviour</seealso> + was not properly parsed, which caused the manager to revert + to the default value, <c>auto</c>. </p> + <p>Own Id: OTP-7219</p> + </item> + + </list> + <!-- <p>-</p> --> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.10.3 --> + + + <section> <!-- 4.10.2 --> + <title>SNMP Development Toolkit 4.10.2</title> + + <p>Version 4.10.2 supports code replacement in run-time from/to + version 4.10.1 and 4.10</p> + + <section> + <title>Improvements and new features</title> + <!-- + <p>-</p> + --> + + <list type="bulleted"> + <item> + <p>[compiler] The MIB-compiler did not recognize well-known-names + as top parents. The names 'ccitt' (0) , 'iso' (1) and + 'joint-iso-ccitt' (2) is now also recognized by the MIB + compiler. </p> + <p>Ola Samuelsson</p> + <p>Own Id: OTP-7160</p> + </item> + + <item> + <p>[compiler] The MIB-compiler did not support a name assignment + which was sequence of numbers, only a parent object + name followed by a sequence of numbers. </p> + <p>Ola Samuelsson</p> + <p>Own Id: OTP-7158</p> + </item> + + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>[agent] Invalid variable value causes crashing agent worker + process when sending traps. </p> + <p>Own Id: OTP-7159</p> + </item> + + <item> + <p>[agent] When sending a trap, the order of the variable + bindings not provided by the trap-sender, could be + mangled by the agent. </p> + <p>Ola Samuelsson</p> + <p>Own Id: OTP-7157</p> + </item> + + <item> + <p>[agent] Uninstalling MEs when unloading mibs incorrect and + therefor never done. </p> + <p>Own Id: OTP-7153</p> + </item> + + <item> + <p>[agent] snmp_generic:table_set_cols/3 did not handle unexpected + return values correctly when setting column values. </p> + <p>Serge Aleynikov</p> + <p>Own Id: OTP-7152</p> + </item> + + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.10.2 --> + + + <section> <!-- 4.10.1 --> + <title>SNMP Development Toolkit 4.10.1</title> + + <p>Version 4.10.1 supports code replacement in run-time from/to + version 4.10</p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + <!-- + <list type="bulleted"> + <item> + <p>Added buffer sizes (both receive and send) of + the udp socket(s) info when calling the + <seealso marker="snmpa#info">agent info</seealso> + and + <seealso marker="snmpm#info">manager info</seealso> + function(s). </p> + <p>Own Id: OTP-6945</p> + </item> + + </list> + --> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <!-- + <p>-</p> + --> + <list type="bulleted"> + <item> + <p>[manager] Fixed usage of inet:gethostname/1. </p> + <p>Dialyzer</p> + <p>Own Id: OTP-7123</p> + </item> + + <item> + <p>[agent] Remeoved invalid guard. There was an invalid + guard on the start function of the top agent + supervisor. </p> + <p>Dialyzer</p> + <p>Own Id: OTP-7121</p> + </item> + + <item> + <p>[compiler] Old style fun cleanup in the MIB compiler. </p> + <p>Dialyzer</p> + <p>Own Id: OTP-7119</p> + </item> + + <item> + <p>Corrected usage of function file:open/2 (the <c>Modes</c> + argument is a list). </p> + <p>Own Id: OTP-7110</p> + <!-- <p>Aux Id: Seq 10717</p> --> + </item> + + <item> + <p>The SNMP application contains some (previously undocumented) + simple utility functions for function tracing (using dbg), + see + <seealso marker="snmp#enable_trace">enable_trace</seealso>, + <seealso marker="snmp#disable_trace">disable_trace</seealso>, + <seealso marker="snmp#set_trace1">set_trace/1</seealso>, + <seealso marker="snmp#reset_trace">reset_trace</seealso> and + <seealso marker="snmp#set_trace2">set_trace/2</seealso> + for more info. + These functions are intended to make it easy to enable tracing on + individual functions. + There where some minor errors, which has now been corrected. </p> + <p>Own Id: OTP-7109</p> + <!-- <p>Aux Id: Seq 10717</p> --> + </item> + + <item> + <p>There is a bug in snmp_pdus:enc_oct_str_tag/1. + All the enc_* functions are supposed to return + a flat list, but the second clause of this function + does not. If it gets a binary it returns a deep list. </p> + <p>Martin Björklund</p> + <p>Own Id: OTP-7083</p> + <!-- <p>Aux Id: Seq 10717</p> --> + </item> + + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.10.1 --> + + + <section> <!-- 4.10 --> + <title>SNMP Development Toolkit 4.10</title> + <!-- + <p>Version 4.10 supports code replacement in run-time from/to + version 4.9.6</p> + --> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>Added buffer sizes (both receive and send) of + the udp socket(s) info when calling the + <seealso marker="snmpa#info">agent info</seealso> + and + <seealso marker="snmpm#info">manager info</seealso> + function(s). </p> + <p>Own Id: OTP-6945</p> + </item> + + <item> + <p>[agent] Added the ability to change the request limit + in run-time, see + <seealso marker="snmpa#set_request_limit">set_request_limit</seealso> + for more info. </p> + <p>Own Id: OTP-6898</p> + </item> + + <item> + <p>Added the ability to change the audit trail log type + in run-time (both agent and manager), see function(s) + <seealso marker="snmpm#set_log_type">[manager] set_log_type</seealso> + and + <seealso marker="snmpa#set_log_type">[agent] set_log_type</seealso> + for more info. </p> + <p>Own Id: OTP-6841</p> + </item> + + <item> + <p>[agent] Added support for message filtering in the network + interface module provided with the application. + The component that actually make the filter decisions is the + network interface filter module. This module must implement the + <seealso marker="snmpa_network_interface_filter">network interface filter behaviour</seealso>. + See also the + <seealso marker="snmp_app#configuration_params">Configuring the application</seealso> + chapter of the User's Guide to see how to configure this + feature. </p> + <p>Own Id: OTP-6649</p> + </item> + + </list> + <!-- + <p>-</p> + --> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <p>-</p> + <!-- + <list type="bulleted"> + <item> + <p>[agent] The order in which the processes in the snmp agent + where terminated was incorrect. This could, in some + case's, lead to incoming request(s) being processed + during the application termination phase. This, in + turn, could lead to various process crashes (when + expected resources where no longer available). </p> + <p>Own Id: OTP-6805</p> + <p>Aux Id: Seq 10717</p> + </item> + + </list> + --> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.10 --> + + <section> + <title>SNMP Development Toolkit 4.9.6</title> + <p>Version 4.9.6 supports code replacement in run-time from/to + version 4.9.5, 4.9.4, 4.9.3, 4.9.2, 4.9.1 and 4.9.</p> + + <section> + <title>Improvements and new features</title> + <!-- + <list type="bulleted"> + <item> + <p>The snmp documentation source has been converted + from SGML to XML.</p> + <p>Own Id: OTP-6771</p> + </item> + </list> + --> + <p>-</p> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[compiler] The MIB compiler did not handle import + of the macro from the MIB RFC1155-SMI. </p> + <p>Own Id: OTP-6840</p> + <p>Aux Id: Seq 10726</p> + </item> + + <item> + <p>Bad length check (i.e. none) when decoding + AuthenticationParameters. </p> + <p>Own Id: OTP-6843</p> + </item> + + </list> + <!-- <p>-</p> --> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.9.6 --> + + <section> + <title>SNMP Development Toolkit 4.9.5</title> + <p>Version 4.9.5 supports code replacement in run-time from/to + version 4.9.4, 4.9.3, 4.9.2, 4.9.1 and 4.9.</p> + + <section> + <title>Improvements and new features</title> + <!-- + <list type="bulleted"> + <item> + <p>The snmp documentation source has been converted + from SGML to XML.</p> + <p>Own Id: OTP-6771</p> + </item> + </list> + --> + <p>-</p> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[agent] The order in which the processes in the snmp agent + where terminated was incorrect. This could, in some + case's, lead to incoming request(s) being processed + during the application termination phase. This, in + turn, could lead to various process crashes (when + expected resources where no longer available). </p> + <p>Own Id: OTP-6805</p> + <p>Aux Id: Seq 10717</p> + </item> + + <item> + <p>[agent] In version 4.9.4 some requests could be + handled single threaded regardless of the value of + the multi_thread config option. </p> + <p>Own Id: OTP-6815</p> + <p>Aux Id: Seq 10724</p> + </item> + </list> + <!-- <p>-</p> --> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.9.4</title> + <p>Version 4.9.4 supports code replacement in run-time from/to + version 4.9.3, 4.9.2, 4.9.1 and 4.9.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>The snmp documentation source has been converted + from SGML to XML.</p> + <p>Own Id: OTP-6771</p> + </item> + </list> + <!-- <p>-</p> --> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[agent] Unexpected worker process termination. + When the agent is multi-threaded (multi_thread = true), + sending a request to the agent with an invalid context + could lead to an unexpected worker process termination. + This is a non-fatal problem since the master-agent + would simply create a new worker process. </p> + <p>Own Id: OTP-6784</p> + <p>Aux Id: Seq 10689</p> + </item> + </list> + <!-- <p>-</p> --> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> <!-- 4.9.4 --> + + <section> + <title>SNMP Development Toolkit 4.9.3</title> + <p>Version 4.9.3 supports code replacement in run-time from/to + version 4.9.2, 4.9.1 and 4.9.</p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[agent] Changing own [usm] pass-phrase when agent is + multi-threaded did not work.</p> + <p>Scott Lystig Fritchie</p> + <p>Martin Björklund</p> + <p>Own Id: OTP-6712</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.9.2</title> + <p>Version 4.9.2 supports code replacement in run-time from/to + version 4.9.1, 4.9 & 4.8.4.</p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[agent] Incorrect default verbosity (trace) for target cache.</p> + <p>Own Id: OTP-6571</p> + <p>Aux Id: Seq 10437</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.9.1</title> + <p>Version 4.9.1 supports code replacement in run-time from/to + version 4.9 & 4.8.4.</p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[agent] Used wrong DEFVAL for vacmAccessStorageType + (volatile instead of nonVolatile) in SNMP-VIEW-BASED-ACM-MIB. </p> + <p>Martin Björklund</p> + <p>Own Id: OTP-6569</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.9</title> + <p>Version 4.9 supports code replacement in run-time from/to + version 4.8.4, 4.8.3, 4.8.2, 4.8.1 and 4.8.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>Added documentation for + <seealso marker="snmp#passwd2localized_key">snmp:passwd2localized_key/3</seealso>. </p> + <p>Own Id: OTP-6540</p> + </item> + <item> + <p>The + <seealso marker="snmp#config">snmp:config/0</seealso> + utility function assumes by default + current working dir as the directory to write config + files. This is a problem since there are two files + that share the same name, usm.conf, one for the agent + and the other for the manager. Some extra checks has + been added to be able warn the user about this possible + conflict. </p> + <p>Own Id: OTP-6532</p> + </item> + <item> + <p>Minor documentation improvement for module snmp_generic. </p> + <p>Own Id: OTP-6518</p> + </item> + <item> + <p>[agent] Improve error handling of missing target params + config. </p> + <p>Own Id: OTP-6487</p> + </item> + <item> + <p>Minor improvement to the mnesia snmp indexing. </p> + <p>Own Id: OTP-6415</p> + </item> + <item> + <p>Include the INET-ADDRESS-MIB mib in the SNMP application. </p> + <p>Own Id: OTP-6383</p> + </item> + <item> + <p>Added utility modules to read, write and update the config + files of the + <seealso marker="snmpa_conf">agent</seealso> and + <seealso marker="snmpm_conf">manager</seealso>. </p> + <p>Own Id: OTP-6318</p> + </item> + <item> + <p>[agent] Improve behaviour during massive trap- + sending. This is done in two way's:</p> + <list type="bulleted"> + <item> + <p>Improving performance of the target(s) cache + (which is used during trap/notification sending). </p> + </item> + <item> + <p>A slightly better flow control, making it more + difficult to actually overload the agent.</p> + </item> + </list> + <p>Own Id: OTP-6317</p> + <p>Aux Id: Seq 10437</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>Incorrect handling of decrypt failure resulting in + incorrect error reporting. Applies to both the + agent and the manager. Detected by dialyzer. </p> + <p>Own Id: OTP-6533</p> + </item> + <item> + <p>[manager] Invalid guard on function snmpm:agn/5 + made it impossible to reach this particular clause. + Detected by dialyzer. </p> + <p>Own Id: OTP-6529</p> + </item> + <item> + <p>Miscellaneous minor corrections, such as + removing "dead code". Detected by dialyzer. </p> + <p>Own Id: OTP-6515</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.8.4</title> + <p>Version 4.8.4 supports code replacement in run-time from/to + version 4.8.3, 4.8.2, 4.8.1 and 4.8.</p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[agent] An Audit Trail Log entry was sometimes done + using a list instead of the expected binary for the + snmp packet. This caused an error when converting the + log to a text-file. </p> + <p>Own Id: OTP-6408</p> + <p>Aux Id: Seq 10547</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.8.3</title> + <p>Version 4.8.3 supports code replacement in run-time from/to + version 4.8.2, 4.8.1 and 4.8.</p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[agent] Verification of ViewTreeFamily + (SNMP-VIEW-BASED-ACM-MIB) incorrect. + No values other then <c>null</c> and <c>[]</c> where accepted. </p> + <p>Own Id: OTP-6337</p> + <p>Aux Id: Seq 10509</p> + </item> + <item> + <p>[agent] Start with type <c>takeover</c> did not work. </p> + <p>Own Id: OTP-6340</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.8.2</title> + <p>Version 4.8.2 supports code replacement in run-time from/to + version 4.8.1 and 4.8.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>Add time-stamp to the verbosity printouts. </p> + <p>Own Id: OTP-6214</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>A badly formatted debug printout caused console printouts. </p> + <p>Own Id: OTP-6247</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.8.1</title> + <p>Version 4.8.1 supports code replacement in run-time from/to + version 4.8, 4.7.4 and 4.7.3.</p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>Removed an io:format in mini mib utility (used when + converting logs). </p> + <p>Own Id: OTP-6177</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.8</title> + <p>Version 4.8 supports code replacement in run-time from/to + version 4.7.4 and 4.7.3.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>Added a config option, <c>sndbuf</c>, for the net_if-module(s). + See + <seealso marker="snmp_app">application configuration</seealso> or + <seealso marker="snmp_config">running the application</seealso> + for more info (look for manager_net_if_options and + agent_net_if_options). </p> + <p>Own Id: OTP-6137</p> + </item> + <item> + <p>Improve error handling of the log_to_txt function(s). + [snmpm|snmpa]:log_to_txt on a non-existing log-file + causes an obscure error reason.</p> + <p>Own Id: OTP-6149</p> + </item> + <item> + <p>Performance improvement when converting audit trail logs.</p> + <p>Own Id: OTP-6164</p> + <p>Aux Id: Seq 10362</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[compiler] Allow empty definitions for SMI-II mibs, + i.e. mibs are allowed to only contain the + MODULE-IDENTITY construct. </p> + <p>Own Id: OTP-6150</p> + <p>Aux Id: Seq 10333</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.7.4</title> + <p>Version 4.7.4 supports code replacement in run-time from/to + version 4.7.3, 4.7.2, 4.7.1 and 4.7.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>Add another example, + <seealso marker="snmp_impl_example_manager">ex2</seealso>. + This example is basically a simple manager module. </p> + <p>Own Id: OTP-6042</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[agent] v1 trap sending minor problems. When sending a + v1 trap, the wrong record type (#pdu{}) was used to + access the type field (which does not exist in the + #tranpdu{} record). This value is used when logging.</p> + <p>Own Id: OTP-6077</p> + </item> + <item> + <p>[manager] Type guard error.</p> + <p>Kostis Sagonas.</p> + <p>Own Id: OTP-6074 (dialyzer)</p> + </item> + <item> + <p>Misc Dialyzer warnings.</p> + <p>Own Id: OTP-6068</p> + </item> + <item> + <p>[manager] Default value tags may conflict with actual + host name. When storing default values for agents, the + tag, default, was used for address (and port). This + could conflict with an actual host name.</p> + <p>Own Id: OTP-6062</p> + </item> + <item> + <p>Misc doc corrections.</p> + <p>Own Id: OTP-6044</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.7.3</title> + <p>Version 4.7.3 supports code replacement in run-time from/to + version 4.7.2, 4.7.1 and 4.7.</p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>Misc compiler warning cleanup.</p> + <p>Own Id: OTP-6031</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.7.2</title> + <p>Version 4.7.2 supports code replacement in run-time from/to + version 4.7.1 and 4.7.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>[manager] Improve handling of empty messages. Today + when receiving an empty (size = 0) udp message, this + will result in a decode failure (a catched function + clause), which in turn will be passed on to the user, + via a call to the + <seealso marker="snmpm_user#handle_error">handle_error</seealso> + callback function, in the <c>Reason</c> argument. + This has now been changed so that instead, the + <c>Reason</c> argument will get a <c>empty message</c> + value.</p> + <p>See + <seealso marker="snmpm_user#handle_error">handle_error</seealso> + for more details. </p> + <p>Own Id: OTP-6024</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[manager] Some error cases are reported to the 'user' + with the ReqId and Reason swapped in the call to the + <seealso marker="snmpm_user#handle_error">handle_error</seealso> + callback function.</p> + <p>Own Id: OTP-5992</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.7.1</title> + <p>Version 4.7.1 supports code replacement in run-time from/to + version 4.7, 4.6.1 and 4.6.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>Added new version info print functions, + <seealso marker="snmp#print_version_info">print_version_info</seealso>.</p> + <p>Own Id: OTP-5968</p> + </item> + <item> + <p>Updated the documentation for the + <seealso marker="snmpa#log_to_txt">agent</seealso> and + <seealso marker="snmpm#log_to_txt">manager</seealso> + log_to_txt functions.</p> + <p>Own Id: OTP-5969</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[manager] The supervision structure contained several + errors which unnecessarily caused a complete restart of + the manager.</p> + <p>Own Id: OTP-5963</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.7</title> + <p>Version 4.7 supports code replacement in run-time from/to + version 4.6.1 and 4.6.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>Add simple backup mechanism, + see <seealso marker="snmpa#backup">agent backup</seealso> + and <seealso marker="snmpm#backup">manager backup</seealso>.</p> + <p>Own Id: OTP-5870</p> + </item> + <item> + <p>Improve handling of faulty data base files.</p> + <p>Added new agent and manager config option, + <c>db_init_error</c>, see + <seealso marker="snmp_config">config</seealso> for more + info.</p> + <p>Own Id: OTP-5934</p> + <p>Aux Id: Seq 10202</p> + </item> + <item> + <p>Added possibility to configure restart type for each of + the components (default is permanent for the agent and + transient for the manager). + See <seealso marker="snmp_config">config</seealso> for more + info.</p> + <p>Own Id: OTP-5935</p> + </item> + <item> + <p>[compiler] Improve error printouts.</p> + <p>Own Id: OTP-5937</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <p>-</p> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.6.1</title> + <p>Version 4.6.1 supports code replacement in run-time from/to + version 4.6.</p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[agent] SNMP sha/aes decryption did not work. </p> + <p>Magnus Fröberg</p> + <p>Own Id: OTP-5834</p> + </item> + <item> + <p>[agent] The SNMP agent internal data base (local db) + uses dets, and does not properly handle error's from + e.g. lookup.</p> + <p>Own Id: OTP-5838</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.6</title> + <p>Version 4.6 supports code replacement in run-time from/to + version 4.5.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>Improved application start flexibility. It is now + possible to start snmp application components (agent + or manager) after the application has been started. + It is even possible to start an "empty" snmp + application and start the agent and/or manager + afterwords. See + <seealso marker="snmp#start_agent">start_agent</seealso> and + <seealso marker="snmp#start_manager">start_manager</seealso>.</p> + <p>Own Id: OTP-5797</p> + <p>Aux Id: Seq 10128</p> + </item> + <item> + <p>[agent] Adding utility function to convert old + application config to current agent config. + See the <seealso marker="snmpa#convert_config">convert_config</seealso> + for more info.</p> + <p>Own Id: OTP-5787</p> + </item> + <item> + <p>Improved handling of audit trail logs. + See the <seealso marker="snmp_app">atl_repair</seealso> + config for more info.</p> + <p>Own Id: OTP-5771</p> + </item> + <item> + <p>[manager] Introduced the + <seealso marker="snmpm#notify_started">notify_started</seealso> + function used by a <em>client</em> to get a notification + when the manager is started.</p> + <p>Own Id: OTP-5763</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>Misc documentation corrections.</p> + <p>Own Id: OTP-5829</p> + <p>Aux Id: Seq 10152</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.5</title> + <p>Version 4.5 supports code replacement in run-time from/to + version 4.4.1 and 4.4.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>[manager] Introduced the + <seealso marker="snmp_app">inform request behaviour</seealso> + configuration option to allow the user to specify + how/when the manager shall acknowledge inform-request's.</p> + <p>Own Id: OTP-5733</p> + </item> + <item> + <p>[manager] In order to improve application behaviour, + all callback function (see the + <seealso marker="snmpm_user">snmpm_user behaviour</seealso>) + calls + are now done by spawned processes (and not as previously + by the SNMP manager server process).</p> + <p>Own Id: OTP-5726</p> + </item> + <item> + <p>[manager] In order to present the various error + reason's returned by the manager, a + <seealso marker="snmpm#format_reason">format_reason</seealso> + function has been added. + The error reasons this function handles are those + returned by the (sync and async) get, get-next, + get-bulk and set-functions + (see the <seealso marker="snmpm">snmpm</seealso> module) + as well as the + <c>Reason</c> argument of the + <seealso marker="snmpm_user#handle_error">handle_error</seealso> + function of the + <seealso marker="snmpm_user">user callback module</seealso>.</p> + <p>Own Id: OTP-5581</p> + <p>Aux Id: Seq 9870</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[manager] The (error) report according to RFC 2572, chapter + 7.2 point 6) was never sent.</p> + <p>Own Id: OTP-5742</p> + </item> + <item> + <p>[agent] Check of notification name collision + could fail due to incorrect record name (assumed to + be <c>#trap</c>, but could also be <c>#notification</c>). + This only cases a problem when the application is + compiled with the strict_record_tests option.</p> + <p>Own Id: OTP-5740</p> + </item> + <item> + <p>[agent] Table get-request failure in some cases.</p> + <p>Own Id: OTP-5732</p> + <p>Aux Id: Seq 10087</p> + </item> + <item> + <p>Explicitly sync all audit trail log's upon termination.</p> + <p>Own Id: OTP-5727</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <list type="bulleted"> + <item> + <p>[manager] The + <seealso marker="snmpm_network_interface">snmpm_network_interface</seealso> + behaviour has been updated (see + <seealso marker="snmpm_network_interface#inform_response">inform_response</seealso> and + <seealso marker="snmp_manager_netif">definition of the manager net if</seealso>).</p> + <p>Own Id: OTP-5733</p> + </item> + </list> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.4.1</title> + <p>Version 4.4.1 supports code replacement in run-time from/to + version 4.4.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>[manager] Add monitoring of the SNMP manager. + The SNMP application consists of two different + run-time parts, the agent and the manager. They are + independent of each other. The agent is "permanent" + and the manager "transient". In order to handle + manager crashes a simple + <seealso marker="snmpm#monitor">monitor</seealso> + (and <seealso marker="snmpm#demonitor">demonitor</seealso>) + function has been added.</p> + <p>Own Id: OTP-5720</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[manager] If sending a set-request containing an + 'OCTET STRING' with an invalid integer (valid integer + are 0-255), the encoding will fail and cause the + net_if process to crash.</p> + <p>Own Id: OTP-5719</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.4</title> + <p>Version 4.4 supports code replacement in run-time from/to + version 4.3.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>Updated and extended the + <seealso marker="snmpa#info">agent</seealso> + info retrieval function. Also added an info retrieval + function for the + <seealso marker="snmpm#info">manager</seealso>.</p> + <p>Own Id: OTP-5666</p> + </item> + <item> + <p>[manager] Added get-bulk functionality, see (sync) get-bulk + and (async) get-bulk for more info.</p> + <p>Own Id: OTP-5669</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[manager] Mini-MIB not properly initiated which could + cause a server crash if the name_to_oid or oid_to_name + functions where called (if no mib's where loaded).</p> + <p>Own Id: OTP-5675</p> + </item> + <item> + <p>[manager] The out packet counter was not incremented for + sent v1/v2 messages.</p> + <p>Own Id: OTP-5676</p> + </item> + <item> + <p>[manager] The request GC process was started with the + wrong default value (idle) which could (unlikely but + still) cause problems after a code-change.</p> + <p>Own Id: OTP-5678</p> + </item> + <item> + <p>Bad handling of error cases (corrupt log file) when + converting log files (i.e. when calling the function + log_to_txt).</p> + <p>Own Id: OTP-5703</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <list type="bulleted"> + <item> + <p>[agent] The format of the info returned by the agent + info retrieval function has been changed. The info + can be converted to the old format by calling the + <seealso marker="snmpa#old_info_format">old_info_format</seealso>).</p> + <p>function. </p> + <p>Own Id: OTP-5666</p> + </item> + </list> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.3</title> + <p>Version 4.3 supports code replacement in run-time from/to + version 4.2.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>[manager] Improved async error reporting.</p> + <p>Own Id: OTP-5637</p> + <p>Aux Id: Seq 9970</p> + </item> + <item> + <p>Added support for The Advanced Encryption Standard (AES) + Cipher Algorithm in the SNMP User-based Security Model + (RFC 3826). Both agent and manager. </p> + <p>Martin Björklund</p> + <p>Own Id: OTP-5490</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[manager] Reset of USM-cache when unregister agent.</p> + <p>Own Id: OTP-5636</p> + <p>Aux Id: Seq 9970</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.2</title> + <p>Version 4.2 supports code replacement in run-time from/to + version 4.1.5.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>[manager] Added another get, get-next and set function + with another argument, <c>ExtraInfo</c> (see + synchronous get (g), asynchronous get (ag), + synchronous set (s), asynchronous set (as), + synchronous get-next (gn), and asynchronous get-next (agn)). + This argument is passed on to the net-if process. The net-if + process included in this application makes no use of this + info, but other implementations might.</p> + <p>Own Id: OTP-5574</p> + <p>Aux Id: Seq 9850</p> + </item> + <item> + <p>[manager] <c>report</c> message with incorrect security info + (e.g. securtyModel and/or securityLevel) was ignored (dropped, + except for incrementing the proper error counter) even if all + other info was correct. This has been changed so that in this + situation, the user will be informed, either via the + return value from a synchronous call (see synchronous get (g), + synchronous set (s) and synchronous get-next (gn)) + or via a call to the handle_error callback function.</p> + <p>Own Id: OTP-5578</p> + <p>Aux Id: Seq 9850</p> + </item> + <item> + <p>[manager] Added a + <seealso marker="snmpm#unregister_usm_user">unregister_usm_user</seealso> function.</p> + <p>Own Id: OTP-5580</p> + <p>Aux Id: Seq 9850</p> + </item> + <item> + <p>[agent] Added new functions to get lists of all tables, + <seealso marker="snmpa#which_tables">which_tables</seealso>, + and variables, + <seealso marker="snmpa#which_variables">which_variables</seealso>, + known to the agent.</p> + <p>Own Id: OTP-5590</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[manager] Incorrect SHA-key length check when + updating usm-user info (should have been 20 but + was 16).</p> + <p>Own Id: OTP-5579</p> + <p>Aux Id: Seq 9850</p> + </item> + <item> + <p>[compiler] Incorrect error report when the name of the + field and object is the same. </p> + <p>Kostis Sagonas</p> + <p>Own Id: OTP-5591 (dialyzer)</p> + </item> + <item> + <p>[manager] Arguments Port (third argument) and CtxName + (fourth argument) where swapped in snmpm:g/5 + when forwarding call. </p> + <p>Kostis Sagonas</p> + <p>Own Id: OTP-5592 (dialyzer)</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <list type="bulleted"> + <item> + <p>[manager] The <c>snmpm_network_interface</c> behaviour has changed. + One more argument (ExtraInfo) was added to the + function send_pdu (see + <seealso marker="snmpm_network_interface#send_pdu">send_pdu</seealso>).</p> + <p>Own Id: OTP-5574</p> + <p>Aux Id: Seq 9850</p> + </item> + </list> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.1.5</title> + <p>Version 4.1.5 supports code replacement in run-time from/to + version 4.1.4, 4.1.3, 4.1.2, 4.1.1 and 4.1.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>[agent] Add mapping of notification oid to alias-name. </p> + <p>Martin Björklund</p> + <p>Own Id: OTP-5562</p> + </item> + <item> + <p>[manager] Late (async) reply incorrectly delivered to + user via handle_pdu instead of handle_error.</p> + <p>Own Id: OTP-5506</p> + <p>Aux Id: Seq 9804</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[manager] Security level handled incorrectly.</p> + <p>Own Id: OTP-5564</p> + <p>Aux Id: Seq 9850</p> + </item> + <item> + <p>[manager] (v3) Encryption/decryption failure.</p> + <p>Own Id: OTP-5560</p> + <p>Aux Id: Seq 9850</p> + </item> + <item> + <p>[manager] Cannot handle version-1 traps.</p> + <p>Own Id: OTP-5557</p> + <p>Aux Id: Seq 9850</p> + </item> + <item> + <p>[manager] Set-request without specifying the variable + type failed. The type of the oid had to be found in the + loaded MIB. This look-up was erroneous.</p> + <p>Own Id: OTP-5556</p> + <p>Aux Id: Seq 9850</p> + </item> + <item> + <p>[agent] Error's reported by the SecModule (v3) when + generating outgoing message was not handled correctly + in message processing dispatcher module.</p> + <p>Own Id: OTP-5550</p> + </item> + <item> + <p>[manager] Error's reported by the SecModule (v3) when + generating outgoing message was not handled correctly + in message processing dispatcher module. And also when + encryption failed, the real error was masked into another + error.</p> + <p>Own Id: OTP-5548</p> + <p>Aux Id: Seq 9804</p> + </item> + <item> + <p>[agent] Failure to stop the snmp application when + started with the old config type.</p> + <p>Own Id: OTP-5547</p> + <p>Aux Id: Seq 9842</p> + </item> + <item> + <p>[manager] User unregistration after reboot causes process crash + (snmpm_server).</p> + <p>Own Id: OTP-5539</p> + </item> + <item> + <p>[manager] Security engine id look-up errors.</p> + <p>Own Id: OTP-5508</p> + <p>Aux Id: Seq 9804</p> + </item> + <item> + <p>[manager] Registering of USM users erroneous.</p> + <p>Own Id: OTP-5505</p> + <p>Aux Id: Seq 9804</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.1.4</title> + <p>Version 4.1.4 supports code replacement in run-time from/to + version 4.1.3, 4.1.2, 4.1.1 and 4.1.</p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>Fixed a perl related problem in the mibs Makefile. </p> + <p>Geoff White</p> + <p>Own Id: OTP-5491</p> + </item> + <item> + <p>[manager] Failed to register usm users. Both using the + usm config file + (<seealso marker="snmp_manager_config_files#usm_user">usm.conf</seealso>) + and the API functions + <seealso marker="snmpm#register_usm_user">register_usm_user</seealso></p> + <p>Own Id: OTP-5499</p> + <p>Aux Id: Seq 9804</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.1.3</title> + <p>Version 4.1.3 supports code replacement in run-time from/to + version 4.1.2, 4.1.1 and 4.1.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>Added utility functions to update agent and manager + config files.</p> + <p>Own Id: OTP-5468</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[agent] Error replies was composed with invalid OIDs for the + following error counters: + <em>usmStatsWrongDigests</em> (RFC 2574, chap 3.2, point 6), + <em>usmStatsUnsupportedSecLevels</em> (point 5) and + <em>usmStatsDecryptionErrors</em> (point 8a).</p> + <p>Own Id: OTP-5464</p> + <p>Aux Id: Seq 9791</p> + </item> + <item> + <p>[agent] Malformed Oid returned from a get_next operation as + part of a get-bulk-request causes the agent to crash.</p> + <p>Own Id: OTP-5465</p> + <p>Aux Id: Seq 9783, Seq 9793</p> + </item> + <item> + <p>[agent] Missing catch on decode function call.</p> + <p>Kostis Sagonas (Dialyzer)</p> + <p>Own Id: OTP-5479</p> + </item> + <item> + <p>[manager] Invalid check for illegal options.</p> + <p>Kostis Sagonas (Dialyzer</p> + <p>Own Id: OTP-5480</p> + </item> + <item> + <p>Faulty utility function for generation of agent + config file target_addr.conf.</p> + <p>Own Id: OTP-5482</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit 4.1.2</title> + <p>Version 4.1.2 supports code replacement in run-time from/to + version 4.1.1 and 4.1.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>Export utility functions to create agent and manager + config files.</p> + <p>Own Id: OTP-5390</p> + </item> + <item> + <p>[agent] Documented instrumentation utility functions + (e.g. <seealso marker="snmpa#current_request_id">current_request_id</seealso>).</p> + <p>Own Id: OTP-5423</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[manager] If the client crashes after having issued + an async request, the server will crash when trying to + perform cleanup. Supervision of the calling process issuing an + async request has been removed. </p> + <p>Own Id: OTP-5370</p> + </item> + <item> + <p>Failure to convert an audit-trail-log to text-file when + using the default log name. This applies to both the manager + and the agent. </p> + <p>Own Id: OTP-5394</p> + </item> + <item> + <p>[manager] Corrected the discovery handling of the manager.</p> + <p>Own Id: OTP-5414</p> + </item> + <item> + <p>[manager] Statistic counter creation correction.</p> + <p>Own Id: OTP-5415</p> + </item> + <item> + <p>[agent] When using the old style agent configuration (pre 4.0), + it was not possible to specify a different error report + module (the agent always choose snmpa_error_logger). + A similar problem existed for the config option + force_config_load, which always reverted to false.</p> + <p>Own Id: OTP-5424</p> + </item> + <item> + <p>[manager] The manager net_if process failed to properly handle + the case bind_to option value true.</p> + <p>Own Id: OTP-5431</p> + </item> + <item> + <p>[agent] Various minor mnesia-related fixes.</p> + <p>Martin Björklund</p> + <p>Own Id: OTP-5433</p> + </item> + <item> + <p>[manager] Missing interface functions for loading and + unloading mibs into/from the manager: + <seealso marker="snmpm#load_mib">load_mib</seealso>, + <seealso marker="snmpm#unload_mib">unload_mib</seealso>, + <seealso marker="snmpm#which_mibs">which_mibs</seealso>, + <seealso marker="snmpm#name_to_oid">name_to_oid</seealso> and + <seealso marker="snmpm#oid_to_name">oid_to_name</seealso>.</p> + <p>Own Id: OTP-5441</p> + </item> + <item> + <p>Added utility functions to retrieve some system and application + info, see <seealso marker="snmp#versions1">versions1</seealso> and + <seealso marker="snmp#versions2">versions2</seealso>.</p> + <p>Own Id: OTP-5445</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit v4.1.1</title> + <p>Version 4.1.1 supports code replacement in run-time from/to + version 4.1. </p> + <p>When performing a downgrade, make sure the verbosity of the + manager server process is silence, or else the process will crash + (due to a bug in version 4.0.4) and be restarted by it's + supervisor.</p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[manager] Manager synchronous get-function with timeout erroneous. + Results in a function clause.</p> + <p>Own Id: OTP-5364</p> + </item> + <item> + <p>Replace in decoder fun's of the "old style" fun format, + {atom(), atom()}, with a proper fun, e.g. "fun the_function/1".</p> + <p>Own Id: OTP-5365</p> + </item> + <item> + <p>[manager] Register agent using the config file + agents.conf failed due to incorrect function guard.</p> + <p>Own Id: OTP-5367</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit v4.1.0</title> + <p>Version 4.1.0 supports code replacement in run-time from/to + version 4.0.4. </p> + <p>When performing a downgrade, make sure the verbosity of the + manager server process is silence, or else the process will crash + (due to a bug in version 4.0.4) and be restarted by it's + supervisor.</p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>[manager] Added possibility to monitor a registered user. + See <seealso marker="snmpm#register_user_monitor">snmpm:register_user_monitor</seealso>.</p> + <p>Own Id: OTP-5286</p> + </item> + <item> + <p>[agent] Improved symbolic store. Alias and Oids where stored + with similar key's (separated by types: atom() and + lists() respectively). Also added new function: + <seealso marker="snmpa#which_aliasnames">snmpa:which_aliasnames</seealso>.</p> + <p>Own Id: OTP-5298</p> + </item> + <item> + <p>[agent] The agent local_db volatile storage method uses + an ets-table which is private. This table has been made + protected in order to make it easier to debug and test the + snmp agent.</p> + <p>Own Id: OTP-5308</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>Misspelled deprecated function. Non-existent function + snmp:is_constistent/1 was marked as deprecated. Should + have been snmp:is_consistent/1).</p> + <p>Own Id: OTP-5273</p> + </item> + <item> + <p>[agent] Unclear documentation for function + <seealso marker="snmpa#send_notification">snmpa:send_notification</seealso>. The Recv argument + (specifically the {M,F,A} variant).</p> + <p>Own Id: OTP-5281</p> + </item> + <item> + <p>[manager] It was never documented how the default + <seealso marker="snmpm_user">user behaviour</seealso> + could be overridden (default user is the module + <c>snmpm_user_default</c>). + See <seealso marker="snmp_app">application configuration</seealso> or + <seealso marker="snmp_config#configuration_params">configuration params</seealso>.</p> + <p>Own Id: OTP-5299</p> + </item> + <item> + <p>[manager] The server process contained a bug that caused it + to crash, if it received an exit message from it's gct (GC timer) + process and it's verbosity was <em>log</em> or higher. </p> + <p>This also effects the application downgrade. </p> + <p>Own Id: OTP-5306</p> + </item> + <item> + <p>[agent] The agent config file, target_addr.conf, was + incorrectly described in the + <seealso marker="snmp_agent_config_files#target_addr">Target Address Definitions</seealso> chapter of the + User's Guide. The EngineId option was left out.</p> + <p>Own Id: OTP-5307</p> + <p>Aux Id: Seq 9689</p> + </item> + <item> + <p>[manager] When a InformRequest is received, the manager sends + a response message. This did not include the varbinds + of the original message. See RFC 3416, chapter 4.2.7.</p> + <p>Own Id: OTP-5314</p> + </item> + <item> + <p>[manager] Erroneous function guards made it possible to update + some agent info (that should be "static").</p> + <p>Own Id: OTP-5315</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit v4.0.4</title> + <p>Version 4.0.4 supports code replacement in run-time from/to + version 4.0.3, 4.0.2, 4.0.1 and 4.0. + </p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[manager] The timeout calculation for the request + gc timer incorrect.</p> + <p>Own Id: OTP-5267</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit v4.0.3</title> + <p>Version 4.0.3 supports code replacement in run-time from/to + version 4.0.2, 4.0.1 and 4.0. </p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[manager] Some basic SNMP types where not handled when + performing set-requests snmpm:s and snmpm:as): + 'BITS' (b), 'IpAddress' (ip), 'Opaque' (op), + 'Counter32' (c32), 'Counter64' (c64) and 'TimeTicks' (tt).</p> + <p>Own Id: OTP-5256</p> + </item> + <item> + <p>[manager] Unnecessary error message when receiving trap from + unregistered agent or agent using other port then the + request port for trap-sending.</p> + <p>Own Id: OTP-5258</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit v4.0.2</title> + <p>Version 4.0.2 supports code replacement in run-time from/to + version 4.0.1 and 4.0. + </p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>[manager] When the net_if process failed to send a message, for + whatever reason, this is just dropped. And the user is + "left hanging". Now, if the request is synchronous, + it will return with a proper reason (snmpm:g, snmpm:gn and + snmpm:s), and if the request + was asynchronous, the new callback function, + handle_error + (see <seealso marker="snmpm_user">snmpm_user</seealso>) is + called. </p> + <p>Own Id: OTP-5242</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[manager] The arguments CtxName and Port was swapped in the + function snmpm:g/6.</p> + <p>Own Id: OTP-5225</p> + </item> + <item> + <p>[manager] TRAP receive fails for unknown agent due to + failing message size calculation.</p> + <p>Own Id: OTP-5241</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <list type="bulleted"> + <item> + <p>[manager] Introduced a new callback function in the behaviour + <seealso marker="snmpm_user">snmpm_user</seealso>.</p> + <p>Own Id: OTP-5242</p> + </item> + </list> + </section> + </section> + + <section> + <title>SNMP Development Toolkit v4.0.1</title> + <p>Version 4.0.1 supports code replacement in run-time from/to version 4.0. + </p> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>[agent] Added functions to get a list of all mibs loaded into + an agent + (see <seealso marker="snmpa#which_mibs">snmpa:which_mibs</seealso>) + and to get the (full path) file name of a loaded mib (see + <seealso marker="snmpa#whereis_mib">snmpa:whereis_mib</seealso>).</p> + <p>Own Id: OTP-5187</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[manager] The wrong default value (1024) was used for the + net-if option recbuf. If no value is specified, then the OS + default shall be used.</p> + <p>Own Id: OTP-5196</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + </section> + </section> + + <section> + <title>SNMP Development Toolkit v4.0</title> + + <section> + <title>Improvements and new features</title> + <list type="bulleted"> + <item> + <p>[manager] Added a proper snmp manager.</p> + <p>Major restructure of the application in order to + incorporate the new manager.</p> + </item> + <item> + <p>[agent] Add a <c>snmpa:get/3</c> with an extra <c>Context</c> + argument. Also added similar <c>snmpa:get_next/2,3</c> functions. + See <seealso marker="snmpa#get">snmpa:get</seealso> and + <seealso marker="snmpa#get_next">snmpa:get_next</seealso>. </p> + <p>Martin Björklund</p> + <p>Own Id: OTP-5054</p> + </item> + <item> + <p>[agent] Add <em>notification filters</em>. See + <seealso marker="snmpa_notification_filter">snmpa_notification_filter</seealso>, + <seealso marker="snmpa#register_notification_filter">register_notification_filter</seealso>, + <seealso marker="snmpa#unregister_notification_filter">unregister_notification_filter</seealso> and + <seealso marker="snmpa#which_notification_filter">which_notification_filter</seealso>.</p> + <p>Own Id: OTP-5055</p> + </item> + <item> + <p>[agent] Added two mib look-up functions, + <seealso marker="snmpa#me_of">me_of</seealso> and + <seealso marker="snmpa#mib_of">mib_of</seealso>.</p> + <p>Own Id: OTP-5082</p> + <p>Aux Id: Seq 8848</p> + </item> + <item> + <p>[compiler] The MIB compiler is now (source code) independent + of the rest of the application (and vice versa).</p> + </item> + <item> + <p>[compiler] DISPLAY-HINT and UNITS included in the + compiled mib.</p> + <p>Own Id: OTP-5053</p> + </item> + <item> + <p>[compiler] Added compiler options <c>imports</c> and + <c>module_identity</c> to include the imports list and + module identity (only SMIv2) info in the compiled mib, + see <seealso marker="snmpc">snmpc</seealso>.</p> + </item> + <item> + <p>[compiler] Added the MIB compiler option + <c>+no_defs</c>, see <seealso marker="snmpc">snmpc</seealso>.</p> + <p>Martin Björklund</p> + </item> + <item> + <p>[compiler] Added the MIB compiler option + <c>+'{module, atom()}'</c>, + see <seealso marker="snmpc">snmpc</seealso>. </p> + <p>Martin Björklund</p> + </item> + </list> + </section> + + <section> + <title>Reported Fixed Bugs and Malfunctions</title> + <list type="bulleted"> + <item> + <p>[agent] Failing MIB configure/reconfigure was difficult + to diagnose. Added better error handling and verbosity.</p> + </item> + <item> + <p>[compiler] Added "default value" for INTEGER with enumeration + without a DEFVAL clause. + The lowest valid integer value is chosen for the + variable_info defval.</p> + <p>Own Id: OTP-5124</p> + <p>Aux Id: Seq 8738</p> + </item> + <item> + <p>[compiler] Unnecessarily reserved words in the mib compiler + can cause some enumeration definitions to fail.</p> + <p>Martin Björklund</p> + <p>Own Id: OTP-5066</p> + </item> + </list> + </section> + + <section> + <title>Incompatibilities</title> + <list type="bulleted"> + <item> + <p>New sys configuration format. + Although the old configuration format still + works (if only the agent is used), it is no + longer documented and will eventually be + eliminated. + See <seealso marker="snmp_app">application configuration</seealso> or + <seealso marker="snmp_config#configuration_params">configuration params</seealso> for more info.</p> + </item> + <item> + <p>Three new interface modules have been introduced. One + for each of the individual parts of the application:</p> + <list type="bulleted"> + <item> + <p>[agent] <c>snmpa</c></p> + </item> + <item> + <p>[manager] <c>snmpm</c></p> + </item> + <item> + <p>[compiler] <c>snmpc</c></p> + </item> + </list> + <p>The primary interface module, <c>snmp</c>, still exist. + It contains the application generic functions. The + agent specific stuff still exist (for backward + compatibility reasons), but has been deprecated and will + eventually be removed.</p> + <p>Some previously already deprecated functions has been + removed (since they in turn was dependent on deprecated + functions, see calendar).</p> + </item> + <item> + <p>[agent] The agent network interface API has changed. + See <seealso marker="snmp_agent_netif">snmp agent net if</seealso>,</p> + </item> + <item> + <p>[agent] The default agent audit trail log name has changed.</p> + </item> + <item> + <p>[compiler] Mib format has changed (see OTP-5053 above).</p> + </item> + </list> + </section> + </section> +</chapter> + diff --git a/lib/snmp/doc/src/part.xml b/lib/snmp/doc/src/part.xml new file mode 100644 index 0000000000..603ddc7a62 --- /dev/null +++ b/lib/snmp/doc/src/part.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE part SYSTEM "part.dtd"> + +<part xmlns:xi="http://www.w3.org/2001/XInclude"> + <header> + <copyright> + <year>1996</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>SNMP User's Guide</title> + <prepared></prepared> + <docno></docno> + <date></date> + <rev></rev> + <file>part.xml</file> + </header> + <description> + <p>A multilingual Simple Network Management Protocol application, + featuring an Extensible Agent, a simple manager and a MIB + compiler and facilities for implementing SNMP MIBs etc.</p> + </description> + <xi:include href="snmp_intro.xml"/> + <xi:include href="snmp_agent_funct_descr.xml"/> + <xi:include href="snmp_manager_funct_descr.xml"/> + <xi:include href="snmp_mib_compiler.xml"/> + <xi:include href="snmp_config.xml"/> + <xi:include href="snmp_agent_config_files.xml"/> + <xi:include href="snmp_manager_config_files.xml"/> + <xi:include href="snmp_impl_example_agent.xml"/> + <xi:include href="snmp_impl_example_manager.xml"/> + <xi:include href="snmp_instr_functions.xml"/> + <xi:include href="snmp_def_instr_functions.xml"/> + <xi:include href="snmp_agent_netif.xml"/> + <xi:include href="snmp_manager_netif.xml"/> + <xi:include href="snmp_audit_trail_log.xml"/> + <xi:include href="snmp_advanced_agent.xml"/> + <xi:include href="snmp_app_a.xml"/> + <xi:include href="snmp_app_b.xml"/> +</part> + diff --git a/lib/snmp/doc/src/part_notes.xml b/lib/snmp/doc/src/part_notes.xml new file mode 100644 index 0000000000..6d00e5b7e3 --- /dev/null +++ b/lib/snmp/doc/src/part_notes.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE part SYSTEM "part.dtd"> + +<part xmlns:xi="http://www.w3.org/2001/XInclude"> + <header> + <copyright> + <year>1997</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>SNMP Release Notes</title> + <prepared></prepared> + <docno></docno> + <date></date> + <rev></rev> + <file>part_notes.xml</file> + </header> + <description> + <p>A multilingual Simple Network Management Protocol application, + featuring an Extensible Agent, a simple manager and a MIB + compiler and facilities for implementing SNMP MIBs etc.</p> + <p>For information about older versions see + <url href="part_notes_history_frame.html">release notes history</url>.</p> + </description> + <xi:include href="notes.xml"/> +</part> + diff --git a/lib/snmp/doc/src/part_notes_history.xml b/lib/snmp/doc/src/part_notes_history.xml new file mode 100644 index 0000000000..bebd33e81b --- /dev/null +++ b/lib/snmp/doc/src/part_notes_history.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE part SYSTEM "part.dtd"> + +<part> + <header> + <copyright> + <year>2004</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>SNMP Release Notes History</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>part_notes_history.xml</file> + </header> + <description> + <p>A multilingual Simple Network Management Protocol application, + featuring an Extensible Agent, a simple manager and a MIB + compiler and facilities for implementing SNMP MIBs etc.</p> + </description> + <include file="notes_history"></include> +</part> + diff --git a/lib/snmp/doc/src/ref_man.gif b/lib/snmp/doc/src/ref_man.gif Binary files differnew file mode 100644 index 0000000000..b13c4efd53 --- /dev/null +++ b/lib/snmp/doc/src/ref_man.gif diff --git a/lib/snmp/doc/src/ref_man.xml b/lib/snmp/doc/src/ref_man.xml new file mode 100644 index 0000000000..1ae5a8205b --- /dev/null +++ b/lib/snmp/doc/src/ref_man.xml @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE application SYSTEM "application.dtd"> + +<application xmlns:xi="http://www.w3.org/2001/XInclude"> + <header> + <copyright> + <year>1996</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>SNMP Reference Manual</title> + <prepared></prepared> + <docno></docno> + <date></date> + <rev></rev> + <file>ref_man.xml</file> + </header> + <description> + <p>A multilingual Simple Network Management Protocol + application featuring an Extensible Agent, simple manager, + a MIB compiler and facilities for implementing SNMP MIBs etc. + </p> + </description> + <xi:include href="snmp.xml"/> + <xi:include href="snmp_app.xml"/> + <xi:include href="snmpa.xml"/> + <xi:include href="snmpa_conf.xml"/> + <xi:include href="snmpa_discovery_handler.xml"/> + <xi:include href="snmpa_error_report.xml"/> + <xi:include href="snmpa_error.xml"/> + <xi:include href="snmpa_error_io.xml"/> + <xi:include href="snmpa_error_logger.xml"/> + <xi:include href="snmpa_local_db.xml"/> + <xi:include href="snmpa_mpd.xml"/> + <xi:include href="snmpa_network_interface.xml"/> + <xi:include href="snmpa_network_interface_filter.xml"/> + <xi:include href="snmpa_notification_delivery_info_receiver.xml"/> + <xi:include href="snmpa_notification_filter.xml"/> + <xi:include href="snmpa_supervisor.xml"/> + <xi:include href="snmp_community_mib.xml"/> + <xi:include href="snmp_framework_mib.xml"/> + <xi:include href="snmp_generic.xml"/> + <xi:include href="snmp_index.xml"/> + <xi:include href="snmp_notification_mib.xml"/> + <xi:include href="snmp_pdus.xml"/> + <xi:include href="snmp_standard_mib.xml"/> + <xi:include href="snmp_target_mib.xml"/> + <xi:include href="snmp_user_based_sm_mib.xml"/> + <xi:include href="snmp_view_based_acm_mib.xml"/> + <xi:include href="snmpc.xml"/> + <xi:include href="snmpm.xml"/> + <xi:include href="snmpm_conf.xml"/> + <xi:include href="snmpm_mpd.xml"/> + <xi:include href="snmpm_network_interface.xml"/> + <xi:include href="snmpm_user.xml"/> + <xi:include href="snmpm_network_interface_filter.xml"/> +</application> + diff --git a/lib/snmp/doc/src/snmp-um-1-image-1.gif b/lib/snmp/doc/src/snmp-um-1-image-1.gif Binary files differnew file mode 100644 index 0000000000..a633391c9a --- /dev/null +++ b/lib/snmp/doc/src/snmp-um-1-image-1.gif diff --git a/lib/snmp/doc/src/snmp-um-1-image-1.ps b/lib/snmp/doc/src/snmp-um-1-image-1.ps new file mode 100644 index 0000000000..13562a8366 --- /dev/null +++ b/lib/snmp/doc/src/snmp-um-1-image-1.ps @@ -0,0 +1,2912 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Adobe Illustrator(r) 6.0 +%%For: (Anna Fedoriw) (Ericsson Telecom) +%%Title: (MIBcompilerPrinciples.eps) +%%CreationDate: (97-05-23) (14.05) +%%BoundingBox: 86 487 456 695 +%%HiResBoundingBox: 86.1667 487.1601 455.3333 694.8333 +%%DocumentProcessColors: Black +%%DocumentFonts: Univers +%%DocumentSuppliedResources: procset Adobe_level2_AI5 1.0 0 +%%+ procset Adobe_typography_AI5 1.0 0 +%%+ procset Adobe_Illustrator_AI6_vars Adobe_Illustrator_AI6 +%%+ procset Adobe_Illustrator_AI5 1.0 0 +%AI5_FileFormat 2.0 +%AI3_ColorUsage: Black&White +%%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) +%%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 -1 -1 +%%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () +%AI3_TemplateBox: 306 396 306 396 +%AI3_TileBox: 21 -12 588 802 +%AI3_DocumentPreview: Macintosh_ColorPic +%AI5_ArtSize: 595.2756 841.8898 +%AI5_RulerUnits: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 1 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI5_OpenToView: 2 796 1.5 1146 827 58 1 1 3 40 +%AI5_OpenViewLayers: 7 +%%EndComments +%%BeginProlog +%%BeginResource: procset Adobe_level2_AI5 1.2 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) +%%Version: 1.2 +%%CreationDate: (04/10/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +userdict /Adobe_level2_AI5 23 dict dup begin + put + /packedarray where not + { + userdict begin + /packedarray + { + array astore readonly + } bind def + /setpacking /pop load def + /currentpacking false def + end + 0 + } if + pop + userdict /defaultpacking currentpacking put true setpacking + /initialize + { + Adobe_level2_AI5 begin + } bind def + /terminate + { + currentdict Adobe_level2_AI5 eq + { + end + } if + } bind def + mark + /setcustomcolor where not + { + /findcmykcustomcolor + { + 5 packedarray + } bind def + /setcustomcolor + { + exch aload pop pop + 4 + { + 4 index mul 4 1 roll + } repeat + 5 -1 roll pop + setcmykcolor + } + def + } if + + /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def + userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put + userdict /level2? + systemdict /languagelevel known dup + { + pop systemdict /languagelevel get 2 ge + } if + put +/level2ScreenFreq +{ + begin + 60 + HalftoneType 1 eq + { + pop Frequency + } if + HalftoneType 2 eq + { + pop GrayFrequency + } if + HalftoneType 5 eq + { + pop Default level2ScreenFreq + } if + end +} bind def +userdict /currentScreenFreq + level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put +level2? not + { + /setcmykcolor where not + { + /setcmykcolor + { + exch .11 mul add exch .59 mul add exch .3 mul add + 1 exch sub setgray + } def + } if + /currentcmykcolor where not + { + /currentcmykcolor + { + 0 0 0 1 currentgray sub + } def + } if + /setoverprint where not + { + /setoverprint /pop load def + } if + /selectfont where not + { + /selectfont + { + exch findfont exch + dup type /arraytype eq + { + makefont + } + { + scalefont + } ifelse + setfont + } bind def + } if + /cshow where not + { + /cshow + { + [ + 0 0 5 -1 roll aload pop + ] cvx bind forall + } bind def + } if + } if + cleartomark + /anyColor? + { + add add add 0 ne + } bind def + /testColor + { + gsave + setcmykcolor currentcmykcolor + grestore + } bind def + /testCMYKColorThrough + { + testColor anyColor? + } bind def + userdict /composite? + level2? + { + gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore + add add add 4 eq + } + { + 1 0 0 0 testCMYKColorThrough + 0 1 0 0 testCMYKColorThrough + 0 0 1 0 testCMYKColorThrough + 0 0 0 1 testCMYKColorThrough + and and and + } ifelse + put + composite? not + { + userdict begin + gsave + /cyan? 1 0 0 0 testCMYKColorThrough def + /magenta? 0 1 0 0 testCMYKColorThrough def + /yellow? 0 0 1 0 testCMYKColorThrough def + /black? 0 0 0 1 testCMYKColorThrough def + grestore + /isCMYKSep? cyan? magenta? yellow? black? or or or def + /customColor? isCMYKSep? not def + end + } if + end defaultpacking setpacking +%%EndResource +%%BeginResource: procset Adobe_typography_AI5 1.0 1 +%%Title: (Typography Operators) +%%Version: 1.0 +%%CreationDate:(03/26/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_typography_AI5 54 dict dup begin +put +/initialize +{ + begin + begin + Adobe_typography_AI5 begin + Adobe_typography_AI5 + { + dup xcheck + { + bind + } if + pop pop + } forall + end + end + end + Adobe_typography_AI5 begin +} def +/terminate +{ + currentdict Adobe_typography_AI5 eq + { + end + } if +} def +/modifyEncoding +{ + /_tempEncode exch ddef + /_pntr 0 ddef + { + counttomark -1 roll + dup type dup /marktype eq + { + pop pop exit + } + { + /nametype eq + { + _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll + put + } + { + /_pntr exch ddef + } ifelse + } ifelse + } loop + _tempEncode +} def +/TE +{ + StandardEncoding 256 array copy modifyEncoding + /_nativeEncoding exch def +} def +% +/TZ +{ + dup type /arraytype eq + { + /_wv exch def + } + { + /_wv 0 def + } ifelse + /_useNativeEncoding exch def + pop pop + findfont _wv type /arraytype eq + { + _wv makeblendedfont + } if + dup length 2 add dict + begin + mark exch + { + 1 index /FID ne + { + def + } if + cleartomark mark + } forall + pop + /FontName exch def + counttomark 0 eq + { + 1 _useNativeEncoding eq + { + /Encoding _nativeEncoding def + } if + cleartomark + } + { + /Encoding load 256 array copy + modifyEncoding /Encoding exch def + } ifelse + FontName currentdict + end + definefont pop +} def +/tr +{ + _ax _ay 3 2 roll +} def +/trj +{ + _cx _cy _sp _ax _ay 6 5 roll +} def +/a0 +{ + /Tx + { + dup + currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + } ddef + /Tj + { + dup + currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + } ddef +} def +/a1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/e0 +{ + /Tx + { + tr _psf + } ddef + /Tj + { + trj _pjsf + } ddef +} def +/e1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + tr _psf + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + trj _pjsf + grestore 3 1 roll moveto tr jsp + } ddef +} def +/i0 +{ + /Tx + { + tr sp + } ddef + /Tj + { + trj jsp + } ddef +} def +/i1 +{ + W N +} def +/o0 +{ + /Tx + { + tr sw rmoveto + } ddef + /Tj + { + trj swj rmoveto + } ddef +} def +/r0 +{ + /Tx + { + tr _ctm _pss + } ddef + /Tj + { + trj _ctm _pjss + } ddef +} def +/r1 +{ + /Tx + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/To +{ + pop _ctm currentmatrix pop +} def +/TO +{ + iTe _ctm setmatrix newpath +} def +/Tp +{ + pop _tm astore pop _ctm setmatrix + _tDict begin + /W + { + } def + /h + { + } def +} def +/TP +{ + end + iTm 0 0 moveto +} def +/Tr +{ + _render 3 le + { + currentpoint newpath moveto + } if + dup 8 eq + { + pop 0 + } + { + dup 9 eq + { + pop 1 + } if + } ifelse + dup /_render exch ddef + _renderStart exch get load exec +} def +/iTm +{ + _ctm setmatrix _tm concat 0 _rise translate _hs 1 scale +} def +/Tm +{ + _tm astore pop iTm 0 0 moveto +} def +/Td +{ + _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto +} def +/iTe +{ + _render -1 eq + { + } + { + _renderEnd _render get dup null ne + { + load exec + } + { + pop + } ifelse + } ifelse + /_render -1 ddef +} def +/Ta +{ + pop +} def +/Tf +{ + dup 1000 div /_fScl exch ddef +% + selectfont +} def +/Tl +{ + pop + 0 exch _leading astore pop +} def +/Tt +{ + pop +} def +/TW +{ + 3 npop +} def +/Tw +{ + /_cx exch ddef +} def +/TC +{ + 3 npop +} def +/Tc +{ + /_ax exch ddef +} def +/Ts +{ + /_rise exch ddef + currentpoint + iTm + moveto +} def +/Ti +{ + 3 npop +} def +/Tz +{ + 100 div /_hs exch ddef + iTm +} def +/TA +{ + pop +} def +/Tq +{ + pop +} def +/Th +{ + pop pop pop pop pop +} def +/TX +{ + pop +} def +/Tk +{ + exch pop _fScl mul neg 0 rmoveto +} def +/TK +{ + 2 npop +} def +/T* +{ + _leading aload pop neg Td +} def +/T*- +{ + _leading aload pop Td +} def +/T- +{ + _ax neg 0 rmoveto + _hyphen Tx +} def +/T+ +{ +} def +/TR +{ + _ctm currentmatrix pop + _tm astore pop + iTm 0 0 moveto +} def +/TS +{ + currentfont 3 1 roll + /_Symbol_ _fScl 1000 mul selectfont + + 0 eq + { + Tx + } + { + Tj + } ifelse + setfont +} def +/Xb +{ + pop pop +} def +/Tb /Xb load def +/Xe +{ + pop pop pop pop +} def +/Te /Xe load def +/XB +{ +} def +/TB /XB load def +currentdict readonly pop +end +setpacking +%%EndResource +%%BeginProcSet: Adobe_ColorImage_AI6 1.0 0 +userdict /Adobe_ColorImage_AI6 known not +{ + userdict /Adobe_ColorImage_AI6 17 dict put +} if +userdict /Adobe_ColorImage_AI6 get begin + + /initialize + { + Adobe_ColorImage_AI6 begin + Adobe_ColorImage_AI6 + { + dup type /arraytype eq + { + dup xcheck + { + bind + } if + } if + pop pop + } forall + } def + /terminate { end } def + + currentdict /Adobe_ColorImage_AI6_Vars known not + { + /Adobe_ColorImage_AI6_Vars 14 dict def + } if + + Adobe_ColorImage_AI6_Vars begin + /channelcount 0 def + /sourcecount 0 def + /sourcearray 4 array def + /plateindex -1 def + /XIMask 0 def + /XIBinary 0 def + /XIChannelCount 0 def + /XIBitsPerPixel 0 def + /XIImageHeight 0 def + /XIImageWidth 0 def + /XIImageMatrix null def + /XIBuffer null def + /XIDataProc null def + end + + /WalkRGBString null def + /WalkCMYKString null def + + /StuffRGBIntoGrayString null def + /RGBToGrayImageProc null def + /StuffCMYKIntoGrayString null def + /CMYKToGrayImageProc null def + /ColorImageCompositeEmulator null def + + /SeparateCMYKImageProc null def + + /FourEqual null def + /TestPlateIndex null def + + currentdict /_colorimage known not + { + /colorimage where + { + /colorimage get /_colorimage exch def + } + { + /_colorimage null def + } ifelse + } if + + /_currenttransfer systemdict /currenttransfer get def + + /colorimage null def + /XI null def + + + /WalkRGBString + { + 0 3 index + + dup length 1 sub 0 3 3 -1 roll + { + 3 getinterval { } forall + + 5 index exec + + 3 index + } for + + 5 { pop } repeat + + } def + + + /WalkCMYKString + { + 0 3 index + + dup length 1 sub 0 4 3 -1 roll + { + 4 getinterval { } forall + + 6 index exec + + 3 index + + } for + + 5 { pop } repeat + + } def + + + /StuffRGBIntoGrayString + { + .11 mul exch + + .59 mul add exch + + .3 mul add + + cvi 3 copy put + + pop 1 add + } def + + + /RGBToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 3 idiv string + dup 3 1 roll + + /StuffRGBIntoGrayString load exch + WalkRGBString + end + } def + + + /StuffCMYKIntoGrayString + { + exch .11 mul add + + exch .59 mul add + + exch .3 mul add + + dup 255 gt { pop 255 } if + + 255 exch sub cvi 3 copy put + + pop 1 add + } def + + + /CMYKToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 4 idiv string + dup 3 1 roll + + /StuffCMYKIntoGrayString load exch + WalkCMYKString + end + } def + + + /ColorImageCompositeEmulator + { + pop true eq + { + Adobe_ColorImage_AI6_Vars /sourcecount get 5 add { pop } repeat + } + { + Adobe_ColorImage_AI6_Vars /channelcount get 1 ne + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 3 -1 roll put + + channelcount 3 eq + { + /RGBToGrayImageProc + } + { + /CMYKToGrayImageProc + } ifelse + load + end + } if + image + } ifelse + } def + + + /SeparateCMYKImageProc + { + Adobe_ColorImage_AI6_Vars begin + + sourcecount 0 ne + { + sourcearray plateindex get exec + } + { + sourcearray 0 get exec + + dup length 4 idiv string + + 0 2 index + + plateindex 4 2 index length 1 sub + { + get 255 exch sub + + 3 copy put pop 1 add + + 2 index + } for + + pop pop exch pop + } ifelse + end + } def + + + /FourEqual + { + 4 index ne + { + pop pop pop false + } + { + 4 index ne + { + pop pop false + } + { + 4 index ne + { + pop false + } + { + 4 index eq + } ifelse + } ifelse + } ifelse + } def + + + /TestPlateIndex + { + Adobe_ColorImage_AI6_Vars begin + /plateindex -1 def + + /setcmykcolor where + { + pop + gsave + 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub + grestore + + 1 0 0 0 FourEqual + { + /plateindex 0 def + } + { + 0 1 0 0 FourEqual + { + /plateindex 1 def + } + { + 0 0 1 0 FourEqual + { + /plateindex 2 def + } + { + 0 0 0 1 FourEqual + { + /plateindex 3 def + } + { + 0 0 0 0 FourEqual + { + /plateindex 5 def + } if + } ifelse + } ifelse + } ifelse + } ifelse + pop pop pop pop + } if + plateindex + end + } def + + + /colorimage + { + Adobe_ColorImage_AI6_Vars begin + /channelcount 1 index def + /sourcecount 2 index 1 eq { channelcount 1 sub } { 0 } ifelse def + + 4 sourcecount add index dup + 8 eq exch 1 eq or not + end + + { + /_colorimage load null ne + { + _colorimage + } + { + Adobe_ColorImage_AI6_Vars /sourcecount get + 7 add { pop } repeat + } ifelse + } + { + dup 3 eq + TestPlateIndex + dup -1 eq exch 5 eq or or + { + /_colorimage load null eq + { + ColorImageCompositeEmulator + } + { + dup 1 eq + { + pop pop image + } + { + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + gsave + + 0 _currenttransfer exec + 1 _currenttransfer exec + eq + { 0 _currenttransfer exec 0.5 lt } + { 0 _currenttransfer exec 1 _currenttransfer exec gt } ifelse + + { { pop 0 } } { { pop 1 } } ifelse + systemdict /settransfer get exec + } if + + _colorimage + + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + grestore + } if + } ifelse + } ifelse + } + { + dup 1 eq + { + pop pop + image + } + { + pop pop + + Adobe_ColorImage_AI6_Vars begin + sourcecount -1 0 + { + exch sourcearray 3 1 roll put + } for + + /SeparateCMYKImageProc load + end + + systemdict /image get exec + } ifelse + } ifelse + } ifelse + } def + + /XI + { + Adobe_ColorImage_AI6_Vars begin + gsave + /XIMask exch 0 ne def + /XIBinary exch 0 ne def + pop + pop + /XIChannelCount exch def + /XIBitsPerPixel exch def + /XIImageHeight exch def + /XIImageWidth exch def + pop pop pop pop + /XIImageMatrix exch def + + XIBitsPerPixel 1 eq + { + XIImageWidth 8 div ceiling cvi + } + { + XIImageWidth XIChannelCount mul + } ifelse + /XIBuffer exch string def + + XIBinary + { + /XIDataProc { currentfile XIBuffer readstring pop } def + currentfile 128 string readline pop pop + } + { + /XIDataProc { currentfile XIBuffer readhexstring pop } def + } ifelse + + 0 0 moveto + XIImageMatrix concat + XIImageWidth XIImageHeight scale + + XIMask + { + XIImageWidth XIImageHeight + false + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + /_lp /null ddef + _fc + /_lp /imagemask ddef + + imagemask + } + { + XIImageWidth XIImageHeight + XIBitsPerPixel + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + XIChannelCount 1 eq + { + + gsave + 0 setgray + + image + + grestore + } + { + false + XIChannelCount + colorimage + } ifelse + } ifelse + grestore + end + } def + +end +%%EndProcSet +%%BeginResource: procset Adobe_Illustrator_AI5 1.1 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Full Prolog) +%%Version: 1.1 +%%CreationDate: (3/7/1994) () +%%Copyright: ((C) 1987-1994 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_Illustrator_AI5_vars 81 dict dup begin +put +/_eo false def +/_lp /none def +/_pf +{ +} def +/_ps +{ +} def +/_psf +{ +} def +/_pss +{ +} def +/_pjsf +{ +} def +/_pjss +{ +} def +/_pola 0 def +/_doClip 0 def +/cf currentflat def +/_tm matrix def +/_renderStart +[ +/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 +] def +/_renderEnd +[ +null null null null /i1 /i1 /i1 /i1 +] def +/_render -1 def +/_rise 0 def +/_ax 0 def +/_ay 0 def +/_cx 0 def +/_cy 0 def +/_leading +[ +0 0 +] def +/_ctm matrix def +/_mtx matrix def +/_sp 16#020 def +/_hyphen (-) def +/_fScl 0 def +/_cnt 0 def +/_hs 1 def +/_nativeEncoding 0 def +/_useNativeEncoding 0 def +/_tempEncode 0 def +/_pntr 0 def +/_tDict 2 dict def +/_wv 0 def +/Tx +{ +} def +/Tj +{ +} def +/CRender +{ +} def +/_AI3_savepage +{ +} def +/_gf null def +/_cf 4 array def +/_if null def +/_of false def +/_fc +{ +} def +/_gs null def +/_cs 4 array def +/_is null def +/_os false def +/_sc +{ +} def +/_pd 1 dict def +/_ed 15 dict def +/_pm matrix def +/_fm null def +/_fd null def +/_fdd null def +/_sm null def +/_sd null def +/_sdd null def +/_i null def +/discardSave null def +/buffer 256 string def +/beginString null def +/endString null def +/endStringLength null def +/layerCnt 1 def +/layerCount 1 def +/perCent (%) 0 get def +/perCentSeen? false def +/newBuff null def +/newBuffButFirst null def +/newBuffLast null def +/clipForward? false def +end +userdict /Adobe_Illustrator_AI5 known not { + userdict /Adobe_Illustrator_AI5 91 dict put +} if +userdict /Adobe_Illustrator_AI5 get begin +/initialize +{ + Adobe_Illustrator_AI5 dup begin + Adobe_Illustrator_AI5_vars begin + discardDict + { + bind pop pop + } forall + dup /nc get begin + { + dup xcheck 1 index type /operatortype ne and + { + bind + } if + pop pop + } forall + end + newpath +} def +/terminate +{ + end + end +} def +/_ +null def +/ddef +{ + Adobe_Illustrator_AI5_vars 3 1 roll put +} def +/xput +{ + dup load dup length exch maxlength eq + { + dup dup load dup + length 2 mul dict copy def + } if + load begin + def + end +} def +/npop +{ + { + pop + } repeat +} def +/sw +{ + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add +} def +/swj +{ + dup 4 1 roll + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add + 6 2 roll /_cnt 0 ddef + { + 1 index eq + { + /_cnt _cnt 1 add ddef + } if + } forall + pop + exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop +} def +/ss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put pop + gsave + false charpath currentpoint + 4 index setmatrix + stroke + grestore + moveto + 2 copy rmoveto + } exch cshow + 3 npop +} def +/jss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put + gsave + _sp eq + { + exch 6 index 6 index 6 index 5 -1 roll widthshow + currentpoint + } + { + false charpath currentpoint + 4 index setmatrix stroke + } ifelse + grestore + moveto + 2 copy rmoveto + } exch cshow + 6 npop +} def +/sp +{ + { + 2 npop (0) exch + 2 copy 0 exch put pop + false charpath + 2 copy rmoveto + } exch cshow + 2 npop +} def +/jsp +{ + { + 2 npop + (0) exch 2 copy 0 exch put + _sp eq + { + exch 5 index 5 index 5 index 5 -1 roll widthshow + } + { + false charpath + } ifelse + 2 copy rmoveto + } exch cshow + 5 npop +} def +/pl +{ + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform +} def +/setstrokeadjust where +{ + pop true setstrokeadjust + /c + { + curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll curveto + } def + /V + /v load def + /y + { + 2 copy curveto + } def + /Y + /y load def + /l + { + lineto + } def + /L + /l load def + /m + { + moveto + } def +} +{ + /c + { + pl curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll pl curveto + } def + /V + /v load def + /y + { + pl 2 copy curveto + } def + /Y + /y load def + /l + { + pl lineto + } def + /L + /l load def + /m + { + pl moveto + } def +} ifelse +/d +{ + setdash +} def +/cf +{ +} def +/i +{ + dup 0 eq + { + pop cf + } if + setflat +} def +/j +{ + setlinejoin +} def +/J +{ + setlinecap +} def +/M +{ + setmiterlimit +} def +/w +{ + setlinewidth +} def +/XR +{ + 0 ne + /_eo exch ddef +} def +/H +{ +} def +/h +{ + closepath +} def +/N +{ + _pola 0 eq + { + _doClip 1 eq + { + _eo {eoclip} {clip} ifelse /_doClip 0 ddef + } if + newpath + } + { + /CRender + { + N + } ddef + } ifelse +} def +/n +{ + N +} def +/F +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc + /_doClip 0 ddef + } + { + _pf + } ifelse + } + { + /CRender + { + F + } ddef + } ifelse +} def +/f +{ + closepath + F +} def +/S +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + _ps + } ifelse + } + { + /CRender + { + S + } ddef + } ifelse +} def +/s +{ + closepath + S +} def +/B +{ + _pola 0 eq + { + _doClip 1 eq + gsave F grestore + { + gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + S + } ifelse + } + { + /CRender + { + B + } ddef + } ifelse +} def +/b +{ + closepath + B +} def +/W +{ + /_doClip 1 ddef +} def +/* +{ + count 0 ne + { + dup type /stringtype eq + { + pop + } if + } if + newpath +} def +/u +{ +} def +/U +{ +} def +/q +{ + _pola 0 eq + { + gsave + } if +} def +/Q +{ + _pola 0 eq + { + grestore + } if +} def +/*u +{ + _pola 1 add /_pola exch ddef +} def +/*U +{ + _pola 1 sub /_pola exch ddef + _pola 0 eq + { + CRender + } if +} def +/D +{ + pop +} def +/*w +{ +} def +/*W +{ +} def +/` +{ + /_i save ddef + clipForward? + { + nulldevice + } if + 6 1 roll 4 npop + concat pop + userdict begin + /showpage + { + } def + 0 setgray + 0 setlinecap + 1 setlinewidth + 0 setlinejoin + 10 setmiterlimit + [] 0 setdash + /setstrokeadjust where {pop false setstrokeadjust} if + newpath + 0 setgray + false setoverprint +} def +/~ +{ + end + _i restore +} def +/O +{ + 0 ne + /_of exch ddef + /_lp /none ddef +} def +/R +{ + 0 ne + /_os exch ddef + /_lp /none ddef +} def +/g +{ + /_gf exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _gf setgray + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/G +{ + /_gs exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _gs setgray + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/k +{ + _cf astore pop + /_fc + { + _lp /fill ne + { + _of setoverprint + _cf aload pop setcmykcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/K +{ + _cs astore pop + /_sc + { + _lp /stroke ne + { + _os setoverprint + _cs aload pop setcmykcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/x +{ + /_gf exch ddef + findcmykcustomcolor + /_if exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _if _gf 1 exch sub setcustomcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/X +{ + /_gs exch ddef + findcmykcustomcolor + /_is exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _is _gs 1 exch sub setcustomcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/A +{ + pop +} def +/annotatepage +{ +userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse +} def +/XT { + pop pop +} def +/discard +{ + save /discardSave exch store + discardDict begin + /endString exch store + gt38? + { + 2 add + } if + load + stopped + pop + end + discardSave restore +} bind def +userdict /discardDict 7 dict dup begin +put +/pre38Initialize +{ + /endStringLength endString length store + /newBuff buffer 0 endStringLength getinterval store + /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store + /newBuffLast newBuff endStringLength 1 sub 1 getinterval store +} def +/shiftBuffer +{ + newBuff 0 newBuffButFirst putinterval + newBuffLast 0 + currentfile read not + { + stop + } if + put +} def +0 +{ + pre38Initialize + mark + currentfile newBuff readstring exch pop + { + { + newBuff endString eq + { + cleartomark stop + } if + shiftBuffer + } loop + } + { + stop + } ifelse +} def +1 +{ + pre38Initialize + /beginString exch store + mark + currentfile newBuff readstring exch pop + { + { + newBuff beginString eq + { + /layerCount dup load 1 add store + } + { + newBuff endString eq + { + /layerCount dup load 1 sub store + layerCount 0 eq + { + cleartomark stop + } if + } if + } ifelse + shiftBuffer + } loop + } if +} def +2 +{ + mark + { + currentfile buffer readline not + { + stop + } if + endString eq + { + cleartomark stop + } if + } loop +} def +3 +{ + /beginString exch store + /layerCnt 1 store + mark + { + currentfile buffer readline not + { + stop + } if + dup beginString eq + { + pop /layerCnt dup load 1 add store + } + { + endString eq + { + layerCnt 1 eq + { + cleartomark stop + } + { + /layerCnt dup load 1 sub store + } ifelse + } if + } ifelse + } loop +} def +end +userdict /clipRenderOff 15 dict dup begin +put +{ + /n /N /s /S /f /F /b /B +} +{ + { + _doClip 1 eq + { + /_doClip 0 ddef _eo {eoclip} {clip} ifelse + } if + newpath + } def +} forall +/Tr /pop load def +/Bb {} def +/BB /pop load def +/Bg {12 npop} def +/Bm {6 npop} def +/Bc /Bm load def +/Bh {4 npop} def +end +/Lb +{ + 4 npop + 6 1 roll + pop + 4 1 roll + pop pop pop + 0 eq + { + 0 eq + { + (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard + } + { + + /clipForward? true def + + /Tx /pop load def + /Tj /pop load def + + currentdict end clipRenderOff begin begin + } ifelse + } + { + 0 eq + { + save /discardSave exch store + } if + } ifelse +} bind def +/LB +{ + discardSave dup null ne + { + restore + } + { + pop + clipForward? + { + currentdict + end + end + begin + + /clipForward? false ddef + } if + } ifelse +} bind def +/Pb +{ + pop pop + 0 (%AI5_EndPalette) discard +} bind def +/Np +{ + 0 (%AI5_End_NonPrinting--) discard +} bind def +/Ln /pop load def +/Ap +/pop load def +/Ar +{ + 72 exch div + 0 dtransform dup mul exch dup mul add sqrt + dup 1 lt + { + pop 1 + } if + setflat +} def +/Mb +{ + q +} def +/Md +{ +} def +/MB +{ + Q +} def +/nc 3 dict def +nc begin +/setgray +{ + pop +} bind def +/setcmykcolor +{ + 4 npop +} bind def +/setcustomcolor +{ + 2 npop +} bind def +currentdict readonly pop +end +end +setpacking +%%EndResource +%%EndProlog +%%BeginSetup +%%IncludeFont: Univers +Adobe_level2_AI5 /initialize get exec +Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_typography_AI5 /initialize get exec +Adobe_ColorImage_AI6 /initialize get exec +Adobe_Illustrator_AI5 /initialize get exec +[ +39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis +/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute +/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde +/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex +/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls +/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash +/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef +/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash +/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef +/guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe +/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide +/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright +/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand +/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex +/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex +/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla +/hungarumlaut/ogonek/caron +TE +%AI3_BeginEncoding: _Univers Univers +[/_Univers/Univers 0 0 1 TZ +%AI3_EndEncoding AdobeType +%AI5_Begin_NonPrinting +Np +8 Bn +%AI5_BeginGradient: (Black & White) +(Black & White) 0 2 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Green & Blue) +(Green & Blue) 0 2 Bd +[ +< +99999A9A9B9B9B9C9C9D9D9D9E9E9F9F9FA0A0A1A1A1A2A2A3A3A3A4A4A5A5A5A6A6A7A7A7A8A8A9 +A9A9AAAAABABABACACADADADAEAEAFAFAFB0B0B1B1B1B2B2B3B3B3B4B4B5B5B5B6B6B7B7B7B8B8B9 +B9B9BABABBBBBBBCBCBDBDBDBEBEBFBFBFC0C0C1C1C1C2C2C3C3C3C4C4C5C5C5C6C6C7C7C7C8C8C9 +C9C9CACACBCBCBCCCCCDCDCDCECECFCFCFD0D0D1D1D1D2D2D3D3D3D4D4D5D5D5D6D6D7D7D7D8D8D9 +D9D9DADADBDBDBDCDCDDDDDDDEDEDFDFDFE0E0E1E1E1E2E2E3E3E3E4E4E5E5E5E6E6E7E7E7E8E8E9 +E9E9EAEAEBEBEBECECEDEDEDEEEEEFEFEFF0F0F1F1F1F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F9 +F9F9FAFAFBFBFBFCFCFDFDFDFEFEFFFF +> +< +000102020304050506070808090A0B0B0C0D0E0E0F101111121314141516171718191A1A1B1C1D1D +1E1F20202122232324252626272829292A2B2C2C2D2E2F2F303132323334353536373838393A3B3B +3C3D3E3E3F404141424344444546474748494A4A4B4C4D4D4E4F5050515253535455565657585959 +5A5B5C5C5D5E5F5F606162626364656566676868696A6B6B6C6D6E6E6F7071717273747475767777 +78797A7A7B7C7D7D7E7F80808182828384858586878888898A8B8B8C8D8E8E8F9091919293949495 +96979798999A9A9B9C9D9D9E9FA0A0A1A2A3A3A4A5A6A6A7A8A9A9AAABACACADAEAFAFB0B1B2B2B3 +B4B5B5B6B7B8B8B9BABBBBBCBDBEBEBF +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +[ +1 0.75 0 0 1 50 100 %_Bs +0.6 0 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Pink, Yellow, Green) +(Pink, Yellow, Green) 0 3 Bd +[ +< +00000000000000000000000000000000000000010101010101010101010101010101010101010101 +01010101010202020202020202020202020202020202020202020203030303030303030303030303 +03030303030303030404040404040404040404040404040404040404050505050505050505050505 +05050505050505060606060606060606060606060606060606060707070707070707070707070707 +07070707080808080808080808080808080808080809090909090909090909090909090909090A0A +0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C +0C0C0C0C0C0C0C0D0D0D0D0D +> +< +050506060606070708080809090A0A0A0B0B0C0C0D0D0E0E0F0F1010111112121313141415151617 +17181819191A1A1B1C1C1D1D1E1F1F202021222223232425252626272828292A2A2B2C2C2D2D2E2F +2F3031313233333435353637373839393A3B3B3C3D3E3E3F4040414242434445454647474849494A +4B4C4C4D4E4F4F505151525354545556575758595A5A5B5C5C5D5E5F5F6061626363646566666768 +69696A6B6C6C6D6E6F707071727373747576777778797A7B7B7C7D7E7F7F80818283838485868787 +88898A8B8B8C8D8E8F8F9091929394949596979898999A9B9C9D9D9E9FA0A1A2A2A3A4A5A6A7A7A8 +A9AAABACADADAEAFB0B1B2B2 +> +< +CCCCCBCBCBCACACAC9C9C8C8C7C7C6C6C5C5C4C4C3C2C2C1C1C0C0BFBEBEBDBDBCBBBBBAB9B9B8B7 +B7B6B6B5B4B4B3B2B1B1B0AFAFAEADADACABAAAAA9A8A8A7A6A5A5A4A3A2A2A1A0A09F9E9D9C9C9B +9A999998979696959493929291908F8E8E8D8C8B8A8A8988878686858483828181807F7E7D7C7C7B +7A7978777776757473727171706F6E6D6C6B6A6A69686766656463636261605F5E5D5C5B5B5A5958 +5756555453525151504F4E4D4C4B4A49484746464544434241403F3E3D3C3B3A3938383736353433 +3231302F2E2D2C2B2A29282726252423222221201F1E1D1C1B1A191817161514131211100F0E0D0C +0B0A09080706050403020100 +> +0 +1 %_Br +< +737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5B5A59585756555453525150504F4E +4D4C4B4A4949484746454443434241403F3E3E3D3C3B3A3A393837363635343333323130302F2E2D +2D2C2B2A2A29282827262525242323222121201F1F1E1D1D1C1C1B1A1A1918181717161615141413 +1312121111100F0F0E0E0D0D0C0C0C0B0B0A0A090908080807070606060505050404040303030202 +020201010101010000000000 +> +< +00000000000000000000000001010101010101010101010101010101010101010101010102020202 +02020202020202020202020202020202020202020202030303030303030303030303030303030303 +03030303030303030303030303040404040404040404040404040404040404040404040404040404 +04040404040404040404050505050505050505050505050505050505050505050505050505050505 +050505050505050505050505 +> +< +BFBFBFC0C0C0C0C0C0C0C0C0C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C2C2C3C3C3C3C3C3C3C3C3 +C3C4C4C4C4C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C6C6C6C7C7C7C7C7C7 +C7C7C7C7C7C7C8C8C8C8C8C8C8C8C8C8C8C8C8C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9CACACACACACA +CACACACACACACACACACACBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCCCCCCCCCC +> +0 +1 %_Br +[ +0.05 0.7 0 0 1 50 100 %_Bs +0 0.02 0.8 0 1 57 36 %_Bs +0.45 0 0.75 0 1 37 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Purple, Red & Yellow) +(Purple, Red & Yellow) 0 3 Bd +[ +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A +> +< +CCCCCCCDCDCDCDCDCECECECECECFCFCFCFD0D0D0D0D0D1D1D1D1D1D2D2D2D2D2D3D3D3D3D3D4D4D4 +D4D5D5D5D5D5D6D6D6D6D6D7D7D7D7D7D8D8D8D8D8D9D9D9D9DADADADADADBDBDBDBDBDCDCDCDCDC +DDDDDDDDDDDEDEDEDEDFDFDFDFDFE0E0E0E0E0E1E1E1E1E1E2E2E2E2E2E3E3E3E3E4E4E4E4E4E5E5 +E5E5E5E6E6E6E6E6E7E7E7E7E7E8E8E8E8E9E9E9E9E9EAEAEAEAEAEBEBEBEBEBECECECECECEDEDED +EDEEEEEEEEEEEFEFEFEFEFF0F0F0F0F0F1F1F1F1F1F2F2F2F2F3F3F3F3F3F4F4F4F4F4F5F5F5F5F5 +F6F6F6F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFAFAFBFBFBFBFBFCFCFCFCFDFDFDFDFDFEFE +FEFEFEFFFFFF +> +0 +1 %_Br +< +E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBE +BDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A99989796 +9594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B7A797877767574737271706F6E +6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A49484746 +4544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E +1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403020100 +> +< +E5E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9EAEAEAEA +EAEAEAEAEAEBEBEBEBEBEBEBEBEBECECECECECECECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEE +EEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F3F3F3 +F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 +F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFCFC +FCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFF +> +< +00010203040405060708090A0B0C0C0D0E0F10111213141415161718191A1B1C1D1D1E1F20212223 +242525262728292A2B2C2D2D2E2F30313233343535363738393A3B3C3D3D3E3F4041424344454546 +4748494A4B4C4D4E4E4F50515253545556565758595A5B5C5D5E5E5F60616263646566666768696A +6B6C6D6E6E6F70717273747576767778797A7B7C7D7E7F7F80818283848586878788898A8B8C8D8E +8F8F90919293949596979798999A9B9C9D9E9F9FA0A1A2A3A4A5A6A7A7A8A9AAABACADAEAFAFB0B1 +B2B3B4B5B6B7B8B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C8C9CACBCC +> +0 +1 %_Br +[ +0 0.04 1 0 1 50 100 %_Bs +0 1 0.8 0 1 50 50 %_Bs +0.9 0.9 0 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Rainbow) +(Rainbow) 0 6 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +0 +1 %_Br +1 +< +0708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E +2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556 +5758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E +7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6 +A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCE +CFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6 +F7F8F9FAFBFCFDFEFF +> +0 +0 +1 %_Br +1 +< +00000000000000000000000000000000000001010101010101010101010101010101010101010101 +01010101010101010101010101010202020202020202020202020202020202020202020202020202 +02020202020202020202030303030303030303030303030303030303030303030303030303030303 +03030303030304040404040404040404040404040404040404040404040404040404040404040404 +04040505050505050505050505050505050505050505050505050505050505050505050505050606 +06060606060606060606060606060606060606060606060606060606060606060606070707070707 +07070707070707070707070707070707 +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 +1 +0 +1 %_Br +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +1 %_Br +[ +0 1 0 0 1 50 100 %_Bs +1 1 0 0 1 50 80 %_Bs +1 0.0279 0 0 1 50 60 %_Bs +1 0 1 0 1 50 40 %_Bs +0 0 1 0 1 50 20 %_Bs +0 1 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Steel Bar) +(Steel Bar) 0 3 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 70 %_Bs +0 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Orange Radial) +(Yellow & Orange Radial) 1 2 Bd +[ +0 +< +0001010203040506060708090A0B0C0C0D0E0F10111213131415161718191A1B1C1D1D1E1F202122 +232425262728292A2B2B2C2D2E2F303132333435363738393A3B3C3D3E3E3F404142434445464748 +494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60606162636465666768696A6B6C6D6E6F +707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C +> +< +FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9 +F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2 +F2F2F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEDEDEDEDEDEDECECECECECEBEBEBEBEB +EBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E8E8E8E7E7E7E7E7E6E6E6E6E6E5 +> +0 +1 %_Br +[ +0 0 1 0 1 52 19 %_Bs +0 0.55 0.9 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Purple Radial) +(Yellow & Purple Radial) 1 2 Bd +[ +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +< +1415161718191A1B1C1D1E1F1F202122232425262728292A2A2B2C2D2E2F30313233343536363738 +393A3B3C3D3E3F40414142434445464748494A4B4C4D4D4E4F50515253545556575858595A5B5C5D +5E5F60616263646465666768696A6B6C6D6E6F6F707172737475767778797A7B7B7C7D7E7F808182 +83848586868788898A8B8C8D8E8F90919292939495969798999A9B9C9D9D9E9FA0A1A2A3A4A5A6A7 +A8A9A9AAABACADAEAFB0B1B2B3B4B4B5B6B7B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C9CACBCB +CCCDCECFD0D1D2D3D4D5D6D7D7D8D9DADBDCDDDEDFE0E1E2E2E3E4E5E6E7E8E9EAEBECEDEEEEEFF0 +F1F2F3F4F5F6F7F8F9F9FAFBFCFDFEFF +> +< +ABAAAAA9A8A7A7A6A5A5A4A3A3A2A1A1A09F9F9E9D9D9C9B9B9A9999989797969595949393929191 +908F8F8E8D8D8C8B8B8A8989888787868585848383828181807F7F7E7D7D7C7B7B7A797978777776 +7575747373727171706F6F6E6D6D6C6B6B6A6969686767666565646362626160605F5E5E5D5C5C5B +5A5A5958585756565554545352525150504F4E4E4D4C4C4B4A4A4948484746464544444342424140 +403F3E3E3D3C3C3B3A3A3938383736363534343332323130302F2E2E2D2C2C2B2A2A292828272626 +25242423222121201F1F1E1D1D1C1B1B1A1919181717161515141313121111100F0F0E0D0D0C0B0B +0A090908070706050504030302010100 +> +0 +1 %_Br +[ +0 0.08 0.67 0 1 50 14 %_Bs +1 1 0 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_End_NonPrinting-- +%AI5_BeginPalette +0 2 Pb +Pn +Pc +1 g +Pc +0 g +Pc +0 0 0 0 k +Pc +0.75 g +Pc +0.5 g +Pc +0.25 g +Pc +0 g +Pc +Bb +2 (Black & White) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0 0 0 k +Pc +0.5 0 0 0 k +Pc +0.75 0 0 0 k +Pc +1 0 0 0 k +Pc +0.25 0.25 0 0 k +Pc +0.5 0.5 0 0 k +Pc +0.75 0.75 0 0 k +Pc +1 1 0 0 k +Pc +Bb +2 (Pink, Yellow, Green) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0 0 k +Pc +0 0.5 0 0 k +Pc +0 0.75 0 0 k +Pc +0 1 0 0 k +Pc +0 0.25 0.25 0 k +Pc +0 0.5 0.5 0 k +Pc +0 0.75 0.75 0 k +Pc +0 1 1 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Purple Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0 0.25 0 k +Pc +0 0 0.5 0 k +Pc +0 0 0.75 0 k +Pc +0 0 1 0 k +Pc +0.25 0 0.25 0 k +Pc +0.5 0 0.5 0 k +Pc +0.75 0 0.75 0 k +Pc +1 0 1 0 k +Pc +Bb +2 (Rainbow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0 0 k +Pc +0.5 0.25 0 0 k +Pc +0.75 0.375 0 0 k +Pc +1 0.5 0 0 k +Pc +0.125 0.25 0 0 k +Pc +0.25 0.5 0 0 k +Pc +0.375 0.75 0 0 k +Pc +0.5 1 0 0 k +Pc +Bb +2 (Steel Bar) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0.125 0 k +Pc +0 0.5 0.25 0 k +Pc +0 0.75 0.375 0 k +Pc +0 1 0.5 0 k +Pc +0 0.125 0.25 0 k +Pc +0 0.25 0.5 0 k +Pc +0 0.375 0.75 0 k +Pc +0 0.5 1 0 k +Pc +Bb +2 (Purple, Red & Yellow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0 0.25 0 k +Pc +0.25 0 0.5 0 k +Pc +0.375 0 0.75 0 k +Pc +0.5 0 1 0 k +Pc +0.25 0 0.125 0 k +Pc +0.5 0 0.25 0 k +Pc +0.75 0 0.375 0 k +Pc +1 0 0.5 0 k +Pc +Bb +2 (Green & Blue) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0.125 0 k +Pc +0.5 0.25 0.25 0 k +Pc +0.75 0.375 0.375 0 k +Pc +1 0.5 0.5 0 k +Pc +0.25 0.25 0.125 0 k +Pc +0.5 0.5 0.25 0 k +Pc +0.75 0.75 0.375 0 k +Pc +1 1 0.5 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Orange Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0.25 0.125 0 k +Pc +0.25 0.5 0.25 0 k +Pc +0.375 0.75 0.375 0 k +Pc +0.5 1 0.5 0 k +Pc +0.125 0.25 0.25 0 k +Pc +0.25 0.5 0.5 0 k +Pc +0.375 0.75 0.75 0 k +Pc +0.5 1 1 0 k +Pc +0 0 0 0 k +Pc +0.125 0.125 0.25 0 k +Pc +0.25 0.25 0.5 0 k +Pc +0.375 0.375 0.75 0 k +Pc +0.5 0.5 1 0 k +Pc +0.25 0.125 0.25 0 k +Pc +0.5 0.25 0.5 0 k +Pc +0.75 0.375 0.75 0 k +Pc +1 0.5 1 0 k +Pc +PB +%AI5_EndPalette +%%EndSetup +%AI5_BeginLayer +1 1 1 1 0 0 0 79 128 255 Lb +(Layer 1) Ln +0 A +800 Ar +0 J 0 j 1 w 4 M []0 d +%AI3_Note: +0 D +0 XR +-4014 283.5 m +4626 283.5 L +(N) * +453.5 4716 m +453.5 -3924 L +(N) * +85 4716 m +85 -3924 L +(N) * +-4014 765.5 m +4626 765.5 L +(N) * +1 Ap +0 O +1 g +0 R +0 G +228.6667 637.3333 m +228.6667 694.3333 L +86.6667 694.3333 L +86.6667 637.3333 L +228.6667 637.3333 L +b +454.8333 643.8333 m +454.8333 679.8333 L +255.8333 679.8333 L +255.8333 643.8333 L +454.8333 643.8333 L +b +0 Ap +214.1667 671.3333 m +B +87.1667 671.3333 m +228.6667 671.3333 l +B +1 Ap +286.105 487.6601 m +286.105 516.0065 L +192.5617 516.0065 L +192.5617 487.6601 L +286.105 487.6601 L +b +u +u +u +0 Ap +151.7708 636.6458 m +223.2708 605.1458 l +B +0 g +225.8455 605.1261 m +224.5361 606.2522 223.74 607.1081 222.7428 608.1322 c +220.6995 603.5202 l +221.2248 603.5338 223.2969 603.455 225.0105 603.2414 c +226.8449 603.0136 228.46 602.6979 229.4643 602.3956 c +228.5657 602.9365 227.2467 603.9206 225.8455 605.1261 c +f +U +U +U +u +u +0 R +0 G +355.3333 643.2083 m +254.3333 604.7083 l +S +0 O +0 g +252.4878 602.9128 m +254.2108 603.032 255.3786 602.9827 256.8077 602.9549 c +255.02 607.6718 l +254.6558 607.293 253.1265 605.8928 251.7573 604.8403 c +250.2923 603.7133 248.9215 602.8028 247.9946 602.3119 c +249.014 602.5587 250.6439 602.7856 252.4878 602.9128 c +f +U +U +u +u +0 R +0 G +239.3333 558.8333 m +239.4177 522.6094 l +S +0 O +0 g +240.4481 520.2498 m +240.9434 521.9043 241.4009 522.9799 241.9302 524.3077 c +236.8859 524.2959 l +237.1123 523.8216 237.884 521.8971 238.3868 520.245 c +238.9256 518.4768 239.295 516.8732 239.4279 515.8328 c +239.556 516.8738 239.9177 518.4791 240.4481 520.2498 c +f +U +U +0 To +1 0 0 1 91.6667 676.8333 0 Tp +TP +0 Tr +/_Univers 10 Tf +0 Ts +100 Tz +0 Tt +1 TA +%_ 0 XL +36 0 Xb +XB +0 0 5 TC +100 100 200 TW +0 0 0 Ti +0 Ta +0 0 2 2 3 Th +0 Tq +0 0 Tl +0 Tc +0 Tw +(MIB in ASN.1) Tx +(\r) TX +TO +0 To +1 0 0 1 173.6667 676.8333 0 Tp +TP +0 Tr +(file.mib) Tx +(\r) TX +TO +0 To +1 0 0 1 92.6667 660.8333 0 Tp +TP +0 Tr +/_Univers 9 Tf +(sysContact OBJECT) Tx 1 92 Tk +(-TYPE\r) Tx +0 -11 Td +( SYNT) Tx 1 74 Tk +(AX DisplayString\r) Tx +0 -11 Td +( ...) Tx +(\r) TX +TO +163.1667 670.8333 m +F +163.6667 693.8333 m +F +0 R +0 G +163.6667 694.2083 m +163.6667 671.4583 l +S +0 To +1 0 0 1 264.8333 665.8333 0 Tp +TP +0 Tr +0 O +0 g +/_Univers 10 Tf +(Association file) Tx +(\r) TX +TO +0 To +1 0 0 1 264.8333 648.8333 0 Tp +TP +0 Tr +({sysContact, {mymod, sysCFunc, []}}.) Tx +(\r) TX +TO +0 R +0 G +228.3333 516.3333 m +228.3333 501.8333 l +285.8333 501.8333 l +S +0 To +1 0 0 1 195.3333 503.8333 0 Tp +TP +0 Tr +0 O +0 g +(Binary\r) Tx +0 -12 Td +(Representation) Tx +(\r) TX +TO +0 To +1 0 0 1 234.3333 504.3333 0 Tp +TP +0 Tr +(file.bin) Tx +(\r) TX +TO +0 R +0 G +255.8333 661.3333 m +454.8333 661.3333 l +S +352.8333 679.8333 m +352.8333 661.3333 l +S +0 To +1 0 0 1 363.3333 665.8333 0 Tp +TP +0 Tr +0 O +0 g +(file.funcs) Tx +(\r) TX +TO +u +1 Ap +0 R +0 G +239.3333 559.0734 m +258.9022 559.0734 274.7664 568.5919 274.7664 580.3332 c +274.7664 592.0746 258.9022 601.5931 239.3333 601.5931 c +219.7644 601.5931 203.9002 592.0746 203.9002 580.3332 c +203.9002 568.5919 219.7644 559.0734 239.3333 559.0734 c +s +0 To +1 0 0 1 239.3333 582.8994 0 Tp +TP +-9.4434 0 Td +0 Tr +0 O +0 g +1 Ta +(MIB\r) Tx +-12.2217 -12 Td +(Compiler) Tx +(\r) TX +TO +U +LB +%AI5_EndLayer-- +%%PageTrailer +gsave annotatepage grestore showpage +%%Trailer +Adobe_Illustrator_AI5 /terminate get exec +Adobe_ColorImage_AI6 /terminate get exec +Adobe_typography_AI5 /terminate get exec +Adobe_level2_AI5 /terminate get exec +%%EOF diff --git a/lib/snmp/doc/src/snmp-um-1-image-2.gif b/lib/snmp/doc/src/snmp-um-1-image-2.gif Binary files differnew file mode 100644 index 0000000000..3c976e4355 --- /dev/null +++ b/lib/snmp/doc/src/snmp-um-1-image-2.gif diff --git a/lib/snmp/doc/src/snmp-um-1-image-2.ps b/lib/snmp/doc/src/snmp-um-1-image-2.ps new file mode 100644 index 0000000000..38d875eff1 --- /dev/null +++ b/lib/snmp/doc/src/snmp-um-1-image-2.ps @@ -0,0 +1,2866 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Adobe Illustrator(r) 6.0 +%%For: (Anna Fedoriw) (Ericsson Telecom) +%%Title: (StartingTheAgent.eps) +%%CreationDate: (97-05-23) (14.06) +%%BoundingBox: 126 592 437 744 +%%HiResBoundingBox: 126.8422 592.4803 436.5 743.6667 +%%DocumentProcessColors: Black +%%DocumentFonts: Courier +%%+ Univers +%%DocumentSuppliedResources: procset Adobe_level2_AI5 1.0 0 +%%+ procset Adobe_typography_AI5 1.0 0 +%%+ procset Adobe_Illustrator_AI6_vars Adobe_Illustrator_AI6 +%%+ procset Adobe_Illustrator_AI5 1.0 0 +%AI5_FileFormat 2.0 +%AI3_ColorUsage: Black&White +%%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) +%%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 -1 -1 +%%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () +%AI3_TemplateBox: 306 396 306 396 +%AI3_TileBox: 21 -12 588 802 +%AI3_DocumentPreview: Macintosh_ColorPic +%AI5_ArtSize: 595.2756 841.8898 +%AI5_RulerUnits: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 1 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI5_OpenToView: 78 768 2 1146 827 58 1 1 3 40 +%AI5_OpenViewLayers: 7 +%%EndComments +%%BeginProlog +%%BeginResource: procset Adobe_level2_AI5 1.2 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) +%%Version: 1.2 +%%CreationDate: (04/10/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +userdict /Adobe_level2_AI5 23 dict dup begin + put + /packedarray where not + { + userdict begin + /packedarray + { + array astore readonly + } bind def + /setpacking /pop load def + /currentpacking false def + end + 0 + } if + pop + userdict /defaultpacking currentpacking put true setpacking + /initialize + { + Adobe_level2_AI5 begin + } bind def + /terminate + { + currentdict Adobe_level2_AI5 eq + { + end + } if + } bind def + mark + /setcustomcolor where not + { + /findcmykcustomcolor + { + 5 packedarray + } bind def + /setcustomcolor + { + exch aload pop pop + 4 + { + 4 index mul 4 1 roll + } repeat + 5 -1 roll pop + setcmykcolor + } + def + } if + + /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def + userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put + userdict /level2? + systemdict /languagelevel known dup + { + pop systemdict /languagelevel get 2 ge + } if + put +/level2ScreenFreq +{ + begin + 60 + HalftoneType 1 eq + { + pop Frequency + } if + HalftoneType 2 eq + { + pop GrayFrequency + } if + HalftoneType 5 eq + { + pop Default level2ScreenFreq + } if + end +} bind def +userdict /currentScreenFreq + level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put +level2? not + { + /setcmykcolor where not + { + /setcmykcolor + { + exch .11 mul add exch .59 mul add exch .3 mul add + 1 exch sub setgray + } def + } if + /currentcmykcolor where not + { + /currentcmykcolor + { + 0 0 0 1 currentgray sub + } def + } if + /setoverprint where not + { + /setoverprint /pop load def + } if + /selectfont where not + { + /selectfont + { + exch findfont exch + dup type /arraytype eq + { + makefont + } + { + scalefont + } ifelse + setfont + } bind def + } if + /cshow where not + { + /cshow + { + [ + 0 0 5 -1 roll aload pop + ] cvx bind forall + } bind def + } if + } if + cleartomark + /anyColor? + { + add add add 0 ne + } bind def + /testColor + { + gsave + setcmykcolor currentcmykcolor + grestore + } bind def + /testCMYKColorThrough + { + testColor anyColor? + } bind def + userdict /composite? + level2? + { + gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore + add add add 4 eq + } + { + 1 0 0 0 testCMYKColorThrough + 0 1 0 0 testCMYKColorThrough + 0 0 1 0 testCMYKColorThrough + 0 0 0 1 testCMYKColorThrough + and and and + } ifelse + put + composite? not + { + userdict begin + gsave + /cyan? 1 0 0 0 testCMYKColorThrough def + /magenta? 0 1 0 0 testCMYKColorThrough def + /yellow? 0 0 1 0 testCMYKColorThrough def + /black? 0 0 0 1 testCMYKColorThrough def + grestore + /isCMYKSep? cyan? magenta? yellow? black? or or or def + /customColor? isCMYKSep? not def + end + } if + end defaultpacking setpacking +%%EndResource +%%BeginResource: procset Adobe_typography_AI5 1.0 1 +%%Title: (Typography Operators) +%%Version: 1.0 +%%CreationDate:(03/26/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_typography_AI5 54 dict dup begin +put +/initialize +{ + begin + begin + Adobe_typography_AI5 begin + Adobe_typography_AI5 + { + dup xcheck + { + bind + } if + pop pop + } forall + end + end + end + Adobe_typography_AI5 begin +} def +/terminate +{ + currentdict Adobe_typography_AI5 eq + { + end + } if +} def +/modifyEncoding +{ + /_tempEncode exch ddef + /_pntr 0 ddef + { + counttomark -1 roll + dup type dup /marktype eq + { + pop pop exit + } + { + /nametype eq + { + _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll + put + } + { + /_pntr exch ddef + } ifelse + } ifelse + } loop + _tempEncode +} def +/TE +{ + StandardEncoding 256 array copy modifyEncoding + /_nativeEncoding exch def +} def +% +/TZ +{ + dup type /arraytype eq + { + /_wv exch def + } + { + /_wv 0 def + } ifelse + /_useNativeEncoding exch def + pop pop + findfont _wv type /arraytype eq + { + _wv makeblendedfont + } if + dup length 2 add dict + begin + mark exch + { + 1 index /FID ne + { + def + } if + cleartomark mark + } forall + pop + /FontName exch def + counttomark 0 eq + { + 1 _useNativeEncoding eq + { + /Encoding _nativeEncoding def + } if + cleartomark + } + { + /Encoding load 256 array copy + modifyEncoding /Encoding exch def + } ifelse + FontName currentdict + end + definefont pop +} def +/tr +{ + _ax _ay 3 2 roll +} def +/trj +{ + _cx _cy _sp _ax _ay 6 5 roll +} def +/a0 +{ + /Tx + { + dup + currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + } ddef + /Tj + { + dup + currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + } ddef +} def +/a1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/e0 +{ + /Tx + { + tr _psf + } ddef + /Tj + { + trj _pjsf + } ddef +} def +/e1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + tr _psf + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + trj _pjsf + grestore 3 1 roll moveto tr jsp + } ddef +} def +/i0 +{ + /Tx + { + tr sp + } ddef + /Tj + { + trj jsp + } ddef +} def +/i1 +{ + W N +} def +/o0 +{ + /Tx + { + tr sw rmoveto + } ddef + /Tj + { + trj swj rmoveto + } ddef +} def +/r0 +{ + /Tx + { + tr _ctm _pss + } ddef + /Tj + { + trj _ctm _pjss + } ddef +} def +/r1 +{ + /Tx + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/To +{ + pop _ctm currentmatrix pop +} def +/TO +{ + iTe _ctm setmatrix newpath +} def +/Tp +{ + pop _tm astore pop _ctm setmatrix + _tDict begin + /W + { + } def + /h + { + } def +} def +/TP +{ + end + iTm 0 0 moveto +} def +/Tr +{ + _render 3 le + { + currentpoint newpath moveto + } if + dup 8 eq + { + pop 0 + } + { + dup 9 eq + { + pop 1 + } if + } ifelse + dup /_render exch ddef + _renderStart exch get load exec +} def +/iTm +{ + _ctm setmatrix _tm concat 0 _rise translate _hs 1 scale +} def +/Tm +{ + _tm astore pop iTm 0 0 moveto +} def +/Td +{ + _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto +} def +/iTe +{ + _render -1 eq + { + } + { + _renderEnd _render get dup null ne + { + load exec + } + { + pop + } ifelse + } ifelse + /_render -1 ddef +} def +/Ta +{ + pop +} def +/Tf +{ + dup 1000 div /_fScl exch ddef +% + selectfont +} def +/Tl +{ + pop + 0 exch _leading astore pop +} def +/Tt +{ + pop +} def +/TW +{ + 3 npop +} def +/Tw +{ + /_cx exch ddef +} def +/TC +{ + 3 npop +} def +/Tc +{ + /_ax exch ddef +} def +/Ts +{ + /_rise exch ddef + currentpoint + iTm + moveto +} def +/Ti +{ + 3 npop +} def +/Tz +{ + 100 div /_hs exch ddef + iTm +} def +/TA +{ + pop +} def +/Tq +{ + pop +} def +/Th +{ + pop pop pop pop pop +} def +/TX +{ + pop +} def +/Tk +{ + exch pop _fScl mul neg 0 rmoveto +} def +/TK +{ + 2 npop +} def +/T* +{ + _leading aload pop neg Td +} def +/T*- +{ + _leading aload pop Td +} def +/T- +{ + _ax neg 0 rmoveto + _hyphen Tx +} def +/T+ +{ +} def +/TR +{ + _ctm currentmatrix pop + _tm astore pop + iTm 0 0 moveto +} def +/TS +{ + currentfont 3 1 roll + /_Symbol_ _fScl 1000 mul selectfont + + 0 eq + { + Tx + } + { + Tj + } ifelse + setfont +} def +/Xb +{ + pop pop +} def +/Tb /Xb load def +/Xe +{ + pop pop pop pop +} def +/Te /Xe load def +/XB +{ +} def +/TB /XB load def +currentdict readonly pop +end +setpacking +%%EndResource +%%BeginProcSet: Adobe_ColorImage_AI6 1.0 0 +userdict /Adobe_ColorImage_AI6 known not +{ + userdict /Adobe_ColorImage_AI6 17 dict put +} if +userdict /Adobe_ColorImage_AI6 get begin + + /initialize + { + Adobe_ColorImage_AI6 begin + Adobe_ColorImage_AI6 + { + dup type /arraytype eq + { + dup xcheck + { + bind + } if + } if + pop pop + } forall + } def + /terminate { end } def + + currentdict /Adobe_ColorImage_AI6_Vars known not + { + /Adobe_ColorImage_AI6_Vars 14 dict def + } if + + Adobe_ColorImage_AI6_Vars begin + /channelcount 0 def + /sourcecount 0 def + /sourcearray 4 array def + /plateindex -1 def + /XIMask 0 def + /XIBinary 0 def + /XIChannelCount 0 def + /XIBitsPerPixel 0 def + /XIImageHeight 0 def + /XIImageWidth 0 def + /XIImageMatrix null def + /XIBuffer null def + /XIDataProc null def + end + + /WalkRGBString null def + /WalkCMYKString null def + + /StuffRGBIntoGrayString null def + /RGBToGrayImageProc null def + /StuffCMYKIntoGrayString null def + /CMYKToGrayImageProc null def + /ColorImageCompositeEmulator null def + + /SeparateCMYKImageProc null def + + /FourEqual null def + /TestPlateIndex null def + + currentdict /_colorimage known not + { + /colorimage where + { + /colorimage get /_colorimage exch def + } + { + /_colorimage null def + } ifelse + } if + + /_currenttransfer systemdict /currenttransfer get def + + /colorimage null def + /XI null def + + + /WalkRGBString + { + 0 3 index + + dup length 1 sub 0 3 3 -1 roll + { + 3 getinterval { } forall + + 5 index exec + + 3 index + } for + + 5 { pop } repeat + + } def + + + /WalkCMYKString + { + 0 3 index + + dup length 1 sub 0 4 3 -1 roll + { + 4 getinterval { } forall + + 6 index exec + + 3 index + + } for + + 5 { pop } repeat + + } def + + + /StuffRGBIntoGrayString + { + .11 mul exch + + .59 mul add exch + + .3 mul add + + cvi 3 copy put + + pop 1 add + } def + + + /RGBToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 3 idiv string + dup 3 1 roll + + /StuffRGBIntoGrayString load exch + WalkRGBString + end + } def + + + /StuffCMYKIntoGrayString + { + exch .11 mul add + + exch .59 mul add + + exch .3 mul add + + dup 255 gt { pop 255 } if + + 255 exch sub cvi 3 copy put + + pop 1 add + } def + + + /CMYKToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 4 idiv string + dup 3 1 roll + + /StuffCMYKIntoGrayString load exch + WalkCMYKString + end + } def + + + /ColorImageCompositeEmulator + { + pop true eq + { + Adobe_ColorImage_AI6_Vars /sourcecount get 5 add { pop } repeat + } + { + Adobe_ColorImage_AI6_Vars /channelcount get 1 ne + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 3 -1 roll put + + channelcount 3 eq + { + /RGBToGrayImageProc + } + { + /CMYKToGrayImageProc + } ifelse + load + end + } if + image + } ifelse + } def + + + /SeparateCMYKImageProc + { + Adobe_ColorImage_AI6_Vars begin + + sourcecount 0 ne + { + sourcearray plateindex get exec + } + { + sourcearray 0 get exec + + dup length 4 idiv string + + 0 2 index + + plateindex 4 2 index length 1 sub + { + get 255 exch sub + + 3 copy put pop 1 add + + 2 index + } for + + pop pop exch pop + } ifelse + end + } def + + + /FourEqual + { + 4 index ne + { + pop pop pop false + } + { + 4 index ne + { + pop pop false + } + { + 4 index ne + { + pop false + } + { + 4 index eq + } ifelse + } ifelse + } ifelse + } def + + + /TestPlateIndex + { + Adobe_ColorImage_AI6_Vars begin + /plateindex -1 def + + /setcmykcolor where + { + pop + gsave + 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub + grestore + + 1 0 0 0 FourEqual + { + /plateindex 0 def + } + { + 0 1 0 0 FourEqual + { + /plateindex 1 def + } + { + 0 0 1 0 FourEqual + { + /plateindex 2 def + } + { + 0 0 0 1 FourEqual + { + /plateindex 3 def + } + { + 0 0 0 0 FourEqual + { + /plateindex 5 def + } if + } ifelse + } ifelse + } ifelse + } ifelse + pop pop pop pop + } if + plateindex + end + } def + + + /colorimage + { + Adobe_ColorImage_AI6_Vars begin + /channelcount 1 index def + /sourcecount 2 index 1 eq { channelcount 1 sub } { 0 } ifelse def + + 4 sourcecount add index dup + 8 eq exch 1 eq or not + end + + { + /_colorimage load null ne + { + _colorimage + } + { + Adobe_ColorImage_AI6_Vars /sourcecount get + 7 add { pop } repeat + } ifelse + } + { + dup 3 eq + TestPlateIndex + dup -1 eq exch 5 eq or or + { + /_colorimage load null eq + { + ColorImageCompositeEmulator + } + { + dup 1 eq + { + pop pop image + } + { + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + gsave + + 0 _currenttransfer exec + 1 _currenttransfer exec + eq + { 0 _currenttransfer exec 0.5 lt } + { 0 _currenttransfer exec 1 _currenttransfer exec gt } ifelse + + { { pop 0 } } { { pop 1 } } ifelse + systemdict /settransfer get exec + } if + + _colorimage + + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + grestore + } if + } ifelse + } ifelse + } + { + dup 1 eq + { + pop pop + image + } + { + pop pop + + Adobe_ColorImage_AI6_Vars begin + sourcecount -1 0 + { + exch sourcearray 3 1 roll put + } for + + /SeparateCMYKImageProc load + end + + systemdict /image get exec + } ifelse + } ifelse + } ifelse + } def + + /XI + { + Adobe_ColorImage_AI6_Vars begin + gsave + /XIMask exch 0 ne def + /XIBinary exch 0 ne def + pop + pop + /XIChannelCount exch def + /XIBitsPerPixel exch def + /XIImageHeight exch def + /XIImageWidth exch def + pop pop pop pop + /XIImageMatrix exch def + + XIBitsPerPixel 1 eq + { + XIImageWidth 8 div ceiling cvi + } + { + XIImageWidth XIChannelCount mul + } ifelse + /XIBuffer exch string def + + XIBinary + { + /XIDataProc { currentfile XIBuffer readstring pop } def + currentfile 128 string readline pop pop + } + { + /XIDataProc { currentfile XIBuffer readhexstring pop } def + } ifelse + + 0 0 moveto + XIImageMatrix concat + XIImageWidth XIImageHeight scale + + XIMask + { + XIImageWidth XIImageHeight + false + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + /_lp /null ddef + _fc + /_lp /imagemask ddef + + imagemask + } + { + XIImageWidth XIImageHeight + XIBitsPerPixel + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + XIChannelCount 1 eq + { + + gsave + 0 setgray + + image + + grestore + } + { + false + XIChannelCount + colorimage + } ifelse + } ifelse + grestore + end + } def + +end +%%EndProcSet +%%BeginResource: procset Adobe_Illustrator_AI5 1.1 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Full Prolog) +%%Version: 1.1 +%%CreationDate: (3/7/1994) () +%%Copyright: ((C) 1987-1994 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_Illustrator_AI5_vars 81 dict dup begin +put +/_eo false def +/_lp /none def +/_pf +{ +} def +/_ps +{ +} def +/_psf +{ +} def +/_pss +{ +} def +/_pjsf +{ +} def +/_pjss +{ +} def +/_pola 0 def +/_doClip 0 def +/cf currentflat def +/_tm matrix def +/_renderStart +[ +/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 +] def +/_renderEnd +[ +null null null null /i1 /i1 /i1 /i1 +] def +/_render -1 def +/_rise 0 def +/_ax 0 def +/_ay 0 def +/_cx 0 def +/_cy 0 def +/_leading +[ +0 0 +] def +/_ctm matrix def +/_mtx matrix def +/_sp 16#020 def +/_hyphen (-) def +/_fScl 0 def +/_cnt 0 def +/_hs 1 def +/_nativeEncoding 0 def +/_useNativeEncoding 0 def +/_tempEncode 0 def +/_pntr 0 def +/_tDict 2 dict def +/_wv 0 def +/Tx +{ +} def +/Tj +{ +} def +/CRender +{ +} def +/_AI3_savepage +{ +} def +/_gf null def +/_cf 4 array def +/_if null def +/_of false def +/_fc +{ +} def +/_gs null def +/_cs 4 array def +/_is null def +/_os false def +/_sc +{ +} def +/_pd 1 dict def +/_ed 15 dict def +/_pm matrix def +/_fm null def +/_fd null def +/_fdd null def +/_sm null def +/_sd null def +/_sdd null def +/_i null def +/discardSave null def +/buffer 256 string def +/beginString null def +/endString null def +/endStringLength null def +/layerCnt 1 def +/layerCount 1 def +/perCent (%) 0 get def +/perCentSeen? false def +/newBuff null def +/newBuffButFirst null def +/newBuffLast null def +/clipForward? false def +end +userdict /Adobe_Illustrator_AI5 known not { + userdict /Adobe_Illustrator_AI5 91 dict put +} if +userdict /Adobe_Illustrator_AI5 get begin +/initialize +{ + Adobe_Illustrator_AI5 dup begin + Adobe_Illustrator_AI5_vars begin + discardDict + { + bind pop pop + } forall + dup /nc get begin + { + dup xcheck 1 index type /operatortype ne and + { + bind + } if + pop pop + } forall + end + newpath +} def +/terminate +{ + end + end +} def +/_ +null def +/ddef +{ + Adobe_Illustrator_AI5_vars 3 1 roll put +} def +/xput +{ + dup load dup length exch maxlength eq + { + dup dup load dup + length 2 mul dict copy def + } if + load begin + def + end +} def +/npop +{ + { + pop + } repeat +} def +/sw +{ + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add +} def +/swj +{ + dup 4 1 roll + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add + 6 2 roll /_cnt 0 ddef + { + 1 index eq + { + /_cnt _cnt 1 add ddef + } if + } forall + pop + exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop +} def +/ss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put pop + gsave + false charpath currentpoint + 4 index setmatrix + stroke + grestore + moveto + 2 copy rmoveto + } exch cshow + 3 npop +} def +/jss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put + gsave + _sp eq + { + exch 6 index 6 index 6 index 5 -1 roll widthshow + currentpoint + } + { + false charpath currentpoint + 4 index setmatrix stroke + } ifelse + grestore + moveto + 2 copy rmoveto + } exch cshow + 6 npop +} def +/sp +{ + { + 2 npop (0) exch + 2 copy 0 exch put pop + false charpath + 2 copy rmoveto + } exch cshow + 2 npop +} def +/jsp +{ + { + 2 npop + (0) exch 2 copy 0 exch put + _sp eq + { + exch 5 index 5 index 5 index 5 -1 roll widthshow + } + { + false charpath + } ifelse + 2 copy rmoveto + } exch cshow + 5 npop +} def +/pl +{ + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform +} def +/setstrokeadjust where +{ + pop true setstrokeadjust + /c + { + curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll curveto + } def + /V + /v load def + /y + { + 2 copy curveto + } def + /Y + /y load def + /l + { + lineto + } def + /L + /l load def + /m + { + moveto + } def +} +{ + /c + { + pl curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll pl curveto + } def + /V + /v load def + /y + { + pl 2 copy curveto + } def + /Y + /y load def + /l + { + pl lineto + } def + /L + /l load def + /m + { + pl moveto + } def +} ifelse +/d +{ + setdash +} def +/cf +{ +} def +/i +{ + dup 0 eq + { + pop cf + } if + setflat +} def +/j +{ + setlinejoin +} def +/J +{ + setlinecap +} def +/M +{ + setmiterlimit +} def +/w +{ + setlinewidth +} def +/XR +{ + 0 ne + /_eo exch ddef +} def +/H +{ +} def +/h +{ + closepath +} def +/N +{ + _pola 0 eq + { + _doClip 1 eq + { + _eo {eoclip} {clip} ifelse /_doClip 0 ddef + } if + newpath + } + { + /CRender + { + N + } ddef + } ifelse +} def +/n +{ + N +} def +/F +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc + /_doClip 0 ddef + } + { + _pf + } ifelse + } + { + /CRender + { + F + } ddef + } ifelse +} def +/f +{ + closepath + F +} def +/S +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + _ps + } ifelse + } + { + /CRender + { + S + } ddef + } ifelse +} def +/s +{ + closepath + S +} def +/B +{ + _pola 0 eq + { + _doClip 1 eq + gsave F grestore + { + gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + S + } ifelse + } + { + /CRender + { + B + } ddef + } ifelse +} def +/b +{ + closepath + B +} def +/W +{ + /_doClip 1 ddef +} def +/* +{ + count 0 ne + { + dup type /stringtype eq + { + pop + } if + } if + newpath +} def +/u +{ +} def +/U +{ +} def +/q +{ + _pola 0 eq + { + gsave + } if +} def +/Q +{ + _pola 0 eq + { + grestore + } if +} def +/*u +{ + _pola 1 add /_pola exch ddef +} def +/*U +{ + _pola 1 sub /_pola exch ddef + _pola 0 eq + { + CRender + } if +} def +/D +{ + pop +} def +/*w +{ +} def +/*W +{ +} def +/` +{ + /_i save ddef + clipForward? + { + nulldevice + } if + 6 1 roll 4 npop + concat pop + userdict begin + /showpage + { + } def + 0 setgray + 0 setlinecap + 1 setlinewidth + 0 setlinejoin + 10 setmiterlimit + [] 0 setdash + /setstrokeadjust where {pop false setstrokeadjust} if + newpath + 0 setgray + false setoverprint +} def +/~ +{ + end + _i restore +} def +/O +{ + 0 ne + /_of exch ddef + /_lp /none ddef +} def +/R +{ + 0 ne + /_os exch ddef + /_lp /none ddef +} def +/g +{ + /_gf exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _gf setgray + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/G +{ + /_gs exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _gs setgray + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/k +{ + _cf astore pop + /_fc + { + _lp /fill ne + { + _of setoverprint + _cf aload pop setcmykcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/K +{ + _cs astore pop + /_sc + { + _lp /stroke ne + { + _os setoverprint + _cs aload pop setcmykcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/x +{ + /_gf exch ddef + findcmykcustomcolor + /_if exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _if _gf 1 exch sub setcustomcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/X +{ + /_gs exch ddef + findcmykcustomcolor + /_is exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _is _gs 1 exch sub setcustomcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/A +{ + pop +} def +/annotatepage +{ +userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse +} def +/XT { + pop pop +} def +/discard +{ + save /discardSave exch store + discardDict begin + /endString exch store + gt38? + { + 2 add + } if + load + stopped + pop + end + discardSave restore +} bind def +userdict /discardDict 7 dict dup begin +put +/pre38Initialize +{ + /endStringLength endString length store + /newBuff buffer 0 endStringLength getinterval store + /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store + /newBuffLast newBuff endStringLength 1 sub 1 getinterval store +} def +/shiftBuffer +{ + newBuff 0 newBuffButFirst putinterval + newBuffLast 0 + currentfile read not + { + stop + } if + put +} def +0 +{ + pre38Initialize + mark + currentfile newBuff readstring exch pop + { + { + newBuff endString eq + { + cleartomark stop + } if + shiftBuffer + } loop + } + { + stop + } ifelse +} def +1 +{ + pre38Initialize + /beginString exch store + mark + currentfile newBuff readstring exch pop + { + { + newBuff beginString eq + { + /layerCount dup load 1 add store + } + { + newBuff endString eq + { + /layerCount dup load 1 sub store + layerCount 0 eq + { + cleartomark stop + } if + } if + } ifelse + shiftBuffer + } loop + } if +} def +2 +{ + mark + { + currentfile buffer readline not + { + stop + } if + endString eq + { + cleartomark stop + } if + } loop +} def +3 +{ + /beginString exch store + /layerCnt 1 store + mark + { + currentfile buffer readline not + { + stop + } if + dup beginString eq + { + pop /layerCnt dup load 1 add store + } + { + endString eq + { + layerCnt 1 eq + { + cleartomark stop + } + { + /layerCnt dup load 1 sub store + } ifelse + } if + } ifelse + } loop +} def +end +userdict /clipRenderOff 15 dict dup begin +put +{ + /n /N /s /S /f /F /b /B +} +{ + { + _doClip 1 eq + { + /_doClip 0 ddef _eo {eoclip} {clip} ifelse + } if + newpath + } def +} forall +/Tr /pop load def +/Bb {} def +/BB /pop load def +/Bg {12 npop} def +/Bm {6 npop} def +/Bc /Bm load def +/Bh {4 npop} def +end +/Lb +{ + 4 npop + 6 1 roll + pop + 4 1 roll + pop pop pop + 0 eq + { + 0 eq + { + (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard + } + { + + /clipForward? true def + + /Tx /pop load def + /Tj /pop load def + + currentdict end clipRenderOff begin begin + } ifelse + } + { + 0 eq + { + save /discardSave exch store + } if + } ifelse +} bind def +/LB +{ + discardSave dup null ne + { + restore + } + { + pop + clipForward? + { + currentdict + end + end + begin + + /clipForward? false ddef + } if + } ifelse +} bind def +/Pb +{ + pop pop + 0 (%AI5_EndPalette) discard +} bind def +/Np +{ + 0 (%AI5_End_NonPrinting--) discard +} bind def +/Ln /pop load def +/Ap +/pop load def +/Ar +{ + 72 exch div + 0 dtransform dup mul exch dup mul add sqrt + dup 1 lt + { + pop 1 + } if + setflat +} def +/Mb +{ + q +} def +/Md +{ +} def +/MB +{ + Q +} def +/nc 3 dict def +nc begin +/setgray +{ + pop +} bind def +/setcmykcolor +{ + 4 npop +} bind def +/setcustomcolor +{ + 2 npop +} bind def +currentdict readonly pop +end +end +setpacking +%%EndResource +%%EndProlog +%%BeginSetup +%%IncludeFont: Courier +%%IncludeFont: Univers +Adobe_level2_AI5 /initialize get exec +Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_typography_AI5 /initialize get exec +Adobe_ColorImage_AI6 /initialize get exec +Adobe_Illustrator_AI5 /initialize get exec +[ +39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis +/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute +/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde +/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex +/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls +/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash +/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef +/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash +/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef +/guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe +/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide +/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright +/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand +/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex +/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex +/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla +/hungarumlaut/ogonek/caron +TE +%AI3_BeginEncoding: _Courier Courier +[/_Courier/Courier 0 0 1 TZ +%AI3_EndEncoding TrueType +%AI3_BeginEncoding: _Univers Univers +[/_Univers/Univers 0 0 1 TZ +%AI3_EndEncoding AdobeType +%AI5_Begin_NonPrinting +Np +8 Bn +%AI5_BeginGradient: (Black & White) +(Black & White) 0 2 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Green & Blue) +(Green & Blue) 0 2 Bd +[ +< +99999A9A9B9B9B9C9C9D9D9D9E9E9F9F9FA0A0A1A1A1A2A2A3A3A3A4A4A5A5A5A6A6A7A7A7A8A8A9 +A9A9AAAAABABABACACADADADAEAEAFAFAFB0B0B1B1B1B2B2B3B3B3B4B4B5B5B5B6B6B7B7B7B8B8B9 +B9B9BABABBBBBBBCBCBDBDBDBEBEBFBFBFC0C0C1C1C1C2C2C3C3C3C4C4C5C5C5C6C6C7C7C7C8C8C9 +C9C9CACACBCBCBCCCCCDCDCDCECECFCFCFD0D0D1D1D1D2D2D3D3D3D4D4D5D5D5D6D6D7D7D7D8D8D9 +D9D9DADADBDBDBDCDCDDDDDDDEDEDFDFDFE0E0E1E1E1E2E2E3E3E3E4E4E5E5E5E6E6E7E7E7E8E8E9 +E9E9EAEAEBEBEBECECEDEDEDEEEEEFEFEFF0F0F1F1F1F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F9 +F9F9FAFAFBFBFBFCFCFDFDFDFEFEFFFF +> +< +000102020304050506070808090A0B0B0C0D0E0E0F101111121314141516171718191A1A1B1C1D1D +1E1F20202122232324252626272829292A2B2C2C2D2E2F2F303132323334353536373838393A3B3B +3C3D3E3E3F404141424344444546474748494A4A4B4C4D4D4E4F5050515253535455565657585959 +5A5B5C5C5D5E5F5F606162626364656566676868696A6B6B6C6D6E6E6F7071717273747475767777 +78797A7A7B7C7D7D7E7F80808182828384858586878888898A8B8B8C8D8E8E8F9091919293949495 +96979798999A9A9B9C9D9D9E9FA0A0A1A2A3A3A4A5A6A6A7A8A9A9AAABACACADAEAFAFB0B1B2B2B3 +B4B5B5B6B7B8B8B9BABBBBBCBDBEBEBF +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +[ +1 0.75 0 0 1 50 100 %_Bs +0.6 0 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Pink, Yellow, Green) +(Pink, Yellow, Green) 0 3 Bd +[ +< +00000000000000000000000000000000000000010101010101010101010101010101010101010101 +01010101010202020202020202020202020202020202020202020203030303030303030303030303 +03030303030303030404040404040404040404040404040404040404050505050505050505050505 +05050505050505060606060606060606060606060606060606060707070707070707070707070707 +07070707080808080808080808080808080808080809090909090909090909090909090909090A0A +0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C +0C0C0C0C0C0C0C0D0D0D0D0D +> +< +050506060606070708080809090A0A0A0B0B0C0C0D0D0E0E0F0F1010111112121313141415151617 +17181819191A1A1B1C1C1D1D1E1F1F202021222223232425252626272828292A2A2B2C2C2D2D2E2F +2F3031313233333435353637373839393A3B3B3C3D3E3E3F4040414242434445454647474849494A +4B4C4C4D4E4F4F505151525354545556575758595A5A5B5C5C5D5E5F5F6061626363646566666768 +69696A6B6C6C6D6E6F707071727373747576777778797A7B7B7C7D7E7F7F80818283838485868787 +88898A8B8B8C8D8E8F8F9091929394949596979898999A9B9C9D9D9E9FA0A1A2A2A3A4A5A6A7A7A8 +A9AAABACADADAEAFB0B1B2B2 +> +< +CCCCCBCBCBCACACAC9C9C8C8C7C7C6C6C5C5C4C4C3C2C2C1C1C0C0BFBEBEBDBDBCBBBBBAB9B9B8B7 +B7B6B6B5B4B4B3B2B1B1B0AFAFAEADADACABAAAAA9A8A8A7A6A5A5A4A3A2A2A1A0A09F9E9D9C9C9B +9A999998979696959493929291908F8E8E8D8C8B8A8A8988878686858483828181807F7E7D7C7C7B +7A7978777776757473727171706F6E6D6C6B6A6A69686766656463636261605F5E5D5C5B5B5A5958 +5756555453525151504F4E4D4C4B4A49484746464544434241403F3E3D3C3B3A3938383736353433 +3231302F2E2D2C2B2A29282726252423222221201F1E1D1C1B1A191817161514131211100F0E0D0C +0B0A09080706050403020100 +> +0 +1 %_Br +< +737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5B5A59585756555453525150504F4E +4D4C4B4A4949484746454443434241403F3E3E3D3C3B3A3A393837363635343333323130302F2E2D +2D2C2B2A2A29282827262525242323222121201F1F1E1D1D1C1C1B1A1A1918181717161615141413 +1312121111100F0F0E0E0D0D0C0C0C0B0B0A0A090908080807070606060505050404040303030202 +020201010101010000000000 +> +< +00000000000000000000000001010101010101010101010101010101010101010101010102020202 +02020202020202020202020202020202020202020202030303030303030303030303030303030303 +03030303030303030303030303040404040404040404040404040404040404040404040404040404 +04040404040404040404050505050505050505050505050505050505050505050505050505050505 +050505050505050505050505 +> +< +BFBFBFC0C0C0C0C0C0C0C0C0C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C2C2C3C3C3C3C3C3C3C3C3 +C3C4C4C4C4C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C6C6C6C7C7C7C7C7C7 +C7C7C7C7C7C7C8C8C8C8C8C8C8C8C8C8C8C8C8C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9CACACACACACA +CACACACACACACACACACACBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCCCCCCCCCC +> +0 +1 %_Br +[ +0.05 0.7 0 0 1 50 100 %_Bs +0 0.02 0.8 0 1 57 36 %_Bs +0.45 0 0.75 0 1 37 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Purple, Red & Yellow) +(Purple, Red & Yellow) 0 3 Bd +[ +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A +> +< +CCCCCCCDCDCDCDCDCECECECECECFCFCFCFD0D0D0D0D0D1D1D1D1D1D2D2D2D2D2D3D3D3D3D3D4D4D4 +D4D5D5D5D5D5D6D6D6D6D6D7D7D7D7D7D8D8D8D8D8D9D9D9D9DADADADADADBDBDBDBDBDCDCDCDCDC +DDDDDDDDDDDEDEDEDEDFDFDFDFDFE0E0E0E0E0E1E1E1E1E1E2E2E2E2E2E3E3E3E3E4E4E4E4E4E5E5 +E5E5E5E6E6E6E6E6E7E7E7E7E7E8E8E8E8E9E9E9E9E9EAEAEAEAEAEBEBEBEBEBECECECECECEDEDED +EDEEEEEEEEEEEFEFEFEFEFF0F0F0F0F0F1F1F1F1F1F2F2F2F2F3F3F3F3F3F4F4F4F4F4F5F5F5F5F5 +F6F6F6F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFAFAFBFBFBFBFBFCFCFCFCFDFDFDFDFDFEFE +FEFEFEFFFFFF +> +0 +1 %_Br +< +E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBE +BDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A99989796 +9594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B7A797877767574737271706F6E +6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A49484746 +4544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E +1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403020100 +> +< +E5E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9EAEAEAEA +EAEAEAEAEAEBEBEBEBEBEBEBEBEBECECECECECECECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEE +EEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F3F3F3 +F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 +F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFCFC +FCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFF +> +< +00010203040405060708090A0B0C0C0D0E0F10111213141415161718191A1B1C1D1D1E1F20212223 +242525262728292A2B2C2D2D2E2F30313233343535363738393A3B3C3D3D3E3F4041424344454546 +4748494A4B4C4D4E4E4F50515253545556565758595A5B5C5D5E5E5F60616263646566666768696A +6B6C6D6E6E6F70717273747576767778797A7B7C7D7E7F7F80818283848586878788898A8B8C8D8E +8F8F90919293949596979798999A9B9C9D9E9F9FA0A1A2A3A4A5A6A7A7A8A9AAABACADAEAFAFB0B1 +B2B3B4B5B6B7B8B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C8C9CACBCC +> +0 +1 %_Br +[ +0 0.04 1 0 1 50 100 %_Bs +0 1 0.8 0 1 50 50 %_Bs +0.9 0.9 0 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Rainbow) +(Rainbow) 0 6 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +0 +1 %_Br +1 +< +0708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E +2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556 +5758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E +7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6 +A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCE +CFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6 +F7F8F9FAFBFCFDFEFF +> +0 +0 +1 %_Br +1 +< +00000000000000000000000000000000000001010101010101010101010101010101010101010101 +01010101010101010101010101010202020202020202020202020202020202020202020202020202 +02020202020202020202030303030303030303030303030303030303030303030303030303030303 +03030303030304040404040404040404040404040404040404040404040404040404040404040404 +04040505050505050505050505050505050505050505050505050505050505050505050505050606 +06060606060606060606060606060606060606060606060606060606060606060606070707070707 +07070707070707070707070707070707 +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 +1 +0 +1 %_Br +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +1 %_Br +[ +0 1 0 0 1 50 100 %_Bs +1 1 0 0 1 50 80 %_Bs +1 0.0279 0 0 1 50 60 %_Bs +1 0 1 0 1 50 40 %_Bs +0 0 1 0 1 50 20 %_Bs +0 1 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Steel Bar) +(Steel Bar) 0 3 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 70 %_Bs +0 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Orange Radial) +(Yellow & Orange Radial) 1 2 Bd +[ +0 +< +0001010203040506060708090A0B0C0C0D0E0F10111213131415161718191A1B1C1D1D1E1F202122 +232425262728292A2B2B2C2D2E2F303132333435363738393A3B3C3D3E3E3F404142434445464748 +494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60606162636465666768696A6B6C6D6E6F +707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C +> +< +FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9 +F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2 +F2F2F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEDEDEDEDEDEDECECECECECEBEBEBEBEB +EBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E8E8E8E7E7E7E7E7E6E6E6E6E6E5 +> +0 +1 %_Br +[ +0 0 1 0 1 52 19 %_Bs +0 0.55 0.9 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Purple Radial) +(Yellow & Purple Radial) 1 2 Bd +[ +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +< +1415161718191A1B1C1D1E1F1F202122232425262728292A2A2B2C2D2E2F30313233343536363738 +393A3B3C3D3E3F40414142434445464748494A4B4C4D4D4E4F50515253545556575858595A5B5C5D +5E5F60616263646465666768696A6B6C6D6E6F6F707172737475767778797A7B7B7C7D7E7F808182 +83848586868788898A8B8C8D8E8F90919292939495969798999A9B9C9D9D9E9FA0A1A2A3A4A5A6A7 +A8A9A9AAABACADAEAFB0B1B2B3B4B4B5B6B7B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C9CACBCB +CCCDCECFD0D1D2D3D4D5D6D7D7D8D9DADBDCDDDEDFE0E1E2E2E3E4E5E6E7E8E9EAEBECEDEEEEEFF0 +F1F2F3F4F5F6F7F8F9F9FAFBFCFDFEFF +> +< +ABAAAAA9A8A7A7A6A5A5A4A3A3A2A1A1A09F9F9E9D9D9C9B9B9A9999989797969595949393929191 +908F8F8E8D8D8C8B8B8A8989888787868585848383828181807F7F7E7D7D7C7B7B7A797978777776 +7575747373727171706F6F6E6D6D6C6B6B6A6969686767666565646362626160605F5E5E5D5C5C5B +5A5A5958585756565554545352525150504F4E4E4D4C4C4B4A4A4948484746464544444342424140 +403F3E3E3D3C3C3B3A3A3938383736363534343332323130302F2E2E2D2C2C2B2A2A292828272626 +25242423222121201F1F1E1D1D1C1B1B1A1919181717161515141313121111100F0F0E0D0D0C0B0B +0A090908070706050504030302010100 +> +0 +1 %_Br +[ +0 0.08 0.67 0 1 50 14 %_Bs +1 1 0 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_End_NonPrinting-- +%AI5_BeginPalette +0 0 Pb +Pn +Pc +1 g +Pc +0 g +Pc +0 0 0 0 k +Pc +0.75 g +Pc +0.5 g +Pc +0.25 g +Pc +0 g +Pc +Bb +2 (Black & White) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0 0 0 k +Pc +0.5 0 0 0 k +Pc +0.75 0 0 0 k +Pc +1 0 0 0 k +Pc +0.25 0.25 0 0 k +Pc +0.5 0.5 0 0 k +Pc +0.75 0.75 0 0 k +Pc +1 1 0 0 k +Pc +Bb +2 (Pink, Yellow, Green) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0 0 k +Pc +0 0.5 0 0 k +Pc +0 0.75 0 0 k +Pc +0 1 0 0 k +Pc +0 0.25 0.25 0 k +Pc +0 0.5 0.5 0 k +Pc +0 0.75 0.75 0 k +Pc +0 1 1 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Purple Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0 0.25 0 k +Pc +0 0 0.5 0 k +Pc +0 0 0.75 0 k +Pc +0 0 1 0 k +Pc +0.25 0 0.25 0 k +Pc +0.5 0 0.5 0 k +Pc +0.75 0 0.75 0 k +Pc +1 0 1 0 k +Pc +Bb +2 (Rainbow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0 0 k +Pc +0.5 0.25 0 0 k +Pc +0.75 0.375 0 0 k +Pc +1 0.5 0 0 k +Pc +0.125 0.25 0 0 k +Pc +0.25 0.5 0 0 k +Pc +0.375 0.75 0 0 k +Pc +0.5 1 0 0 k +Pc +Bb +2 (Steel Bar) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0.125 0 k +Pc +0 0.5 0.25 0 k +Pc +0 0.75 0.375 0 k +Pc +0 1 0.5 0 k +Pc +0 0.125 0.25 0 k +Pc +0 0.25 0.5 0 k +Pc +0 0.375 0.75 0 k +Pc +0 0.5 1 0 k +Pc +Bb +2 (Purple, Red & Yellow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0 0.25 0 k +Pc +0.25 0 0.5 0 k +Pc +0.375 0 0.75 0 k +Pc +0.5 0 1 0 k +Pc +0.25 0 0.125 0 k +Pc +0.5 0 0.25 0 k +Pc +0.75 0 0.375 0 k +Pc +1 0 0.5 0 k +Pc +Bb +2 (Green & Blue) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0.125 0 k +Pc +0.5 0.25 0.25 0 k +Pc +0.75 0.375 0.375 0 k +Pc +1 0.5 0.5 0 k +Pc +0.25 0.25 0.125 0 k +Pc +0.5 0.5 0.25 0 k +Pc +0.75 0.75 0.375 0 k +Pc +1 1 0.5 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Orange Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0.25 0.125 0 k +Pc +0.25 0.5 0.25 0 k +Pc +0.375 0.75 0.375 0 k +Pc +0.5 1 0.5 0 k +Pc +0.125 0.25 0.25 0 k +Pc +0.25 0.5 0.5 0 k +Pc +0.375 0.75 0.75 0 k +Pc +0.5 1 1 0 k +Pc +0 0 0 0 k +Pc +0.125 0.125 0.25 0 k +Pc +0.25 0.25 0.5 0 k +Pc +0.375 0.375 0.75 0 k +Pc +0.5 0.5 1 0 k +Pc +0.25 0.125 0.25 0 k +Pc +0.5 0.25 0.5 0 k +Pc +0.75 0.375 0.75 0 k +Pc +1 0.5 1 0 k +Pc +PB +%AI5_EndPalette +%%EndSetup +%AI5_BeginLayer +1 1 1 1 0 0 0 79 128 255 Lb +(Layer 1) Ln +0 A +800 Ar +0 J 0 j 1 w 4 M []0 d +%AI3_Note: +0 D +0 XR +-4014 283.5 m +4626 283.5 L +(N) * +453.5 4716 m +453.5 -3924 L +(N) * +85 4716 m +85 -3924 L +(N) * +-4014 765.5 m +4626 765.5 L +(N) * +1 Ap +0 O +1 g +0 R +0 G +220.8907 672 m +220.8907 703 L +127.6667 703 L +127.3474 672 L +220.8907 672 L +b +0 Ap +163.119 702.4773 m +163.119 687.9773 l +220.619 687.9773 l +S +0 To +1 0 0 1 130.119 689.9773 0 Tp +TP +0 Tr +0 O +0 g +/_Univers 10 Tf +0 Ts +100 Tz +0 Tt +1 TA +%_ 0 XL +36 0 Xb +XB +0 0 5 TC +100 100 200 TW +0 0 0 Ti +0 Ta +0 0 2 2 3 Th +0 Tq +0 0 Tl +0 Tc +0 Tw +(Binary\r) Tx +0 -12 Td +(Representation) Tx +(\r) TX +TO +0 To +1 0 0 1 169.119 690.4773 0 Tp +TP +0 Tr +(file.bin) Tx +(\r) TX +TO +1 Ap +1 g +0 R +0 G +436 672 m +436 743.1667 L +237 743.1667 L +237 672 L +436 672 L +b +0 To +1 0 0 1 246 730.5 0 Tp +TP +0 Tr +0 g +(Instrumentation) Tx +(\r) TX +TO +0 To +1 0 0 1 246 713.5 0 Tp +TP +0 Tr +/_Courier 10 Tf +(sysCFunc\(get, ...\) ->) Tx +(\r) TX +0 -12 Td +( <code>;) Tx +(\r) TX +0 -12 Td +(sysCFunc\(set, ...\) ->) Tx +(\r) TX +0 -12 Td +( <code>.) Tx +(\r) TX +TO +0 Ap +0 R +0 G +237 726 m +436 726 l +S +334 743 m +334 726 l +S +0 To +1 0 0 1 344.5 730.5 0 Tp +TP +0 Tr +0 O +0 g +/_Univers 10 Tf +(mymod.beam) Tx +(\r) TX +TO +u +u +u +u +1 g +0 R +0 G +170 672 m +248.8065 637.7501 l +B +0 g +251.3813 637.7486 m +250.0639 638.8655 249.2617 639.7157 248.2574 640.7327 c +246.2468 636.1064 l +246.772 636.1237 248.8445 636.0596 250.5596 635.8582 c +252.3955 635.6433 254.0128 635.339 255.0193 635.0439 c +254.1168 635.5784 252.791 636.5532 251.3813 637.7486 c +f +U +U +U +U +u +u +u +0 R +0 G +368.3333 672 m +289.672 637.3964 l +S +0 O +0 g +287.9227 635.5072 m +289.637 635.716 290.8059 635.7276 292.2345 635.7744 c +290.2033 640.3917 l +289.8594 639.9944 288.4051 638.5164 287.0927 637.394 c +285.6884 636.192 284.3669 635.2113 283.4669 634.6728 c +284.472 634.9724 286.0879 635.2839 287.9227 635.5072 c +f +U +U +U +u +1 Ap +0 R +0 G +268 592.9803 m +287.5689 592.9803 303.4331 602.4988 303.4331 614.2401 c +303.4331 625.9815 287.5689 635.5 268 635.5 c +248.4311 635.5 232.5669 625.9815 232.5669 614.2401 c +232.5669 602.4988 248.4311 592.9803 268 592.9803 c +s +0 To +1 0 0 1 268 610.8063 0 Tp +TP +-14.1614 0 Td +0 Tr +0 O +0 g +1 Ta +(Agent) Tx +(\r) TX +TO +U +LB +%AI5_EndLayer-- +%%PageTrailer +gsave annotatepage grestore showpage +%%Trailer +Adobe_Illustrator_AI5 /terminate get exec +Adobe_ColorImage_AI6 /terminate get exec +Adobe_typography_AI5 /terminate get exec +Adobe_level2_AI5 /terminate get exec +%%EOF diff --git a/lib/snmp/doc/src/snmp-um-1-image-3.gif b/lib/snmp/doc/src/snmp-um-1-image-3.gif Binary files differnew file mode 100644 index 0000000000..47f94bcf06 --- /dev/null +++ b/lib/snmp/doc/src/snmp-um-1-image-3.gif diff --git a/lib/snmp/doc/src/snmp-um-1-image-3.ps b/lib/snmp/doc/src/snmp-um-1-image-3.ps new file mode 100644 index 0000000000..6c63c88f87 --- /dev/null +++ b/lib/snmp/doc/src/snmp-um-1-image-3.ps @@ -0,0 +1,3400 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Adobe Illustrator(r) 6.0 +%%For: (Anna Fedoriw) (Ericsson Telecom) +%%Title: (Architecture.eps) +%%CreationDate: (97-05-23) (14.03) +%%BoundingBox: 93 465 440 765 +%%HiResBoundingBox: 93.3333 465.1667 439.8333 764.3677 +%%DocumentProcessColors: Black +%%DocumentFonts: Univers +%%DocumentSuppliedResources: procset Adobe_level2_AI5 1.0 0 +%%+ procset Adobe_typography_AI5 1.0 0 +%%+ procset Adobe_Illustrator_AI6_vars Adobe_Illustrator_AI6 +%%+ procset Adobe_Illustrator_AI5 1.0 0 +%AI5_FileFormat 2.0 +%AI3_ColorUsage: Black&White +%%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) +%%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 -1 -1 +%%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () +%AI3_TemplateBox: 306 396 306 396 +%AI3_TileBox: 21 -12 588 802 +%AI3_DocumentPreview: Macintosh_ColorPic +%AI5_ArtSize: 595.2756 841.8898 +%AI5_RulerUnits: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 1 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI5_OpenToView: 194 764 3 1146 827 58 1 1 3 40 +%AI5_OpenViewLayers: 7 +%%EndComments +%%BeginProlog +%%BeginResource: procset Adobe_level2_AI5 1.2 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) +%%Version: 1.2 +%%CreationDate: (04/10/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +userdict /Adobe_level2_AI5 23 dict dup begin + put + /packedarray where not + { + userdict begin + /packedarray + { + array astore readonly + } bind def + /setpacking /pop load def + /currentpacking false def + end + 0 + } if + pop + userdict /defaultpacking currentpacking put true setpacking + /initialize + { + Adobe_level2_AI5 begin + } bind def + /terminate + { + currentdict Adobe_level2_AI5 eq + { + end + } if + } bind def + mark + /setcustomcolor where not + { + /findcmykcustomcolor + { + 5 packedarray + } bind def + /setcustomcolor + { + exch aload pop pop + 4 + { + 4 index mul 4 1 roll + } repeat + 5 -1 roll pop + setcmykcolor + } + def + } if + + /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def + userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put + userdict /level2? + systemdict /languagelevel known dup + { + pop systemdict /languagelevel get 2 ge + } if + put +/level2ScreenFreq +{ + begin + 60 + HalftoneType 1 eq + { + pop Frequency + } if + HalftoneType 2 eq + { + pop GrayFrequency + } if + HalftoneType 5 eq + { + pop Default level2ScreenFreq + } if + end +} bind def +userdict /currentScreenFreq + level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put +level2? not + { + /setcmykcolor where not + { + /setcmykcolor + { + exch .11 mul add exch .59 mul add exch .3 mul add + 1 exch sub setgray + } def + } if + /currentcmykcolor where not + { + /currentcmykcolor + { + 0 0 0 1 currentgray sub + } def + } if + /setoverprint where not + { + /setoverprint /pop load def + } if + /selectfont where not + { + /selectfont + { + exch findfont exch + dup type /arraytype eq + { + makefont + } + { + scalefont + } ifelse + setfont + } bind def + } if + /cshow where not + { + /cshow + { + [ + 0 0 5 -1 roll aload pop + ] cvx bind forall + } bind def + } if + } if + cleartomark + /anyColor? + { + add add add 0 ne + } bind def + /testColor + { + gsave + setcmykcolor currentcmykcolor + grestore + } bind def + /testCMYKColorThrough + { + testColor anyColor? + } bind def + userdict /composite? + level2? + { + gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore + add add add 4 eq + } + { + 1 0 0 0 testCMYKColorThrough + 0 1 0 0 testCMYKColorThrough + 0 0 1 0 testCMYKColorThrough + 0 0 0 1 testCMYKColorThrough + and and and + } ifelse + put + composite? not + { + userdict begin + gsave + /cyan? 1 0 0 0 testCMYKColorThrough def + /magenta? 0 1 0 0 testCMYKColorThrough def + /yellow? 0 0 1 0 testCMYKColorThrough def + /black? 0 0 0 1 testCMYKColorThrough def + grestore + /isCMYKSep? cyan? magenta? yellow? black? or or or def + /customColor? isCMYKSep? not def + end + } if + end defaultpacking setpacking +%%EndResource +%%BeginResource: procset Adobe_typography_AI5 1.0 1 +%%Title: (Typography Operators) +%%Version: 1.0 +%%CreationDate:(03/26/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_typography_AI5 54 dict dup begin +put +/initialize +{ + begin + begin + Adobe_typography_AI5 begin + Adobe_typography_AI5 + { + dup xcheck + { + bind + } if + pop pop + } forall + end + end + end + Adobe_typography_AI5 begin +} def +/terminate +{ + currentdict Adobe_typography_AI5 eq + { + end + } if +} def +/modifyEncoding +{ + /_tempEncode exch ddef + /_pntr 0 ddef + { + counttomark -1 roll + dup type dup /marktype eq + { + pop pop exit + } + { + /nametype eq + { + _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll + put + } + { + /_pntr exch ddef + } ifelse + } ifelse + } loop + _tempEncode +} def +/TE +{ + StandardEncoding 256 array copy modifyEncoding + /_nativeEncoding exch def +} def +% +/TZ +{ + dup type /arraytype eq + { + /_wv exch def + } + { + /_wv 0 def + } ifelse + /_useNativeEncoding exch def + pop pop + findfont _wv type /arraytype eq + { + _wv makeblendedfont + } if + dup length 2 add dict + begin + mark exch + { + 1 index /FID ne + { + def + } if + cleartomark mark + } forall + pop + /FontName exch def + counttomark 0 eq + { + 1 _useNativeEncoding eq + { + /Encoding _nativeEncoding def + } if + cleartomark + } + { + /Encoding load 256 array copy + modifyEncoding /Encoding exch def + } ifelse + FontName currentdict + end + definefont pop +} def +/tr +{ + _ax _ay 3 2 roll +} def +/trj +{ + _cx _cy _sp _ax _ay 6 5 roll +} def +/a0 +{ + /Tx + { + dup + currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + } ddef + /Tj + { + dup + currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + } ddef +} def +/a1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/e0 +{ + /Tx + { + tr _psf + } ddef + /Tj + { + trj _pjsf + } ddef +} def +/e1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + tr _psf + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + trj _pjsf + grestore 3 1 roll moveto tr jsp + } ddef +} def +/i0 +{ + /Tx + { + tr sp + } ddef + /Tj + { + trj jsp + } ddef +} def +/i1 +{ + W N +} def +/o0 +{ + /Tx + { + tr sw rmoveto + } ddef + /Tj + { + trj swj rmoveto + } ddef +} def +/r0 +{ + /Tx + { + tr _ctm _pss + } ddef + /Tj + { + trj _ctm _pjss + } ddef +} def +/r1 +{ + /Tx + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/To +{ + pop _ctm currentmatrix pop +} def +/TO +{ + iTe _ctm setmatrix newpath +} def +/Tp +{ + pop _tm astore pop _ctm setmatrix + _tDict begin + /W + { + } def + /h + { + } def +} def +/TP +{ + end + iTm 0 0 moveto +} def +/Tr +{ + _render 3 le + { + currentpoint newpath moveto + } if + dup 8 eq + { + pop 0 + } + { + dup 9 eq + { + pop 1 + } if + } ifelse + dup /_render exch ddef + _renderStart exch get load exec +} def +/iTm +{ + _ctm setmatrix _tm concat 0 _rise translate _hs 1 scale +} def +/Tm +{ + _tm astore pop iTm 0 0 moveto +} def +/Td +{ + _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto +} def +/iTe +{ + _render -1 eq + { + } + { + _renderEnd _render get dup null ne + { + load exec + } + { + pop + } ifelse + } ifelse + /_render -1 ddef +} def +/Ta +{ + pop +} def +/Tf +{ + dup 1000 div /_fScl exch ddef +% + selectfont +} def +/Tl +{ + pop + 0 exch _leading astore pop +} def +/Tt +{ + pop +} def +/TW +{ + 3 npop +} def +/Tw +{ + /_cx exch ddef +} def +/TC +{ + 3 npop +} def +/Tc +{ + /_ax exch ddef +} def +/Ts +{ + /_rise exch ddef + currentpoint + iTm + moveto +} def +/Ti +{ + 3 npop +} def +/Tz +{ + 100 div /_hs exch ddef + iTm +} def +/TA +{ + pop +} def +/Tq +{ + pop +} def +/Th +{ + pop pop pop pop pop +} def +/TX +{ + pop +} def +/Tk +{ + exch pop _fScl mul neg 0 rmoveto +} def +/TK +{ + 2 npop +} def +/T* +{ + _leading aload pop neg Td +} def +/T*- +{ + _leading aload pop Td +} def +/T- +{ + _ax neg 0 rmoveto + _hyphen Tx +} def +/T+ +{ +} def +/TR +{ + _ctm currentmatrix pop + _tm astore pop + iTm 0 0 moveto +} def +/TS +{ + currentfont 3 1 roll + /_Symbol_ _fScl 1000 mul selectfont + + 0 eq + { + Tx + } + { + Tj + } ifelse + setfont +} def +/Xb +{ + pop pop +} def +/Tb /Xb load def +/Xe +{ + pop pop pop pop +} def +/Te /Xe load def +/XB +{ +} def +/TB /XB load def +currentdict readonly pop +end +setpacking +%%EndResource +%%BeginProcSet: Adobe_ColorImage_AI6 1.0 0 +userdict /Adobe_ColorImage_AI6 known not +{ + userdict /Adobe_ColorImage_AI6 17 dict put +} if +userdict /Adobe_ColorImage_AI6 get begin + + /initialize + { + Adobe_ColorImage_AI6 begin + Adobe_ColorImage_AI6 + { + dup type /arraytype eq + { + dup xcheck + { + bind + } if + } if + pop pop + } forall + } def + /terminate { end } def + + currentdict /Adobe_ColorImage_AI6_Vars known not + { + /Adobe_ColorImage_AI6_Vars 14 dict def + } if + + Adobe_ColorImage_AI6_Vars begin + /channelcount 0 def + /sourcecount 0 def + /sourcearray 4 array def + /plateindex -1 def + /XIMask 0 def + /XIBinary 0 def + /XIChannelCount 0 def + /XIBitsPerPixel 0 def + /XIImageHeight 0 def + /XIImageWidth 0 def + /XIImageMatrix null def + /XIBuffer null def + /XIDataProc null def + end + + /WalkRGBString null def + /WalkCMYKString null def + + /StuffRGBIntoGrayString null def + /RGBToGrayImageProc null def + /StuffCMYKIntoGrayString null def + /CMYKToGrayImageProc null def + /ColorImageCompositeEmulator null def + + /SeparateCMYKImageProc null def + + /FourEqual null def + /TestPlateIndex null def + + currentdict /_colorimage known not + { + /colorimage where + { + /colorimage get /_colorimage exch def + } + { + /_colorimage null def + } ifelse + } if + + /_currenttransfer systemdict /currenttransfer get def + + /colorimage null def + /XI null def + + + /WalkRGBString + { + 0 3 index + + dup length 1 sub 0 3 3 -1 roll + { + 3 getinterval { } forall + + 5 index exec + + 3 index + } for + + 5 { pop } repeat + + } def + + + /WalkCMYKString + { + 0 3 index + + dup length 1 sub 0 4 3 -1 roll + { + 4 getinterval { } forall + + 6 index exec + + 3 index + + } for + + 5 { pop } repeat + + } def + + + /StuffRGBIntoGrayString + { + .11 mul exch + + .59 mul add exch + + .3 mul add + + cvi 3 copy put + + pop 1 add + } def + + + /RGBToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 3 idiv string + dup 3 1 roll + + /StuffRGBIntoGrayString load exch + WalkRGBString + end + } def + + + /StuffCMYKIntoGrayString + { + exch .11 mul add + + exch .59 mul add + + exch .3 mul add + + dup 255 gt { pop 255 } if + + 255 exch sub cvi 3 copy put + + pop 1 add + } def + + + /CMYKToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 4 idiv string + dup 3 1 roll + + /StuffCMYKIntoGrayString load exch + WalkCMYKString + end + } def + + + /ColorImageCompositeEmulator + { + pop true eq + { + Adobe_ColorImage_AI6_Vars /sourcecount get 5 add { pop } repeat + } + { + Adobe_ColorImage_AI6_Vars /channelcount get 1 ne + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 3 -1 roll put + + channelcount 3 eq + { + /RGBToGrayImageProc + } + { + /CMYKToGrayImageProc + } ifelse + load + end + } if + image + } ifelse + } def + + + /SeparateCMYKImageProc + { + Adobe_ColorImage_AI6_Vars begin + + sourcecount 0 ne + { + sourcearray plateindex get exec + } + { + sourcearray 0 get exec + + dup length 4 idiv string + + 0 2 index + + plateindex 4 2 index length 1 sub + { + get 255 exch sub + + 3 copy put pop 1 add + + 2 index + } for + + pop pop exch pop + } ifelse + end + } def + + + /FourEqual + { + 4 index ne + { + pop pop pop false + } + { + 4 index ne + { + pop pop false + } + { + 4 index ne + { + pop false + } + { + 4 index eq + } ifelse + } ifelse + } ifelse + } def + + + /TestPlateIndex + { + Adobe_ColorImage_AI6_Vars begin + /plateindex -1 def + + /setcmykcolor where + { + pop + gsave + 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub + grestore + + 1 0 0 0 FourEqual + { + /plateindex 0 def + } + { + 0 1 0 0 FourEqual + { + /plateindex 1 def + } + { + 0 0 1 0 FourEqual + { + /plateindex 2 def + } + { + 0 0 0 1 FourEqual + { + /plateindex 3 def + } + { + 0 0 0 0 FourEqual + { + /plateindex 5 def + } if + } ifelse + } ifelse + } ifelse + } ifelse + pop pop pop pop + } if + plateindex + end + } def + + + /colorimage + { + Adobe_ColorImage_AI6_Vars begin + /channelcount 1 index def + /sourcecount 2 index 1 eq { channelcount 1 sub } { 0 } ifelse def + + 4 sourcecount add index dup + 8 eq exch 1 eq or not + end + + { + /_colorimage load null ne + { + _colorimage + } + { + Adobe_ColorImage_AI6_Vars /sourcecount get + 7 add { pop } repeat + } ifelse + } + { + dup 3 eq + TestPlateIndex + dup -1 eq exch 5 eq or or + { + /_colorimage load null eq + { + ColorImageCompositeEmulator + } + { + dup 1 eq + { + pop pop image + } + { + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + gsave + + 0 _currenttransfer exec + 1 _currenttransfer exec + eq + { 0 _currenttransfer exec 0.5 lt } + { 0 _currenttransfer exec 1 _currenttransfer exec gt } ifelse + + { { pop 0 } } { { pop 1 } } ifelse + systemdict /settransfer get exec + } if + + _colorimage + + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + grestore + } if + } ifelse + } ifelse + } + { + dup 1 eq + { + pop pop + image + } + { + pop pop + + Adobe_ColorImage_AI6_Vars begin + sourcecount -1 0 + { + exch sourcearray 3 1 roll put + } for + + /SeparateCMYKImageProc load + end + + systemdict /image get exec + } ifelse + } ifelse + } ifelse + } def + + /XI + { + Adobe_ColorImage_AI6_Vars begin + gsave + /XIMask exch 0 ne def + /XIBinary exch 0 ne def + pop + pop + /XIChannelCount exch def + /XIBitsPerPixel exch def + /XIImageHeight exch def + /XIImageWidth exch def + pop pop pop pop + /XIImageMatrix exch def + + XIBitsPerPixel 1 eq + { + XIImageWidth 8 div ceiling cvi + } + { + XIImageWidth XIChannelCount mul + } ifelse + /XIBuffer exch string def + + XIBinary + { + /XIDataProc { currentfile XIBuffer readstring pop } def + currentfile 128 string readline pop pop + } + { + /XIDataProc { currentfile XIBuffer readhexstring pop } def + } ifelse + + 0 0 moveto + XIImageMatrix concat + XIImageWidth XIImageHeight scale + + XIMask + { + XIImageWidth XIImageHeight + false + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + /_lp /null ddef + _fc + /_lp /imagemask ddef + + imagemask + } + { + XIImageWidth XIImageHeight + XIBitsPerPixel + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + XIChannelCount 1 eq + { + + gsave + 0 setgray + + image + + grestore + } + { + false + XIChannelCount + colorimage + } ifelse + } ifelse + grestore + end + } def + +end +%%EndProcSet +%%BeginResource: procset Adobe_Illustrator_AI5 1.1 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Full Prolog) +%%Version: 1.1 +%%CreationDate: (3/7/1994) () +%%Copyright: ((C) 1987-1994 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_Illustrator_AI5_vars 81 dict dup begin +put +/_eo false def +/_lp /none def +/_pf +{ +} def +/_ps +{ +} def +/_psf +{ +} def +/_pss +{ +} def +/_pjsf +{ +} def +/_pjss +{ +} def +/_pola 0 def +/_doClip 0 def +/cf currentflat def +/_tm matrix def +/_renderStart +[ +/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 +] def +/_renderEnd +[ +null null null null /i1 /i1 /i1 /i1 +] def +/_render -1 def +/_rise 0 def +/_ax 0 def +/_ay 0 def +/_cx 0 def +/_cy 0 def +/_leading +[ +0 0 +] def +/_ctm matrix def +/_mtx matrix def +/_sp 16#020 def +/_hyphen (-) def +/_fScl 0 def +/_cnt 0 def +/_hs 1 def +/_nativeEncoding 0 def +/_useNativeEncoding 0 def +/_tempEncode 0 def +/_pntr 0 def +/_tDict 2 dict def +/_wv 0 def +/Tx +{ +} def +/Tj +{ +} def +/CRender +{ +} def +/_AI3_savepage +{ +} def +/_gf null def +/_cf 4 array def +/_if null def +/_of false def +/_fc +{ +} def +/_gs null def +/_cs 4 array def +/_is null def +/_os false def +/_sc +{ +} def +/_pd 1 dict def +/_ed 15 dict def +/_pm matrix def +/_fm null def +/_fd null def +/_fdd null def +/_sm null def +/_sd null def +/_sdd null def +/_i null def +/discardSave null def +/buffer 256 string def +/beginString null def +/endString null def +/endStringLength null def +/layerCnt 1 def +/layerCount 1 def +/perCent (%) 0 get def +/perCentSeen? false def +/newBuff null def +/newBuffButFirst null def +/newBuffLast null def +/clipForward? false def +end +userdict /Adobe_Illustrator_AI5 known not { + userdict /Adobe_Illustrator_AI5 91 dict put +} if +userdict /Adobe_Illustrator_AI5 get begin +/initialize +{ + Adobe_Illustrator_AI5 dup begin + Adobe_Illustrator_AI5_vars begin + discardDict + { + bind pop pop + } forall + dup /nc get begin + { + dup xcheck 1 index type /operatortype ne and + { + bind + } if + pop pop + } forall + end + newpath +} def +/terminate +{ + end + end +} def +/_ +null def +/ddef +{ + Adobe_Illustrator_AI5_vars 3 1 roll put +} def +/xput +{ + dup load dup length exch maxlength eq + { + dup dup load dup + length 2 mul dict copy def + } if + load begin + def + end +} def +/npop +{ + { + pop + } repeat +} def +/sw +{ + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add +} def +/swj +{ + dup 4 1 roll + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add + 6 2 roll /_cnt 0 ddef + { + 1 index eq + { + /_cnt _cnt 1 add ddef + } if + } forall + pop + exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop +} def +/ss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put pop + gsave + false charpath currentpoint + 4 index setmatrix + stroke + grestore + moveto + 2 copy rmoveto + } exch cshow + 3 npop +} def +/jss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put + gsave + _sp eq + { + exch 6 index 6 index 6 index 5 -1 roll widthshow + currentpoint + } + { + false charpath currentpoint + 4 index setmatrix stroke + } ifelse + grestore + moveto + 2 copy rmoveto + } exch cshow + 6 npop +} def +/sp +{ + { + 2 npop (0) exch + 2 copy 0 exch put pop + false charpath + 2 copy rmoveto + } exch cshow + 2 npop +} def +/jsp +{ + { + 2 npop + (0) exch 2 copy 0 exch put + _sp eq + { + exch 5 index 5 index 5 index 5 -1 roll widthshow + } + { + false charpath + } ifelse + 2 copy rmoveto + } exch cshow + 5 npop +} def +/pl +{ + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform +} def +/setstrokeadjust where +{ + pop true setstrokeadjust + /c + { + curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll curveto + } def + /V + /v load def + /y + { + 2 copy curveto + } def + /Y + /y load def + /l + { + lineto + } def + /L + /l load def + /m + { + moveto + } def +} +{ + /c + { + pl curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll pl curveto + } def + /V + /v load def + /y + { + pl 2 copy curveto + } def + /Y + /y load def + /l + { + pl lineto + } def + /L + /l load def + /m + { + pl moveto + } def +} ifelse +/d +{ + setdash +} def +/cf +{ +} def +/i +{ + dup 0 eq + { + pop cf + } if + setflat +} def +/j +{ + setlinejoin +} def +/J +{ + setlinecap +} def +/M +{ + setmiterlimit +} def +/w +{ + setlinewidth +} def +/XR +{ + 0 ne + /_eo exch ddef +} def +/H +{ +} def +/h +{ + closepath +} def +/N +{ + _pola 0 eq + { + _doClip 1 eq + { + _eo {eoclip} {clip} ifelse /_doClip 0 ddef + } if + newpath + } + { + /CRender + { + N + } ddef + } ifelse +} def +/n +{ + N +} def +/F +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc + /_doClip 0 ddef + } + { + _pf + } ifelse + } + { + /CRender + { + F + } ddef + } ifelse +} def +/f +{ + closepath + F +} def +/S +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + _ps + } ifelse + } + { + /CRender + { + S + } ddef + } ifelse +} def +/s +{ + closepath + S +} def +/B +{ + _pola 0 eq + { + _doClip 1 eq + gsave F grestore + { + gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + S + } ifelse + } + { + /CRender + { + B + } ddef + } ifelse +} def +/b +{ + closepath + B +} def +/W +{ + /_doClip 1 ddef +} def +/* +{ + count 0 ne + { + dup type /stringtype eq + { + pop + } if + } if + newpath +} def +/u +{ +} def +/U +{ +} def +/q +{ + _pola 0 eq + { + gsave + } if +} def +/Q +{ + _pola 0 eq + { + grestore + } if +} def +/*u +{ + _pola 1 add /_pola exch ddef +} def +/*U +{ + _pola 1 sub /_pola exch ddef + _pola 0 eq + { + CRender + } if +} def +/D +{ + pop +} def +/*w +{ +} def +/*W +{ +} def +/` +{ + /_i save ddef + clipForward? + { + nulldevice + } if + 6 1 roll 4 npop + concat pop + userdict begin + /showpage + { + } def + 0 setgray + 0 setlinecap + 1 setlinewidth + 0 setlinejoin + 10 setmiterlimit + [] 0 setdash + /setstrokeadjust where {pop false setstrokeadjust} if + newpath + 0 setgray + false setoverprint +} def +/~ +{ + end + _i restore +} def +/O +{ + 0 ne + /_of exch ddef + /_lp /none ddef +} def +/R +{ + 0 ne + /_os exch ddef + /_lp /none ddef +} def +/g +{ + /_gf exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _gf setgray + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/G +{ + /_gs exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _gs setgray + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/k +{ + _cf astore pop + /_fc + { + _lp /fill ne + { + _of setoverprint + _cf aload pop setcmykcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/K +{ + _cs astore pop + /_sc + { + _lp /stroke ne + { + _os setoverprint + _cs aload pop setcmykcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/x +{ + /_gf exch ddef + findcmykcustomcolor + /_if exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _if _gf 1 exch sub setcustomcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/X +{ + /_gs exch ddef + findcmykcustomcolor + /_is exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _is _gs 1 exch sub setcustomcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/A +{ + pop +} def +/annotatepage +{ +userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse +} def +/XT { + pop pop +} def +/discard +{ + save /discardSave exch store + discardDict begin + /endString exch store + gt38? + { + 2 add + } if + load + stopped + pop + end + discardSave restore +} bind def +userdict /discardDict 7 dict dup begin +put +/pre38Initialize +{ + /endStringLength endString length store + /newBuff buffer 0 endStringLength getinterval store + /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store + /newBuffLast newBuff endStringLength 1 sub 1 getinterval store +} def +/shiftBuffer +{ + newBuff 0 newBuffButFirst putinterval + newBuffLast 0 + currentfile read not + { + stop + } if + put +} def +0 +{ + pre38Initialize + mark + currentfile newBuff readstring exch pop + { + { + newBuff endString eq + { + cleartomark stop + } if + shiftBuffer + } loop + } + { + stop + } ifelse +} def +1 +{ + pre38Initialize + /beginString exch store + mark + currentfile newBuff readstring exch pop + { + { + newBuff beginString eq + { + /layerCount dup load 1 add store + } + { + newBuff endString eq + { + /layerCount dup load 1 sub store + layerCount 0 eq + { + cleartomark stop + } if + } if + } ifelse + shiftBuffer + } loop + } if +} def +2 +{ + mark + { + currentfile buffer readline not + { + stop + } if + endString eq + { + cleartomark stop + } if + } loop +} def +3 +{ + /beginString exch store + /layerCnt 1 store + mark + { + currentfile buffer readline not + { + stop + } if + dup beginString eq + { + pop /layerCnt dup load 1 add store + } + { + endString eq + { + layerCnt 1 eq + { + cleartomark stop + } + { + /layerCnt dup load 1 sub store + } ifelse + } if + } ifelse + } loop +} def +end +userdict /clipRenderOff 15 dict dup begin +put +{ + /n /N /s /S /f /F /b /B +} +{ + { + _doClip 1 eq + { + /_doClip 0 ddef _eo {eoclip} {clip} ifelse + } if + newpath + } def +} forall +/Tr /pop load def +/Bb {} def +/BB /pop load def +/Bg {12 npop} def +/Bm {6 npop} def +/Bc /Bm load def +/Bh {4 npop} def +end +/Lb +{ + 4 npop + 6 1 roll + pop + 4 1 roll + pop pop pop + 0 eq + { + 0 eq + { + (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard + } + { + + /clipForward? true def + + /Tx /pop load def + /Tj /pop load def + + currentdict end clipRenderOff begin begin + } ifelse + } + { + 0 eq + { + save /discardSave exch store + } if + } ifelse +} bind def +/LB +{ + discardSave dup null ne + { + restore + } + { + pop + clipForward? + { + currentdict + end + end + begin + + /clipForward? false ddef + } if + } ifelse +} bind def +/Pb +{ + pop pop + 0 (%AI5_EndPalette) discard +} bind def +/Np +{ + 0 (%AI5_End_NonPrinting--) discard +} bind def +/Ln /pop load def +/Ap +/pop load def +/Ar +{ + 72 exch div + 0 dtransform dup mul exch dup mul add sqrt + dup 1 lt + { + pop 1 + } if + setflat +} def +/Mb +{ + q +} def +/Md +{ +} def +/MB +{ + Q +} def +/nc 3 dict def +nc begin +/setgray +{ + pop +} bind def +/setcmykcolor +{ + 4 npop +} bind def +/setcustomcolor +{ + 2 npop +} bind def +currentdict readonly pop +end +end +setpacking +%%EndResource +%%EndProlog +%%BeginSetup +%%IncludeFont: Univers +Adobe_level2_AI5 /initialize get exec +Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_typography_AI5 /initialize get exec +Adobe_ColorImage_AI6 /initialize get exec +Adobe_Illustrator_AI5 /initialize get exec +[ +39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis +/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute +/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde +/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex +/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls +/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash +/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef +/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash +/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef +/guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe +/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide +/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright +/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand +/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex +/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex +/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla +/hungarumlaut/ogonek/caron +TE +%AI3_BeginEncoding: _Univers Univers +[/_Univers/Univers 0 0 1 TZ +%AI3_EndEncoding AdobeType +%AI5_Begin_NonPrinting +Np +8 Bn +%AI5_BeginGradient: (Black & White) +(Black & White) 0 2 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Green & Blue) +(Green & Blue) 0 2 Bd +[ +< +99999A9A9B9B9B9C9C9D9D9D9E9E9F9F9FA0A0A1A1A1A2A2A3A3A3A4A4A5A5A5A6A6A7A7A7A8A8A9 +A9A9AAAAABABABACACADADADAEAEAFAFAFB0B0B1B1B1B2B2B3B3B3B4B4B5B5B5B6B6B7B7B7B8B8B9 +B9B9BABABBBBBBBCBCBDBDBDBEBEBFBFBFC0C0C1C1C1C2C2C3C3C3C4C4C5C5C5C6C6C7C7C7C8C8C9 +C9C9CACACBCBCBCCCCCDCDCDCECECFCFCFD0D0D1D1D1D2D2D3D3D3D4D4D5D5D5D6D6D7D7D7D8D8D9 +D9D9DADADBDBDBDCDCDDDDDDDEDEDFDFDFE0E0E1E1E1E2E2E3E3E3E4E4E5E5E5E6E6E7E7E7E8E8E9 +E9E9EAEAEBEBEBECECEDEDEDEEEEEFEFEFF0F0F1F1F1F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F9 +F9F9FAFAFBFBFBFCFCFDFDFDFEFEFFFF +> +< +000102020304050506070808090A0B0B0C0D0E0E0F101111121314141516171718191A1A1B1C1D1D +1E1F20202122232324252626272829292A2B2C2C2D2E2F2F303132323334353536373838393A3B3B +3C3D3E3E3F404141424344444546474748494A4A4B4C4D4D4E4F5050515253535455565657585959 +5A5B5C5C5D5E5F5F606162626364656566676868696A6B6B6C6D6E6E6F7071717273747475767777 +78797A7A7B7C7D7D7E7F80808182828384858586878888898A8B8B8C8D8E8E8F9091919293949495 +96979798999A9A9B9C9D9D9E9FA0A0A1A2A3A3A4A5A6A6A7A8A9A9AAABACACADAEAFAFB0B1B2B2B3 +B4B5B5B6B7B8B8B9BABBBBBCBDBEBEBF +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +[ +1 0.75 0 0 1 50 100 %_Bs +0.6 0 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Pink, Yellow, Green) +(Pink, Yellow, Green) 0 3 Bd +[ +< +00000000000000000000000000000000000000010101010101010101010101010101010101010101 +01010101010202020202020202020202020202020202020202020203030303030303030303030303 +03030303030303030404040404040404040404040404040404040404050505050505050505050505 +05050505050505060606060606060606060606060606060606060707070707070707070707070707 +07070707080808080808080808080808080808080809090909090909090909090909090909090A0A +0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C +0C0C0C0C0C0C0C0D0D0D0D0D +> +< +050506060606070708080809090A0A0A0B0B0C0C0D0D0E0E0F0F1010111112121313141415151617 +17181819191A1A1B1C1C1D1D1E1F1F202021222223232425252626272828292A2A2B2C2C2D2D2E2F +2F3031313233333435353637373839393A3B3B3C3D3E3E3F4040414242434445454647474849494A +4B4C4C4D4E4F4F505151525354545556575758595A5A5B5C5C5D5E5F5F6061626363646566666768 +69696A6B6C6C6D6E6F707071727373747576777778797A7B7B7C7D7E7F7F80818283838485868787 +88898A8B8B8C8D8E8F8F9091929394949596979898999A9B9C9D9D9E9FA0A1A2A2A3A4A5A6A7A7A8 +A9AAABACADADAEAFB0B1B2B2 +> +< +CCCCCBCBCBCACACAC9C9C8C8C7C7C6C6C5C5C4C4C3C2C2C1C1C0C0BFBEBEBDBDBCBBBBBAB9B9B8B7 +B7B6B6B5B4B4B3B2B1B1B0AFAFAEADADACABAAAAA9A8A8A7A6A5A5A4A3A2A2A1A0A09F9E9D9C9C9B +9A999998979696959493929291908F8E8E8D8C8B8A8A8988878686858483828181807F7E7D7C7C7B +7A7978777776757473727171706F6E6D6C6B6A6A69686766656463636261605F5E5D5C5B5B5A5958 +5756555453525151504F4E4D4C4B4A49484746464544434241403F3E3D3C3B3A3938383736353433 +3231302F2E2D2C2B2A29282726252423222221201F1E1D1C1B1A191817161514131211100F0E0D0C +0B0A09080706050403020100 +> +0 +1 %_Br +< +737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5B5A59585756555453525150504F4E +4D4C4B4A4949484746454443434241403F3E3E3D3C3B3A3A393837363635343333323130302F2E2D +2D2C2B2A2A29282827262525242323222121201F1F1E1D1D1C1C1B1A1A1918181717161615141413 +1312121111100F0F0E0E0D0D0C0C0C0B0B0A0A090908080807070606060505050404040303030202 +020201010101010000000000 +> +< +00000000000000000000000001010101010101010101010101010101010101010101010102020202 +02020202020202020202020202020202020202020202030303030303030303030303030303030303 +03030303030303030303030303040404040404040404040404040404040404040404040404040404 +04040404040404040404050505050505050505050505050505050505050505050505050505050505 +050505050505050505050505 +> +< +BFBFBFC0C0C0C0C0C0C0C0C0C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C2C2C3C3C3C3C3C3C3C3C3 +C3C4C4C4C4C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C6C6C6C7C7C7C7C7C7 +C7C7C7C7C7C7C8C8C8C8C8C8C8C8C8C8C8C8C8C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9CACACACACACA +CACACACACACACACACACACBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCCCCCCCCCC +> +0 +1 %_Br +[ +0.05 0.7 0 0 1 50 100 %_Bs +0 0.02 0.8 0 1 57 36 %_Bs +0.45 0 0.75 0 1 37 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Purple, Red & Yellow) +(Purple, Red & Yellow) 0 3 Bd +[ +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A +> +< +CCCCCCCDCDCDCDCDCECECECECECFCFCFCFD0D0D0D0D0D1D1D1D1D1D2D2D2D2D2D3D3D3D3D3D4D4D4 +D4D5D5D5D5D5D6D6D6D6D6D7D7D7D7D7D8D8D8D8D8D9D9D9D9DADADADADADBDBDBDBDBDCDCDCDCDC +DDDDDDDDDDDEDEDEDEDFDFDFDFDFE0E0E0E0E0E1E1E1E1E1E2E2E2E2E2E3E3E3E3E4E4E4E4E4E5E5 +E5E5E5E6E6E6E6E6E7E7E7E7E7E8E8E8E8E9E9E9E9E9EAEAEAEAEAEBEBEBEBEBECECECECECEDEDED +EDEEEEEEEEEEEFEFEFEFEFF0F0F0F0F0F1F1F1F1F1F2F2F2F2F3F3F3F3F3F4F4F4F4F4F5F5F5F5F5 +F6F6F6F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFAFAFBFBFBFBFBFCFCFCFCFDFDFDFDFDFEFE +FEFEFEFFFFFF +> +0 +1 %_Br +< +E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBE +BDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A99989796 +9594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B7A797877767574737271706F6E +6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A49484746 +4544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E +1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403020100 +> +< +E5E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9EAEAEAEA +EAEAEAEAEAEBEBEBEBEBEBEBEBEBECECECECECECECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEE +EEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F3F3F3 +F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 +F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFCFC +FCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFF +> +< +00010203040405060708090A0B0C0C0D0E0F10111213141415161718191A1B1C1D1D1E1F20212223 +242525262728292A2B2C2D2D2E2F30313233343535363738393A3B3C3D3D3E3F4041424344454546 +4748494A4B4C4D4E4E4F50515253545556565758595A5B5C5D5E5E5F60616263646566666768696A +6B6C6D6E6E6F70717273747576767778797A7B7C7D7E7F7F80818283848586878788898A8B8C8D8E +8F8F90919293949596979798999A9B9C9D9E9F9FA0A1A2A3A4A5A6A7A7A8A9AAABACADAEAFAFB0B1 +B2B3B4B5B6B7B8B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C8C9CACBCC +> +0 +1 %_Br +[ +0 0.04 1 0 1 50 100 %_Bs +0 1 0.8 0 1 50 50 %_Bs +0.9 0.9 0 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Rainbow) +(Rainbow) 0 6 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +0 +1 %_Br +1 +< +0708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E +2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556 +5758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E +7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6 +A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCE +CFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6 +F7F8F9FAFBFCFDFEFF +> +0 +0 +1 %_Br +1 +< +00000000000000000000000000000000000001010101010101010101010101010101010101010101 +01010101010101010101010101010202020202020202020202020202020202020202020202020202 +02020202020202020202030303030303030303030303030303030303030303030303030303030303 +03030303030304040404040404040404040404040404040404040404040404040404040404040404 +04040505050505050505050505050505050505050505050505050505050505050505050505050606 +06060606060606060606060606060606060606060606060606060606060606060606070707070707 +07070707070707070707070707070707 +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 +1 +0 +1 %_Br +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +1 %_Br +[ +0 1 0 0 1 50 100 %_Bs +1 1 0 0 1 50 80 %_Bs +1 0.0279 0 0 1 50 60 %_Bs +1 0 1 0 1 50 40 %_Bs +0 0 1 0 1 50 20 %_Bs +0 1 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Steel Bar) +(Steel Bar) 0 3 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 70 %_Bs +0 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Orange Radial) +(Yellow & Orange Radial) 1 2 Bd +[ +0 +< +0001010203040506060708090A0B0C0C0D0E0F10111213131415161718191A1B1C1D1D1E1F202122 +232425262728292A2B2B2C2D2E2F303132333435363738393A3B3C3D3E3E3F404142434445464748 +494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60606162636465666768696A6B6C6D6E6F +707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C +> +< +FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9 +F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2 +F2F2F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEDEDEDEDEDEDECECECECECEBEBEBEBEB +EBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E8E8E8E7E7E7E7E7E6E6E6E6E6E5 +> +0 +1 %_Br +[ +0 0 1 0 1 52 19 %_Bs +0 0.55 0.9 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Purple Radial) +(Yellow & Purple Radial) 1 2 Bd +[ +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +< +1415161718191A1B1C1D1E1F1F202122232425262728292A2A2B2C2D2E2F30313233343536363738 +393A3B3C3D3E3F40414142434445464748494A4B4C4D4D4E4F50515253545556575858595A5B5C5D +5E5F60616263646465666768696A6B6C6D6E6F6F707172737475767778797A7B7B7C7D7E7F808182 +83848586868788898A8B8C8D8E8F90919292939495969798999A9B9C9D9D9E9FA0A1A2A3A4A5A6A7 +A8A9A9AAABACADAEAFB0B1B2B3B4B4B5B6B7B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C9CACBCB +CCCDCECFD0D1D2D3D4D5D6D7D7D8D9DADBDCDDDEDFE0E1E2E2E3E4E5E6E7E8E9EAEBECEDEEEEEFF0 +F1F2F3F4F5F6F7F8F9F9FAFBFCFDFEFF +> +< +ABAAAAA9A8A7A7A6A5A5A4A3A3A2A1A1A09F9F9E9D9D9C9B9B9A9999989797969595949393929191 +908F8F8E8D8D8C8B8B8A8989888787868585848383828181807F7F7E7D7D7C7B7B7A797978777776 +7575747373727171706F6F6E6D6D6C6B6B6A6969686767666565646362626160605F5E5E5D5C5C5B +5A5A5958585756565554545352525150504F4E4E4D4C4C4B4A4A4948484746464544444342424140 +403F3E3E3D3C3C3B3A3A3938383736363534343332323130302F2E2E2D2C2C2B2A2A292828272626 +25242423222121201F1F1E1D1D1C1B1B1A1919181717161515141313121111100F0F0E0D0D0C0B0B +0A090908070706050504030302010100 +> +0 +1 %_Br +[ +0 0.08 0.67 0 1 50 14 %_Bs +1 1 0 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_End_NonPrinting-- +%AI5_BeginPalette +0 0 Pb +Pn +Pc +1 g +Pc +0 g +Pc +0 0 0 0 k +Pc +0.75 g +Pc +0.5 g +Pc +0.25 g +Pc +0 g +Pc +Bb +2 (Black & White) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0 0 0 k +Pc +0.5 0 0 0 k +Pc +0.75 0 0 0 k +Pc +1 0 0 0 k +Pc +0.25 0.25 0 0 k +Pc +0.5 0.5 0 0 k +Pc +0.75 0.75 0 0 k +Pc +1 1 0 0 k +Pc +Bb +2 (Pink, Yellow, Green) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0 0 k +Pc +0 0.5 0 0 k +Pc +0 0.75 0 0 k +Pc +0 1 0 0 k +Pc +0 0.25 0.25 0 k +Pc +0 0.5 0.5 0 k +Pc +0 0.75 0.75 0 k +Pc +0 1 1 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Purple Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0 0.25 0 k +Pc +0 0 0.5 0 k +Pc +0 0 0.75 0 k +Pc +0 0 1 0 k +Pc +0.25 0 0.25 0 k +Pc +0.5 0 0.5 0 k +Pc +0.75 0 0.75 0 k +Pc +1 0 1 0 k +Pc +Bb +2 (Rainbow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0 0 k +Pc +0.5 0.25 0 0 k +Pc +0.75 0.375 0 0 k +Pc +1 0.5 0 0 k +Pc +0.125 0.25 0 0 k +Pc +0.25 0.5 0 0 k +Pc +0.375 0.75 0 0 k +Pc +0.5 1 0 0 k +Pc +Bb +2 (Steel Bar) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0.125 0 k +Pc +0 0.5 0.25 0 k +Pc +0 0.75 0.375 0 k +Pc +0 1 0.5 0 k +Pc +0 0.125 0.25 0 k +Pc +0 0.25 0.5 0 k +Pc +0 0.375 0.75 0 k +Pc +0 0.5 1 0 k +Pc +Bb +2 (Purple, Red & Yellow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0 0.25 0 k +Pc +0.25 0 0.5 0 k +Pc +0.375 0 0.75 0 k +Pc +0.5 0 1 0 k +Pc +0.25 0 0.125 0 k +Pc +0.5 0 0.25 0 k +Pc +0.75 0 0.375 0 k +Pc +1 0 0.5 0 k +Pc +Bb +2 (Green & Blue) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0.125 0 k +Pc +0.5 0.25 0.25 0 k +Pc +0.75 0.375 0.375 0 k +Pc +1 0.5 0.5 0 k +Pc +0.25 0.25 0.125 0 k +Pc +0.5 0.5 0.25 0 k +Pc +0.75 0.75 0.375 0 k +Pc +1 1 0.5 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Orange Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0.25 0.125 0 k +Pc +0.25 0.5 0.25 0 k +Pc +0.375 0.75 0.375 0 k +Pc +0.5 1 0.5 0 k +Pc +0.125 0.25 0.25 0 k +Pc +0.25 0.5 0.5 0 k +Pc +0.375 0.75 0.75 0 k +Pc +0.5 1 1 0 k +Pc +0 0 0 0 k +Pc +0.125 0.125 0.25 0 k +Pc +0.25 0.25 0.5 0 k +Pc +0.375 0.375 0.75 0 k +Pc +0.5 0.5 1 0 k +Pc +0.25 0.125 0.25 0 k +Pc +0.5 0.25 0.5 0 k +Pc +0.75 0.375 0.75 0 k +Pc +1 0.5 1 0 k +Pc +PB +%AI5_EndPalette +%%EndSetup +%AI5_BeginLayer +1 1 1 1 0 0 0 79 128 255 Lb +(Layer 1) Ln +0 A +800 Ar +0 J 0 j 1 w 4 M []0 d +%AI3_Note: +0 D +0 XR +-4014 283.5 m +4626 283.5 L +(N) * +453.5 4716 m +453.5 -3924 L +(N) * +85 4716 m +85 -3924 L +(N) * +-4014 765.5 m +4626 765.5 L +(N) * +1 Ap +0 R +0 G +[6 8 6 8 6 8 ]0 d +439.3333 689 m +439.3333 751 L +354 751 L +354 689 L +439.3333 689 L +s +322 523 m +322 734.3333 L +107.6667 734.3333 L +107.6667 523 L +322 523 L +s +u +0 Ap +1.1 w []0 d +137.6876 560.816 m +114.2154 572.6036 L +114.2154 595.9724 L +137.6876 607.7602 L +161.1596 595.9724 L +161.1596 572.6036 L +137.6876 560.816 L +s +0 To +1 0 0 1 137.6875 586.8542 0 Tp +TP +-21.665 0 Td +0 Tr +0 O +0 g +1 w +/_Univers 10 Tf +0 Ts +100 Tz +0 Tt +1 TA +%_ 0 XL +36 0 Xb +XB +0 0 5 TC +100 100 200 TW +0 0 0 Ti +1 Ta +0 0 2 2 3 Th +0 Tq +0 0 Tl +0 Tc +0 Tw +(Standard\r) Tx +12.2217 -12 Td +(MIB) Tx +(\r) TX +TO +U +u +0 R +0 G +261.6169 564.0939 m +244.5463 572.6667 L +244.5463 589.6621 L +261.6169 598.235 L +278.6875 589.6621 L +278.6875 572.6667 L +261.6169 564.0939 L +s +0 To +1 0 0 1 252.1735 577.7306 0 Tp +TP +0 Tr +0 O +0 g +0 Ta +(MIB) Tx +(\r) TX +TO +U +u +0 R +0 G +298.4248 564.0939 m +281.3542 572.6667 L +281.3542 589.6621 L +298.4248 598.235 L +315.4954 589.6621 L +315.4954 572.6667 L +298.4248 564.0939 L +s +0 To +1 0 0 1 288.9813 577.7306 0 Tp +TP +0 Tr +0 O +0 g +(MIB) Tx +(\r) TX +TO +U +u +0 R +0 G +203.1875 564.6667 m +186.1168 573.2395 L +186.1168 590.2349 L +203.1875 598.8079 L +220.2579 590.2349 L +220.2579 573.2395 L +203.1875 564.6667 L +s +0 To +1 0 0 1 193.744 578.3034 0 Tp +TP +0 Tr +0 O +0 g +(MIB) Tx +(\r) TX +TO +U +u +1 Ap +0 R +0 G +173.7708 529.6568 m +193.3397 529.6568 209.2039 539.1753 209.2039 550.9166 c +209.2039 562.6579 193.3397 572.1765 173.7708 572.1765 c +154.2019 572.1765 138.3377 562.6579 138.3377 550.9166 c +138.3377 539.1753 154.2019 529.6568 173.7708 529.6568 c +s +0 To +1 0 0 1 173.7708 553.4828 0 Tp +TP +-16.3867 0 Td +0 Tr +0 O +0 g +1 Ta +(Master\r) Tx +2.2253 -12 Td +(Agent) Tx +(\r) TX +TO +U +u +0 R +0 G +280.0208 533.9921 m +295.676 533.9921 308.3674 541.6069 308.3674 551 c +308.3674 560.393 295.676 568.008 280.0208 568.008 c +264.3656 568.008 251.6742 560.393 251.6742 551 c +251.6742 541.6069 264.3656 533.9921 280.0208 533.9921 c +s +0 To +1 0 0 1 280.0208 553.5662 0 Tp +TP +-9.4434 0 Td +0 Tr +0 O +0 g +(Sub\r) Tx +-4.718 -12 Td +(Agent) Tx +(\r) TX +TO +U +0 Ap +0 R +0 G +98.6458 481.9583 m +438.6458 481.9583 l +S +0 To +1 0 0 1 93.3333 499.3333 0 Tp +TP +0 Tr +0 O +0 g +0 Ta +(Manager) Tx +(\r) TX +TO +0 R +0 G +104.5 496.3333 m +104.5 482 l +S +u +195.3333 496.75 m +195.3333 482 l +S +u +1 Ap +216.8333 496.75 m +216.8333 523 L +173.8333 523 L +173.8333 496.75 L +216.8333 496.75 L +s +0 To +1 0 0 1 180.0574 506.4412 0 Tp +TP +0 Tr +0 O +0 g +(Erlang) Tx +(\r) TX +TO +U +U +u +0 Ap +0 R +0 G +391.6667 496.75 m +391.6667 482 l +S +u +1 Ap +413.1667 496.75 m +413.1667 523 L +370.1667 523 L +370.1667 496.75 L +413.1667 496.75 L +s +0 To +1 0 0 1 376.3908 506.4412 0 Tp +TP +0 Tr +0 O +0 g +(Erlang) Tx +(\r) TX +TO +U +U +u +0 R +0 G +204.5065 690.9501 m +207.8201 690.9501 210.5065 693.6364 210.5065 696.9501 C +210.5065 720.3831 L +210.5065 723.6969 207.8201 726.3832 204.5065 726.3832 C +188.1602 726.3832 L +184.8466 726.3832 182.1601 723.6969 182.1601 720.3831 C +182.1601 696.9501 L +182.1601 693.6364 184.8466 690.9501 188.1602 690.9501 C +204.5065 690.9501 L +s +0 To +1 0 0 1 196.3333 711.2328 0 Tp +TP +-12.4963 0 Td +0 Tr +0 O +0 g +1 Ta +(Appl.\r) Tx +9.7168 -12 Td +(1) Tx +(\r) TX +TO +U +u +0 R +0 G +238.5065 676.9501 m +241.8201 676.9501 244.5065 679.6364 244.5065 682.9501 C +244.5065 706.3831 L +244.5065 709.6969 241.8201 712.3832 238.5065 712.3832 C +222.1602 712.3832 L +218.8466 712.3832 216.1601 709.6969 216.1601 706.3831 C +216.1601 682.9501 L +216.1601 679.6364 218.8466 676.9501 222.1602 676.9501 C +238.5065 676.9501 L +s +0 To +1 0 0 1 230.3333 697.2328 0 Tp +TP +-12.4963 0 Td +0 Tr +0 O +0 g +(Appl.\r) Tx +9.7168 -12 Td +(2) Tx +(\r) TX +TO +U +u +0 R +0 G +272.5065 662.6168 m +275.8201 662.6168 278.5065 665.3031 278.5065 668.6168 C +278.5065 692.0498 L +278.5065 695.3636 275.8201 698.0499 272.5065 698.0499 C +256.1602 698.0499 L +252.8466 698.0499 250.1601 695.3636 250.1601 692.0498 C +250.1601 668.6168 L +250.1601 665.3031 252.8466 662.6168 256.1602 662.6168 C +272.5065 662.6168 L +s +0 To +1 0 0 1 264.3333 682.8995 0 Tp +TP +-12.4963 0 Td +0 Tr +0 O +0 g +(Appl.\r) Tx +9.7168 -12 Td +(3) Tx +(\r) TX +TO +U +u +0 R +0 G +306.5065 648.6168 m +309.8201 648.6168 312.5065 651.3031 312.5065 654.6168 C +312.5065 678.0498 L +312.5065 681.3636 309.8201 684.0499 306.5065 684.0499 C +290.1602 684.0499 L +286.8466 684.0499 284.1601 681.3636 284.1601 678.0498 C +284.1601 654.6168 L +284.1601 651.3031 286.8466 648.6168 290.1602 648.6168 C +306.5065 648.6168 L +s +0 To +1 0 0 1 298.3333 668.8995 0 Tp +TP +-12.4963 0 Td +0 Tr +0 O +0 g +(Appl.\r) Tx +9.7168 -12 Td +(4) Tx +(\r) TX +TO +U +u +0 R +0 G +373.1026 619.6168 m +376.4161 619.6168 379.1026 622.3031 379.1026 625.6168 C +379.1026 649.0498 L +379.1026 652.3636 376.4161 655.0499 373.1026 655.0499 C +356.7563 655.0499 L +353.4427 655.0499 350.7561 652.3636 350.7561 649.0498 C +350.7561 625.6168 L +350.7561 622.3031 353.4427 619.6168 356.7563 619.6168 C +373.1026 619.6168 L +s +0 To +1 0 0 1 364.9293 639.8995 0 Tp +TP +-12.4963 0 Td +0 Tr +0 O +0 g +(Appl.\r) Tx +9.7168 -12 Td +(5) Tx +(\r) TX +TO +U +u +0 R +0 G +416.1732 703.6168 m +419.4868 703.6168 422.1732 706.3031 422.1732 709.6168 C +422.1732 733.0498 L +422.1732 736.3636 419.4868 739.0499 416.1732 739.0499 C +399.8269 739.0499 L +396.5133 739.0499 393.8268 736.3636 393.8268 733.0498 C +393.8268 709.6168 L +393.8268 706.3031 396.5133 703.6168 399.8269 703.6168 C +416.1732 703.6168 L +s +0 To +1 0 0 1 408 723.8995 0 Tp +TP +-12.4963 0 Td +0 Tr +0 O +0 g +(Appl.\r) Tx +9.7168 -12 Td +(6) Tx +(\r) TX +TO +U +0 To +1 0 0 1 210 738 0 Tp +TP +-16.9458 0 Td +0 Tr +(Node 1) Tx +(\r) TX +TO +0 To +1 0 0 1 395.6667 755 0 Tp +TP +-16.9458 0 Td +0 Tr +(Node 3) Tx +(\r) TX +TO +0 To +1 0 0 1 383.3333 670 0 Tp +TP +-16.9458 0 Td +0 Tr +(Node 2) Tx +(\r) TX +TO +0 To +1 0 0 1 255 467.6667 0 Tp +TP +-19.9951 0 Td +0 Tr +(Network) Tx +(\r) TX +TO +0 To +1 0 0 1 158.6667 503 0 Tp +TP +-10.553 0 Td +0 Tr +(UDP) Tx +(\r) TX +TO +u +u +0 Ap +0 R +0 G +196.1667 682.9167 m +202.5 606.5833 l +S +0 O +0 g +203.7167 604.3142 m +204.0775 606.0031 204.447 607.1121 204.8679 608.478 c +199.8409 608.0609 l +200.1046 607.6064 201.0285 605.7501 201.6624 604.1437 c +202.3416 602.4246 202.8386 600.8558 203.0548 599.8294 c +203.0987 600.8774 203.3303 602.5066 203.7167 604.3142 c +f +194.9499 685.1859 m +194.5892 683.4969 194.2196 682.388 193.7987 681.022 c +198.8258 681.4391 l +198.5621 681.8936 197.6381 683.7499 197.0042 685.3563 c +196.325 687.0755 195.828 688.6442 195.6119 689.6706 c +195.5679 688.6227 195.3363 686.9934 194.9499 685.1859 c +f +U +U +0 R +0 G +110.3333 492.3333 m +152.1209 494.1551 165.3333 502 v +176 508.3333 183.3333 519.3333 182 530 c +S +276.3333 533.6667 m +281.3333 517.6667 296.3333 512.3333 v +310.4293 507.3215 326.0289 506.8196 344.3333 512 c +362 517 365.6667 521.3333 375.6667 534.6667 c +S +0 To +1 0 0 1 310 497 0 Tp +TP +-42.7673 0 Td +0 Tr +0 O +0 g +(Distributed Erlang) Tx +(\r) TX +TO +u +u +0 R +0 G +233.6667 668.6667 m +258.3333 605.3333 l +S +0 O +0 g +260.1455 603.5043 m +260.0107 605.2261 260.0494 606.3943 260.0641 607.8236 c +255.3637 605.993 l +255.7458 605.6322 257.1599 604.1157 258.2248 602.7562 c +259.3652 601.3015 260.2881 599.9391 260.7874 599.0167 c +260.5313 600.0338 260.2896 601.6616 260.1455 603.5043 c +f +231.8545 670.4957 m +231.9893 668.7739 231.9506 667.6056 231.9359 666.1764 c +236.6363 668.007 l +236.2542 668.3677 234.8401 669.8842 233.7752 671.2438 c +232.6348 672.6985 231.7119 674.0609 231.2126 674.9833 c +231.4687 673.9662 231.7104 672.3384 231.8545 670.4957 c +f +U +U +u +u +u +0 R +0 G +268.8303 655 m +286.3333 601.3333 l +S +0 O +0 g +288.0401 599.4055 m +288.002 601.1321 288.1062 602.2964 288.201 603.7226 c +283.4054 602.1585 l +283.7667 601.777 285.0934 600.1835 286.0803 598.7664 c +287.1373 597.25 287.9824 595.8379 288.4291 594.889 c +288.2305 595.9188 288.0805 597.5576 288.0401 599.4055 c +f +267.1236 656.9278 m +267.1616 655.2012 267.0575 654.0369 266.9626 652.6107 c +271.7583 654.1748 l +271.397 654.5563 270.0702 656.1498 269.0833 657.5669 c +268.0263 659.0833 267.1813 660.4954 266.7345 661.4443 c +266.9331 660.4145 267.0831 658.7757 267.1236 656.9278 c +f +U +U +U +u +u +0 R +0 G +298.3333 640.3125 m +298.3333 605.9792 l +S +0 O +0 g +299.3582 603.6172 m +299.8574 605.2705 300.3174 606.3451 300.8498 607.6716 c +295.8055 607.6716 l +296.0307 607.1968 296.798 605.2705 297.2969 603.6172 c +297.8316 601.8478 298.1972 600.2433 298.3277 599.2026 c +298.4582 600.2433 298.8237 601.8478 299.3582 603.6172 c +f +297.3084 642.6745 m +296.8092 641.0212 296.3492 639.9466 295.8168 638.6201 c +300.8611 638.6201 l +300.6359 639.0949 299.8686 641.0212 299.3697 642.6745 c +298.835 644.4439 298.4694 646.0484 298.3389 647.0891 c +298.2084 646.0484 297.8429 644.4439 297.3084 642.6745 c +f +U +U +u +u +0 R +0 G +217 550 m +244 550 l +S +0 O +0 g +246.362 551.0249 m +244.7087 551.5241 243.6341 551.9841 242.3076 552.5165 c +242.3076 547.4722 l +242.7824 547.6974 244.7087 548.4647 246.362 548.9636 c +248.1314 549.4983 249.7359 549.8639 250.7766 549.9944 c +249.7359 550.1249 248.1314 550.4904 246.362 551.0249 c +f +214.638 548.9751 m +216.2913 548.4759 217.3659 548.0159 218.6924 547.4835 c +218.6924 552.5278 l +218.2176 552.3026 216.2913 551.5353 214.638 551.0364 c +212.8686 550.5017 211.2641 550.1361 210.2234 550.0056 c +211.2641 549.8751 212.8686 549.5096 214.638 548.9751 c +f +U +U +u +0 R +0 G +364.9294 563.9595 m +347.8588 572.5323 L +347.8588 589.5277 L +364.9294 598.1006 L +382 589.5277 L +382 572.5323 L +364.9294 563.9595 L +s +0 To +1 0 0 1 355.486 577.5962 0 Tp +TP +0 Tr +0 O +0 g +0 Ta +(MIB) Tx +(\r) TX +TO +U +u +0 R +0 G +401.7373 563.9595 m +384.6667 572.5323 L +384.6667 589.5277 L +401.7373 598.1006 L +418.8079 589.5277 L +418.8079 572.5323 L +401.7373 563.9595 L +s +0 To +1 0 0 1 392.2938 577.5962 0 Tp +TP +0 Tr +0 O +0 g +(MIB) Tx +(\r) TX +TO +U +u +1 Ap +0 R +0 G +383.3333 533.8577 m +398.9885 533.8577 411.6799 541.4725 411.6799 550.8656 c +411.6799 560.2586 398.9885 567.8736 383.3333 567.8736 c +367.6781 567.8736 354.9867 560.2586 354.9867 550.8656 c +354.9867 541.4725 367.6781 533.8577 383.3333 533.8577 c +s +0 To +1 0 0 1 383.3333 553.4318 0 Tp +TP +-9.4434 0 Td +0 Tr +0 O +0 g +1 Ta +(Sub\r) Tx +-4.718 -12 Td +(Agent) Tx +(\r) TX +TO +U +0 R +0 G +[6 8 6 8 6 8 ]0 d +439.3333 523 m +439.3333 666.3333 L +331.3333 666.3333 L +331.3333 523 L +439.3333 523 L +s +u +0 Ap +[]0 d +365.0208 604.6458 m +365.0208 612.6458 l +S +0 O +0 g +363.9959 615.0078 m +363.4967 613.3545 363.0367 612.2799 362.5043 610.9534 c +367.5486 610.9534 l +367.3234 611.4282 366.5561 613.3545 366.0572 615.0078 c +365.5225 616.7772 365.1569 618.3817 365.0264 619.4224 c +364.8959 618.3817 364.5304 616.7772 363.9959 615.0078 c +f +366.0457 602.2838 m +366.5449 603.9371 367.0049 605.0117 367.5373 606.3382 c +362.493 606.3382 l +362.7182 605.8634 363.4855 603.9371 363.9844 602.2838 c +364.5191 600.5144 364.8847 598.9099 365.0152 597.8692 c +365.1457 598.9099 365.5112 600.5144 366.0457 602.2838 c +f +U +u +u +0 R +0 G +402.4166 605.2917 m +411.3333 695.6667 l +S +0 O +0 g +410.5453 698.1179 m +409.8862 696.5216 409.3229 695.4974 408.6628 694.2295 c +413.6827 693.7342 l +413.5052 694.2289 412.9308 696.2212 412.5966 697.9155 c +412.2383 699.7288 412.032 701.3615 412.0043 702.4099 c +411.7722 701.3871 411.251 699.8262 410.5453 698.1179 c +f +U +403.2089 602.8419 m +403.8653 604.4393 404.4268 605.4645 405.0846 606.7335 c +400.0639 607.22 l +400.2422 606.7257 400.8201 604.7344 401.1573 603.0407 c +401.5188 601.228 401.7279 599.5957 401.7575 598.5473 c +401.9877 599.5705 402.5063 601.1323 403.2089 602.8419 c +f +U +LB +%AI5_EndLayer-- +%%PageTrailer +gsave annotatepage grestore showpage +%%Trailer +Adobe_Illustrator_AI5 /terminate get exec +Adobe_ColorImage_AI6 /terminate get exec +Adobe_typography_AI5 /terminate get exec +Adobe_level2_AI5 /terminate get exec +%%EOF diff --git a/lib/snmp/doc/src/snmp-um-1-image-8.gif b/lib/snmp/doc/src/snmp-um-1-image-8.gif Binary files differnew file mode 100644 index 0000000000..db224a1937 --- /dev/null +++ b/lib/snmp/doc/src/snmp-um-1-image-8.gif diff --git a/lib/snmp/doc/src/snmp-um-1-image-8.ps b/lib/snmp/doc/src/snmp-um-1-image-8.ps new file mode 100644 index 0000000000..b16739aba0 --- /dev/null +++ b/lib/snmp/doc/src/snmp-um-1-image-8.ps @@ -0,0 +1,2931 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Adobe Illustrator(r) 6.0 +%%For: (Anna Fedoriw) (Ericsson Telecom) +%%Title: (ProcessesOnOneNode.eps) +%%CreationDate: (97-05-23) (14.05) +%%BoundingBox: 84 522 452 731 +%%HiResBoundingBox: 84.5 522.5 451.1162 730.5099 +%%DocumentProcessColors: Black +%%DocumentFonts: Univers +%%DocumentSuppliedResources: procset Adobe_level2_AI5 1.0 0 +%%+ procset Adobe_typography_AI5 1.0 0 +%%+ procset Adobe_Illustrator_AI6_vars Adobe_Illustrator_AI6 +%%+ procset Adobe_Illustrator_AI5 1.0 0 +%AI5_FileFormat 2.0 +%AI3_ColorUsage: Black&White +%%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) +%%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 -1 -1 +%%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () +%AI3_TemplateBox: 306 396 306 396 +%AI3_TileBox: 21 -12 588 802 +%AI3_DocumentPreview: Macintosh_ColorPic +%AI5_ArtSize: 595.2756 841.8898 +%AI5_RulerUnits: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 1 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI5_OpenToView: 2 860 1.5 1146 827 58 1 1 3 40 +%AI5_OpenViewLayers: 7 +%%EndComments +%%BeginProlog +%%BeginResource: procset Adobe_level2_AI5 1.2 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) +%%Version: 1.2 +%%CreationDate: (04/10/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +userdict /Adobe_level2_AI5 23 dict dup begin + put + /packedarray where not + { + userdict begin + /packedarray + { + array astore readonly + } bind def + /setpacking /pop load def + /currentpacking false def + end + 0 + } if + pop + userdict /defaultpacking currentpacking put true setpacking + /initialize + { + Adobe_level2_AI5 begin + } bind def + /terminate + { + currentdict Adobe_level2_AI5 eq + { + end + } if + } bind def + mark + /setcustomcolor where not + { + /findcmykcustomcolor + { + 5 packedarray + } bind def + /setcustomcolor + { + exch aload pop pop + 4 + { + 4 index mul 4 1 roll + } repeat + 5 -1 roll pop + setcmykcolor + } + def + } if + + /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def + userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put + userdict /level2? + systemdict /languagelevel known dup + { + pop systemdict /languagelevel get 2 ge + } if + put +/level2ScreenFreq +{ + begin + 60 + HalftoneType 1 eq + { + pop Frequency + } if + HalftoneType 2 eq + { + pop GrayFrequency + } if + HalftoneType 5 eq + { + pop Default level2ScreenFreq + } if + end +} bind def +userdict /currentScreenFreq + level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put +level2? not + { + /setcmykcolor where not + { + /setcmykcolor + { + exch .11 mul add exch .59 mul add exch .3 mul add + 1 exch sub setgray + } def + } if + /currentcmykcolor where not + { + /currentcmykcolor + { + 0 0 0 1 currentgray sub + } def + } if + /setoverprint where not + { + /setoverprint /pop load def + } if + /selectfont where not + { + /selectfont + { + exch findfont exch + dup type /arraytype eq + { + makefont + } + { + scalefont + } ifelse + setfont + } bind def + } if + /cshow where not + { + /cshow + { + [ + 0 0 5 -1 roll aload pop + ] cvx bind forall + } bind def + } if + } if + cleartomark + /anyColor? + { + add add add 0 ne + } bind def + /testColor + { + gsave + setcmykcolor currentcmykcolor + grestore + } bind def + /testCMYKColorThrough + { + testColor anyColor? + } bind def + userdict /composite? + level2? + { + gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore + add add add 4 eq + } + { + 1 0 0 0 testCMYKColorThrough + 0 1 0 0 testCMYKColorThrough + 0 0 1 0 testCMYKColorThrough + 0 0 0 1 testCMYKColorThrough + and and and + } ifelse + put + composite? not + { + userdict begin + gsave + /cyan? 1 0 0 0 testCMYKColorThrough def + /magenta? 0 1 0 0 testCMYKColorThrough def + /yellow? 0 0 1 0 testCMYKColorThrough def + /black? 0 0 0 1 testCMYKColorThrough def + grestore + /isCMYKSep? cyan? magenta? yellow? black? or or or def + /customColor? isCMYKSep? not def + end + } if + end defaultpacking setpacking +%%EndResource +%%BeginResource: procset Adobe_typography_AI5 1.0 1 +%%Title: (Typography Operators) +%%Version: 1.0 +%%CreationDate:(03/26/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_typography_AI5 54 dict dup begin +put +/initialize +{ + begin + begin + Adobe_typography_AI5 begin + Adobe_typography_AI5 + { + dup xcheck + { + bind + } if + pop pop + } forall + end + end + end + Adobe_typography_AI5 begin +} def +/terminate +{ + currentdict Adobe_typography_AI5 eq + { + end + } if +} def +/modifyEncoding +{ + /_tempEncode exch ddef + /_pntr 0 ddef + { + counttomark -1 roll + dup type dup /marktype eq + { + pop pop exit + } + { + /nametype eq + { + _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll + put + } + { + /_pntr exch ddef + } ifelse + } ifelse + } loop + _tempEncode +} def +/TE +{ + StandardEncoding 256 array copy modifyEncoding + /_nativeEncoding exch def +} def +% +/TZ +{ + dup type /arraytype eq + { + /_wv exch def + } + { + /_wv 0 def + } ifelse + /_useNativeEncoding exch def + pop pop + findfont _wv type /arraytype eq + { + _wv makeblendedfont + } if + dup length 2 add dict + begin + mark exch + { + 1 index /FID ne + { + def + } if + cleartomark mark + } forall + pop + /FontName exch def + counttomark 0 eq + { + 1 _useNativeEncoding eq + { + /Encoding _nativeEncoding def + } if + cleartomark + } + { + /Encoding load 256 array copy + modifyEncoding /Encoding exch def + } ifelse + FontName currentdict + end + definefont pop +} def +/tr +{ + _ax _ay 3 2 roll +} def +/trj +{ + _cx _cy _sp _ax _ay 6 5 roll +} def +/a0 +{ + /Tx + { + dup + currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + } ddef + /Tj + { + dup + currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + } ddef +} def +/a1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/e0 +{ + /Tx + { + tr _psf + } ddef + /Tj + { + trj _pjsf + } ddef +} def +/e1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + tr _psf + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + trj _pjsf + grestore 3 1 roll moveto tr jsp + } ddef +} def +/i0 +{ + /Tx + { + tr sp + } ddef + /Tj + { + trj jsp + } ddef +} def +/i1 +{ + W N +} def +/o0 +{ + /Tx + { + tr sw rmoveto + } ddef + /Tj + { + trj swj rmoveto + } ddef +} def +/r0 +{ + /Tx + { + tr _ctm _pss + } ddef + /Tj + { + trj _ctm _pjss + } ddef +} def +/r1 +{ + /Tx + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/To +{ + pop _ctm currentmatrix pop +} def +/TO +{ + iTe _ctm setmatrix newpath +} def +/Tp +{ + pop _tm astore pop _ctm setmatrix + _tDict begin + /W + { + } def + /h + { + } def +} def +/TP +{ + end + iTm 0 0 moveto +} def +/Tr +{ + _render 3 le + { + currentpoint newpath moveto + } if + dup 8 eq + { + pop 0 + } + { + dup 9 eq + { + pop 1 + } if + } ifelse + dup /_render exch ddef + _renderStart exch get load exec +} def +/iTm +{ + _ctm setmatrix _tm concat 0 _rise translate _hs 1 scale +} def +/Tm +{ + _tm astore pop iTm 0 0 moveto +} def +/Td +{ + _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto +} def +/iTe +{ + _render -1 eq + { + } + { + _renderEnd _render get dup null ne + { + load exec + } + { + pop + } ifelse + } ifelse + /_render -1 ddef +} def +/Ta +{ + pop +} def +/Tf +{ + dup 1000 div /_fScl exch ddef +% + selectfont +} def +/Tl +{ + pop + 0 exch _leading astore pop +} def +/Tt +{ + pop +} def +/TW +{ + 3 npop +} def +/Tw +{ + /_cx exch ddef +} def +/TC +{ + 3 npop +} def +/Tc +{ + /_ax exch ddef +} def +/Ts +{ + /_rise exch ddef + currentpoint + iTm + moveto +} def +/Ti +{ + 3 npop +} def +/Tz +{ + 100 div /_hs exch ddef + iTm +} def +/TA +{ + pop +} def +/Tq +{ + pop +} def +/Th +{ + pop pop pop pop pop +} def +/TX +{ + pop +} def +/Tk +{ + exch pop _fScl mul neg 0 rmoveto +} def +/TK +{ + 2 npop +} def +/T* +{ + _leading aload pop neg Td +} def +/T*- +{ + _leading aload pop Td +} def +/T- +{ + _ax neg 0 rmoveto + _hyphen Tx +} def +/T+ +{ +} def +/TR +{ + _ctm currentmatrix pop + _tm astore pop + iTm 0 0 moveto +} def +/TS +{ + currentfont 3 1 roll + /_Symbol_ _fScl 1000 mul selectfont + + 0 eq + { + Tx + } + { + Tj + } ifelse + setfont +} def +/Xb +{ + pop pop +} def +/Tb /Xb load def +/Xe +{ + pop pop pop pop +} def +/Te /Xe load def +/XB +{ +} def +/TB /XB load def +currentdict readonly pop +end +setpacking +%%EndResource +%%BeginProcSet: Adobe_ColorImage_AI6 1.0 0 +userdict /Adobe_ColorImage_AI6 known not +{ + userdict /Adobe_ColorImage_AI6 17 dict put +} if +userdict /Adobe_ColorImage_AI6 get begin + + /initialize + { + Adobe_ColorImage_AI6 begin + Adobe_ColorImage_AI6 + { + dup type /arraytype eq + { + dup xcheck + { + bind + } if + } if + pop pop + } forall + } def + /terminate { end } def + + currentdict /Adobe_ColorImage_AI6_Vars known not + { + /Adobe_ColorImage_AI6_Vars 14 dict def + } if + + Adobe_ColorImage_AI6_Vars begin + /channelcount 0 def + /sourcecount 0 def + /sourcearray 4 array def + /plateindex -1 def + /XIMask 0 def + /XIBinary 0 def + /XIChannelCount 0 def + /XIBitsPerPixel 0 def + /XIImageHeight 0 def + /XIImageWidth 0 def + /XIImageMatrix null def + /XIBuffer null def + /XIDataProc null def + end + + /WalkRGBString null def + /WalkCMYKString null def + + /StuffRGBIntoGrayString null def + /RGBToGrayImageProc null def + /StuffCMYKIntoGrayString null def + /CMYKToGrayImageProc null def + /ColorImageCompositeEmulator null def + + /SeparateCMYKImageProc null def + + /FourEqual null def + /TestPlateIndex null def + + currentdict /_colorimage known not + { + /colorimage where + { + /colorimage get /_colorimage exch def + } + { + /_colorimage null def + } ifelse + } if + + /_currenttransfer systemdict /currenttransfer get def + + /colorimage null def + /XI null def + + + /WalkRGBString + { + 0 3 index + + dup length 1 sub 0 3 3 -1 roll + { + 3 getinterval { } forall + + 5 index exec + + 3 index + } for + + 5 { pop } repeat + + } def + + + /WalkCMYKString + { + 0 3 index + + dup length 1 sub 0 4 3 -1 roll + { + 4 getinterval { } forall + + 6 index exec + + 3 index + + } for + + 5 { pop } repeat + + } def + + + /StuffRGBIntoGrayString + { + .11 mul exch + + .59 mul add exch + + .3 mul add + + cvi 3 copy put + + pop 1 add + } def + + + /RGBToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 3 idiv string + dup 3 1 roll + + /StuffRGBIntoGrayString load exch + WalkRGBString + end + } def + + + /StuffCMYKIntoGrayString + { + exch .11 mul add + + exch .59 mul add + + exch .3 mul add + + dup 255 gt { pop 255 } if + + 255 exch sub cvi 3 copy put + + pop 1 add + } def + + + /CMYKToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 4 idiv string + dup 3 1 roll + + /StuffCMYKIntoGrayString load exch + WalkCMYKString + end + } def + + + /ColorImageCompositeEmulator + { + pop true eq + { + Adobe_ColorImage_AI6_Vars /sourcecount get 5 add { pop } repeat + } + { + Adobe_ColorImage_AI6_Vars /channelcount get 1 ne + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 3 -1 roll put + + channelcount 3 eq + { + /RGBToGrayImageProc + } + { + /CMYKToGrayImageProc + } ifelse + load + end + } if + image + } ifelse + } def + + + /SeparateCMYKImageProc + { + Adobe_ColorImage_AI6_Vars begin + + sourcecount 0 ne + { + sourcearray plateindex get exec + } + { + sourcearray 0 get exec + + dup length 4 idiv string + + 0 2 index + + plateindex 4 2 index length 1 sub + { + get 255 exch sub + + 3 copy put pop 1 add + + 2 index + } for + + pop pop exch pop + } ifelse + end + } def + + + /FourEqual + { + 4 index ne + { + pop pop pop false + } + { + 4 index ne + { + pop pop false + } + { + 4 index ne + { + pop false + } + { + 4 index eq + } ifelse + } ifelse + } ifelse + } def + + + /TestPlateIndex + { + Adobe_ColorImage_AI6_Vars begin + /plateindex -1 def + + /setcmykcolor where + { + pop + gsave + 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub + grestore + + 1 0 0 0 FourEqual + { + /plateindex 0 def + } + { + 0 1 0 0 FourEqual + { + /plateindex 1 def + } + { + 0 0 1 0 FourEqual + { + /plateindex 2 def + } + { + 0 0 0 1 FourEqual + { + /plateindex 3 def + } + { + 0 0 0 0 FourEqual + { + /plateindex 5 def + } if + } ifelse + } ifelse + } ifelse + } ifelse + pop pop pop pop + } if + plateindex + end + } def + + + /colorimage + { + Adobe_ColorImage_AI6_Vars begin + /channelcount 1 index def + /sourcecount 2 index 1 eq { channelcount 1 sub } { 0 } ifelse def + + 4 sourcecount add index dup + 8 eq exch 1 eq or not + end + + { + /_colorimage load null ne + { + _colorimage + } + { + Adobe_ColorImage_AI6_Vars /sourcecount get + 7 add { pop } repeat + } ifelse + } + { + dup 3 eq + TestPlateIndex + dup -1 eq exch 5 eq or or + { + /_colorimage load null eq + { + ColorImageCompositeEmulator + } + { + dup 1 eq + { + pop pop image + } + { + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + gsave + + 0 _currenttransfer exec + 1 _currenttransfer exec + eq + { 0 _currenttransfer exec 0.5 lt } + { 0 _currenttransfer exec 1 _currenttransfer exec gt } ifelse + + { { pop 0 } } { { pop 1 } } ifelse + systemdict /settransfer get exec + } if + + _colorimage + + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + grestore + } if + } ifelse + } ifelse + } + { + dup 1 eq + { + pop pop + image + } + { + pop pop + + Adobe_ColorImage_AI6_Vars begin + sourcecount -1 0 + { + exch sourcearray 3 1 roll put + } for + + /SeparateCMYKImageProc load + end + + systemdict /image get exec + } ifelse + } ifelse + } ifelse + } def + + /XI + { + Adobe_ColorImage_AI6_Vars begin + gsave + /XIMask exch 0 ne def + /XIBinary exch 0 ne def + pop + pop + /XIChannelCount exch def + /XIBitsPerPixel exch def + /XIImageHeight exch def + /XIImageWidth exch def + pop pop pop pop + /XIImageMatrix exch def + + XIBitsPerPixel 1 eq + { + XIImageWidth 8 div ceiling cvi + } + { + XIImageWidth XIChannelCount mul + } ifelse + /XIBuffer exch string def + + XIBinary + { + /XIDataProc { currentfile XIBuffer readstring pop } def + currentfile 128 string readline pop pop + } + { + /XIDataProc { currentfile XIBuffer readhexstring pop } def + } ifelse + + 0 0 moveto + XIImageMatrix concat + XIImageWidth XIImageHeight scale + + XIMask + { + XIImageWidth XIImageHeight + false + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + /_lp /null ddef + _fc + /_lp /imagemask ddef + + imagemask + } + { + XIImageWidth XIImageHeight + XIBitsPerPixel + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + XIChannelCount 1 eq + { + + gsave + 0 setgray + + image + + grestore + } + { + false + XIChannelCount + colorimage + } ifelse + } ifelse + grestore + end + } def + +end +%%EndProcSet +%%BeginResource: procset Adobe_Illustrator_AI5 1.1 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Full Prolog) +%%Version: 1.1 +%%CreationDate: (3/7/1994) () +%%Copyright: ((C) 1987-1994 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_Illustrator_AI5_vars 81 dict dup begin +put +/_eo false def +/_lp /none def +/_pf +{ +} def +/_ps +{ +} def +/_psf +{ +} def +/_pss +{ +} def +/_pjsf +{ +} def +/_pjss +{ +} def +/_pola 0 def +/_doClip 0 def +/cf currentflat def +/_tm matrix def +/_renderStart +[ +/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 +] def +/_renderEnd +[ +null null null null /i1 /i1 /i1 /i1 +] def +/_render -1 def +/_rise 0 def +/_ax 0 def +/_ay 0 def +/_cx 0 def +/_cy 0 def +/_leading +[ +0 0 +] def +/_ctm matrix def +/_mtx matrix def +/_sp 16#020 def +/_hyphen (-) def +/_fScl 0 def +/_cnt 0 def +/_hs 1 def +/_nativeEncoding 0 def +/_useNativeEncoding 0 def +/_tempEncode 0 def +/_pntr 0 def +/_tDict 2 dict def +/_wv 0 def +/Tx +{ +} def +/Tj +{ +} def +/CRender +{ +} def +/_AI3_savepage +{ +} def +/_gf null def +/_cf 4 array def +/_if null def +/_of false def +/_fc +{ +} def +/_gs null def +/_cs 4 array def +/_is null def +/_os false def +/_sc +{ +} def +/_pd 1 dict def +/_ed 15 dict def +/_pm matrix def +/_fm null def +/_fd null def +/_fdd null def +/_sm null def +/_sd null def +/_sdd null def +/_i null def +/discardSave null def +/buffer 256 string def +/beginString null def +/endString null def +/endStringLength null def +/layerCnt 1 def +/layerCount 1 def +/perCent (%) 0 get def +/perCentSeen? false def +/newBuff null def +/newBuffButFirst null def +/newBuffLast null def +/clipForward? false def +end +userdict /Adobe_Illustrator_AI5 known not { + userdict /Adobe_Illustrator_AI5 91 dict put +} if +userdict /Adobe_Illustrator_AI5 get begin +/initialize +{ + Adobe_Illustrator_AI5 dup begin + Adobe_Illustrator_AI5_vars begin + discardDict + { + bind pop pop + } forall + dup /nc get begin + { + dup xcheck 1 index type /operatortype ne and + { + bind + } if + pop pop + } forall + end + newpath +} def +/terminate +{ + end + end +} def +/_ +null def +/ddef +{ + Adobe_Illustrator_AI5_vars 3 1 roll put +} def +/xput +{ + dup load dup length exch maxlength eq + { + dup dup load dup + length 2 mul dict copy def + } if + load begin + def + end +} def +/npop +{ + { + pop + } repeat +} def +/sw +{ + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add +} def +/swj +{ + dup 4 1 roll + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add + 6 2 roll /_cnt 0 ddef + { + 1 index eq + { + /_cnt _cnt 1 add ddef + } if + } forall + pop + exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop +} def +/ss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put pop + gsave + false charpath currentpoint + 4 index setmatrix + stroke + grestore + moveto + 2 copy rmoveto + } exch cshow + 3 npop +} def +/jss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put + gsave + _sp eq + { + exch 6 index 6 index 6 index 5 -1 roll widthshow + currentpoint + } + { + false charpath currentpoint + 4 index setmatrix stroke + } ifelse + grestore + moveto + 2 copy rmoveto + } exch cshow + 6 npop +} def +/sp +{ + { + 2 npop (0) exch + 2 copy 0 exch put pop + false charpath + 2 copy rmoveto + } exch cshow + 2 npop +} def +/jsp +{ + { + 2 npop + (0) exch 2 copy 0 exch put + _sp eq + { + exch 5 index 5 index 5 index 5 -1 roll widthshow + } + { + false charpath + } ifelse + 2 copy rmoveto + } exch cshow + 5 npop +} def +/pl +{ + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform +} def +/setstrokeadjust where +{ + pop true setstrokeadjust + /c + { + curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll curveto + } def + /V + /v load def + /y + { + 2 copy curveto + } def + /Y + /y load def + /l + { + lineto + } def + /L + /l load def + /m + { + moveto + } def +} +{ + /c + { + pl curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll pl curveto + } def + /V + /v load def + /y + { + pl 2 copy curveto + } def + /Y + /y load def + /l + { + pl lineto + } def + /L + /l load def + /m + { + pl moveto + } def +} ifelse +/d +{ + setdash +} def +/cf +{ +} def +/i +{ + dup 0 eq + { + pop cf + } if + setflat +} def +/j +{ + setlinejoin +} def +/J +{ + setlinecap +} def +/M +{ + setmiterlimit +} def +/w +{ + setlinewidth +} def +/XR +{ + 0 ne + /_eo exch ddef +} def +/H +{ +} def +/h +{ + closepath +} def +/N +{ + _pola 0 eq + { + _doClip 1 eq + { + _eo {eoclip} {clip} ifelse /_doClip 0 ddef + } if + newpath + } + { + /CRender + { + N + } ddef + } ifelse +} def +/n +{ + N +} def +/F +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc + /_doClip 0 ddef + } + { + _pf + } ifelse + } + { + /CRender + { + F + } ddef + } ifelse +} def +/f +{ + closepath + F +} def +/S +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + _ps + } ifelse + } + { + /CRender + { + S + } ddef + } ifelse +} def +/s +{ + closepath + S +} def +/B +{ + _pola 0 eq + { + _doClip 1 eq + gsave F grestore + { + gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + S + } ifelse + } + { + /CRender + { + B + } ddef + } ifelse +} def +/b +{ + closepath + B +} def +/W +{ + /_doClip 1 ddef +} def +/* +{ + count 0 ne + { + dup type /stringtype eq + { + pop + } if + } if + newpath +} def +/u +{ +} def +/U +{ +} def +/q +{ + _pola 0 eq + { + gsave + } if +} def +/Q +{ + _pola 0 eq + { + grestore + } if +} def +/*u +{ + _pola 1 add /_pola exch ddef +} def +/*U +{ + _pola 1 sub /_pola exch ddef + _pola 0 eq + { + CRender + } if +} def +/D +{ + pop +} def +/*w +{ +} def +/*W +{ +} def +/` +{ + /_i save ddef + clipForward? + { + nulldevice + } if + 6 1 roll 4 npop + concat pop + userdict begin + /showpage + { + } def + 0 setgray + 0 setlinecap + 1 setlinewidth + 0 setlinejoin + 10 setmiterlimit + [] 0 setdash + /setstrokeadjust where {pop false setstrokeadjust} if + newpath + 0 setgray + false setoverprint +} def +/~ +{ + end + _i restore +} def +/O +{ + 0 ne + /_of exch ddef + /_lp /none ddef +} def +/R +{ + 0 ne + /_os exch ddef + /_lp /none ddef +} def +/g +{ + /_gf exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _gf setgray + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/G +{ + /_gs exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _gs setgray + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/k +{ + _cf astore pop + /_fc + { + _lp /fill ne + { + _of setoverprint + _cf aload pop setcmykcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/K +{ + _cs astore pop + /_sc + { + _lp /stroke ne + { + _os setoverprint + _cs aload pop setcmykcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/x +{ + /_gf exch ddef + findcmykcustomcolor + /_if exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _if _gf 1 exch sub setcustomcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/X +{ + /_gs exch ddef + findcmykcustomcolor + /_is exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _is _gs 1 exch sub setcustomcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/A +{ + pop +} def +/annotatepage +{ +userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse +} def +/XT { + pop pop +} def +/discard +{ + save /discardSave exch store + discardDict begin + /endString exch store + gt38? + { + 2 add + } if + load + stopped + pop + end + discardSave restore +} bind def +userdict /discardDict 7 dict dup begin +put +/pre38Initialize +{ + /endStringLength endString length store + /newBuff buffer 0 endStringLength getinterval store + /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store + /newBuffLast newBuff endStringLength 1 sub 1 getinterval store +} def +/shiftBuffer +{ + newBuff 0 newBuffButFirst putinterval + newBuffLast 0 + currentfile read not + { + stop + } if + put +} def +0 +{ + pre38Initialize + mark + currentfile newBuff readstring exch pop + { + { + newBuff endString eq + { + cleartomark stop + } if + shiftBuffer + } loop + } + { + stop + } ifelse +} def +1 +{ + pre38Initialize + /beginString exch store + mark + currentfile newBuff readstring exch pop + { + { + newBuff beginString eq + { + /layerCount dup load 1 add store + } + { + newBuff endString eq + { + /layerCount dup load 1 sub store + layerCount 0 eq + { + cleartomark stop + } if + } if + } ifelse + shiftBuffer + } loop + } if +} def +2 +{ + mark + { + currentfile buffer readline not + { + stop + } if + endString eq + { + cleartomark stop + } if + } loop +} def +3 +{ + /beginString exch store + /layerCnt 1 store + mark + { + currentfile buffer readline not + { + stop + } if + dup beginString eq + { + pop /layerCnt dup load 1 add store + } + { + endString eq + { + layerCnt 1 eq + { + cleartomark stop + } + { + /layerCnt dup load 1 sub store + } ifelse + } if + } ifelse + } loop +} def +end +userdict /clipRenderOff 15 dict dup begin +put +{ + /n /N /s /S /f /F /b /B +} +{ + { + _doClip 1 eq + { + /_doClip 0 ddef _eo {eoclip} {clip} ifelse + } if + newpath + } def +} forall +/Tr /pop load def +/Bb {} def +/BB /pop load def +/Bg {12 npop} def +/Bm {6 npop} def +/Bc /Bm load def +/Bh {4 npop} def +end +/Lb +{ + 4 npop + 6 1 roll + pop + 4 1 roll + pop pop pop + 0 eq + { + 0 eq + { + (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard + } + { + + /clipForward? true def + + /Tx /pop load def + /Tj /pop load def + + currentdict end clipRenderOff begin begin + } ifelse + } + { + 0 eq + { + save /discardSave exch store + } if + } ifelse +} bind def +/LB +{ + discardSave dup null ne + { + restore + } + { + pop + clipForward? + { + currentdict + end + end + begin + + /clipForward? false ddef + } if + } ifelse +} bind def +/Pb +{ + pop pop + 0 (%AI5_EndPalette) discard +} bind def +/Np +{ + 0 (%AI5_End_NonPrinting--) discard +} bind def +/Ln /pop load def +/Ap +/pop load def +/Ar +{ + 72 exch div + 0 dtransform dup mul exch dup mul add sqrt + dup 1 lt + { + pop 1 + } if + setflat +} def +/Mb +{ + q +} def +/Md +{ +} def +/MB +{ + Q +} def +/nc 3 dict def +nc begin +/setgray +{ + pop +} bind def +/setcmykcolor +{ + 4 npop +} bind def +/setcustomcolor +{ + 2 npop +} bind def +currentdict readonly pop +end +end +setpacking +%%EndResource +%%EndProlog +%%BeginSetup +%%IncludeFont: Univers +Adobe_level2_AI5 /initialize get exec +Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_typography_AI5 /initialize get exec +Adobe_ColorImage_AI6 /initialize get exec +Adobe_Illustrator_AI5 /initialize get exec +[ +39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis +/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute +/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde +/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex +/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls +/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash +/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef +/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash +/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef +/guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe +/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide +/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright +/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand +/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex +/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex +/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla +/hungarumlaut/ogonek/caron +TE +%AI3_BeginEncoding: _Univers Univers +[/_Univers/Univers 0 0 1 TZ +%AI3_EndEncoding AdobeType +%AI5_Begin_NonPrinting +Np +8 Bn +%AI5_BeginGradient: (Black & White) +(Black & White) 0 2 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Green & Blue) +(Green & Blue) 0 2 Bd +[ +< +99999A9A9B9B9B9C9C9D9D9D9E9E9F9F9FA0A0A1A1A1A2A2A3A3A3A4A4A5A5A5A6A6A7A7A7A8A8A9 +A9A9AAAAABABABACACADADADAEAEAFAFAFB0B0B1B1B1B2B2B3B3B3B4B4B5B5B5B6B6B7B7B7B8B8B9 +B9B9BABABBBBBBBCBCBDBDBDBEBEBFBFBFC0C0C1C1C1C2C2C3C3C3C4C4C5C5C5C6C6C7C7C7C8C8C9 +C9C9CACACBCBCBCCCCCDCDCDCECECFCFCFD0D0D1D1D1D2D2D3D3D3D4D4D5D5D5D6D6D7D7D7D8D8D9 +D9D9DADADBDBDBDCDCDDDDDDDEDEDFDFDFE0E0E1E1E1E2E2E3E3E3E4E4E5E5E5E6E6E7E7E7E8E8E9 +E9E9EAEAEBEBEBECECEDEDEDEEEEEFEFEFF0F0F1F1F1F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F9 +F9F9FAFAFBFBFBFCFCFDFDFDFEFEFFFF +> +< +000102020304050506070808090A0B0B0C0D0E0E0F101111121314141516171718191A1A1B1C1D1D +1E1F20202122232324252626272829292A2B2C2C2D2E2F2F303132323334353536373838393A3B3B +3C3D3E3E3F404141424344444546474748494A4A4B4C4D4D4E4F5050515253535455565657585959 +5A5B5C5C5D5E5F5F606162626364656566676868696A6B6B6C6D6E6E6F7071717273747475767777 +78797A7A7B7C7D7D7E7F80808182828384858586878888898A8B8B8C8D8E8E8F9091919293949495 +96979798999A9A9B9C9D9D9E9FA0A0A1A2A3A3A4A5A6A6A7A8A9A9AAABACACADAEAFAFB0B1B2B2B3 +B4B5B5B6B7B8B8B9BABBBBBCBDBEBEBF +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +[ +1 0.75 0 0 1 50 100 %_Bs +0.6 0 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Pink, Yellow, Green) +(Pink, Yellow, Green) 0 3 Bd +[ +< +00000000000000000000000000000000000000010101010101010101010101010101010101010101 +01010101010202020202020202020202020202020202020202020203030303030303030303030303 +03030303030303030404040404040404040404040404040404040404050505050505050505050505 +05050505050505060606060606060606060606060606060606060707070707070707070707070707 +07070707080808080808080808080808080808080809090909090909090909090909090909090A0A +0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C +0C0C0C0C0C0C0C0D0D0D0D0D +> +< +050506060606070708080809090A0A0A0B0B0C0C0D0D0E0E0F0F1010111112121313141415151617 +17181819191A1A1B1C1C1D1D1E1F1F202021222223232425252626272828292A2A2B2C2C2D2D2E2F +2F3031313233333435353637373839393A3B3B3C3D3E3E3F4040414242434445454647474849494A +4B4C4C4D4E4F4F505151525354545556575758595A5A5B5C5C5D5E5F5F6061626363646566666768 +69696A6B6C6C6D6E6F707071727373747576777778797A7B7B7C7D7E7F7F80818283838485868787 +88898A8B8B8C8D8E8F8F9091929394949596979898999A9B9C9D9D9E9FA0A1A2A2A3A4A5A6A7A7A8 +A9AAABACADADAEAFB0B1B2B2 +> +< +CCCCCBCBCBCACACAC9C9C8C8C7C7C6C6C5C5C4C4C3C2C2C1C1C0C0BFBEBEBDBDBCBBBBBAB9B9B8B7 +B7B6B6B5B4B4B3B2B1B1B0AFAFAEADADACABAAAAA9A8A8A7A6A5A5A4A3A2A2A1A0A09F9E9D9C9C9B +9A999998979696959493929291908F8E8E8D8C8B8A8A8988878686858483828181807F7E7D7C7C7B +7A7978777776757473727171706F6E6D6C6B6A6A69686766656463636261605F5E5D5C5B5B5A5958 +5756555453525151504F4E4D4C4B4A49484746464544434241403F3E3D3C3B3A3938383736353433 +3231302F2E2D2C2B2A29282726252423222221201F1E1D1C1B1A191817161514131211100F0E0D0C +0B0A09080706050403020100 +> +0 +1 %_Br +< +737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5B5A59585756555453525150504F4E +4D4C4B4A4949484746454443434241403F3E3E3D3C3B3A3A393837363635343333323130302F2E2D +2D2C2B2A2A29282827262525242323222121201F1F1E1D1D1C1C1B1A1A1918181717161615141413 +1312121111100F0F0E0E0D0D0C0C0C0B0B0A0A090908080807070606060505050404040303030202 +020201010101010000000000 +> +< +00000000000000000000000001010101010101010101010101010101010101010101010102020202 +02020202020202020202020202020202020202020202030303030303030303030303030303030303 +03030303030303030303030303040404040404040404040404040404040404040404040404040404 +04040404040404040404050505050505050505050505050505050505050505050505050505050505 +050505050505050505050505 +> +< +BFBFBFC0C0C0C0C0C0C0C0C0C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C2C2C3C3C3C3C3C3C3C3C3 +C3C4C4C4C4C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C6C6C6C7C7C7C7C7C7 +C7C7C7C7C7C7C8C8C8C8C8C8C8C8C8C8C8C8C8C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9CACACACACACA +CACACACACACACACACACACBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCCCCCCCCCC +> +0 +1 %_Br +[ +0.05 0.7 0 0 1 50 100 %_Bs +0 0.02 0.8 0 1 57 36 %_Bs +0.45 0 0.75 0 1 37 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Purple, Red & Yellow) +(Purple, Red & Yellow) 0 3 Bd +[ +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A +> +< +CCCCCCCDCDCDCDCDCECECECECECFCFCFCFD0D0D0D0D0D1D1D1D1D1D2D2D2D2D2D3D3D3D3D3D4D4D4 +D4D5D5D5D5D5D6D6D6D6D6D7D7D7D7D7D8D8D8D8D8D9D9D9D9DADADADADADBDBDBDBDBDCDCDCDCDC +DDDDDDDDDDDEDEDEDEDFDFDFDFDFE0E0E0E0E0E1E1E1E1E1E2E2E2E2E2E3E3E3E3E4E4E4E4E4E5E5 +E5E5E5E6E6E6E6E6E7E7E7E7E7E8E8E8E8E9E9E9E9E9EAEAEAEAEAEBEBEBEBEBECECECECECEDEDED +EDEEEEEEEEEEEFEFEFEFEFF0F0F0F0F0F1F1F1F1F1F2F2F2F2F3F3F3F3F3F4F4F4F4F4F5F5F5F5F5 +F6F6F6F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFAFAFBFBFBFBFBFCFCFCFCFDFDFDFDFDFEFE +FEFEFEFFFFFF +> +0 +1 %_Br +< +E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBE +BDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A99989796 +9594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B7A797877767574737271706F6E +6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A49484746 +4544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E +1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403020100 +> +< +E5E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9EAEAEAEA +EAEAEAEAEAEBEBEBEBEBEBEBEBEBECECECECECECECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEE +EEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F3F3F3 +F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 +F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFCFC +FCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFF +> +< +00010203040405060708090A0B0C0C0D0E0F10111213141415161718191A1B1C1D1D1E1F20212223 +242525262728292A2B2C2D2D2E2F30313233343535363738393A3B3C3D3D3E3F4041424344454546 +4748494A4B4C4D4E4E4F50515253545556565758595A5B5C5D5E5E5F60616263646566666768696A +6B6C6D6E6E6F70717273747576767778797A7B7C7D7E7F7F80818283848586878788898A8B8C8D8E +8F8F90919293949596979798999A9B9C9D9E9F9FA0A1A2A3A4A5A6A7A7A8A9AAABACADAEAFAFB0B1 +B2B3B4B5B6B7B8B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C8C9CACBCC +> +0 +1 %_Br +[ +0 0.04 1 0 1 50 100 %_Bs +0 1 0.8 0 1 50 50 %_Bs +0.9 0.9 0 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Rainbow) +(Rainbow) 0 6 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +0 +1 %_Br +1 +< +0708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E +2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556 +5758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E +7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6 +A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCE +CFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6 +F7F8F9FAFBFCFDFEFF +> +0 +0 +1 %_Br +1 +< +00000000000000000000000000000000000001010101010101010101010101010101010101010101 +01010101010101010101010101010202020202020202020202020202020202020202020202020202 +02020202020202020202030303030303030303030303030303030303030303030303030303030303 +03030303030304040404040404040404040404040404040404040404040404040404040404040404 +04040505050505050505050505050505050505050505050505050505050505050505050505050606 +06060606060606060606060606060606060606060606060606060606060606060606070707070707 +07070707070707070707070707070707 +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 +1 +0 +1 %_Br +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +1 %_Br +[ +0 1 0 0 1 50 100 %_Bs +1 1 0 0 1 50 80 %_Bs +1 0.0279 0 0 1 50 60 %_Bs +1 0 1 0 1 50 40 %_Bs +0 0 1 0 1 50 20 %_Bs +0 1 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Steel Bar) +(Steel Bar) 0 3 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 70 %_Bs +0 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Orange Radial) +(Yellow & Orange Radial) 1 2 Bd +[ +0 +< +0001010203040506060708090A0B0C0C0D0E0F10111213131415161718191A1B1C1D1D1E1F202122 +232425262728292A2B2B2C2D2E2F303132333435363738393A3B3C3D3E3E3F404142434445464748 +494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60606162636465666768696A6B6C6D6E6F +707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C +> +< +FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9 +F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2 +F2F2F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEDEDEDEDEDEDECECECECECEBEBEBEBEB +EBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E8E8E8E7E7E7E7E7E6E6E6E6E6E5 +> +0 +1 %_Br +[ +0 0 1 0 1 52 19 %_Bs +0 0.55 0.9 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Purple Radial) +(Yellow & Purple Radial) 1 2 Bd +[ +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +< +1415161718191A1B1C1D1E1F1F202122232425262728292A2A2B2C2D2E2F30313233343536363738 +393A3B3C3D3E3F40414142434445464748494A4B4C4D4D4E4F50515253545556575858595A5B5C5D +5E5F60616263646465666768696A6B6C6D6E6F6F707172737475767778797A7B7B7C7D7E7F808182 +83848586868788898A8B8C8D8E8F90919292939495969798999A9B9C9D9D9E9FA0A1A2A3A4A5A6A7 +A8A9A9AAABACADAEAFB0B1B2B3B4B4B5B6B7B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C9CACBCB +CCCDCECFD0D1D2D3D4D5D6D7D7D8D9DADBDCDDDEDFE0E1E2E2E3E4E5E6E7E8E9EAEBECEDEEEEEFF0 +F1F2F3F4F5F6F7F8F9F9FAFBFCFDFEFF +> +< +ABAAAAA9A8A7A7A6A5A5A4A3A3A2A1A1A09F9F9E9D9D9C9B9B9A9999989797969595949393929191 +908F8F8E8D8D8C8B8B8A8989888787868585848383828181807F7F7E7D7D7C7B7B7A797978777776 +7575747373727171706F6F6E6D6D6C6B6B6A6969686767666565646362626160605F5E5E5D5C5C5B +5A5A5958585756565554545352525150504F4E4E4D4C4C4B4A4A4948484746464544444342424140 +403F3E3E3D3C3C3B3A3A3938383736363534343332323130302F2E2E2D2C2C2B2A2A292828272626 +25242423222121201F1F1E1D1D1C1B1B1A1919181717161515141313121111100F0F0E0D0D0C0B0B +0A090908070706050504030302010100 +> +0 +1 %_Br +[ +0 0.08 0.67 0 1 50 14 %_Bs +1 1 0 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_End_NonPrinting-- +%AI5_BeginPalette +0 2 Pb +Pn +Pc +1 g +Pc +0 g +Pc +0 0 0 0 k +Pc +0.75 g +Pc +0.5 g +Pc +0.25 g +Pc +0 g +Pc +Bb +2 (Black & White) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0 0 0 k +Pc +0.5 0 0 0 k +Pc +0.75 0 0 0 k +Pc +1 0 0 0 k +Pc +0.25 0.25 0 0 k +Pc +0.5 0.5 0 0 k +Pc +0.75 0.75 0 0 k +Pc +1 1 0 0 k +Pc +Bb +2 (Pink, Yellow, Green) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0 0 k +Pc +0 0.5 0 0 k +Pc +0 0.75 0 0 k +Pc +0 1 0 0 k +Pc +0 0.25 0.25 0 k +Pc +0 0.5 0.5 0 k +Pc +0 0.75 0.75 0 k +Pc +0 1 1 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Purple Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0 0.25 0 k +Pc +0 0 0.5 0 k +Pc +0 0 0.75 0 k +Pc +0 0 1 0 k +Pc +0.25 0 0.25 0 k +Pc +0.5 0 0.5 0 k +Pc +0.75 0 0.75 0 k +Pc +1 0 1 0 k +Pc +Bb +2 (Rainbow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0 0 k +Pc +0.5 0.25 0 0 k +Pc +0.75 0.375 0 0 k +Pc +1 0.5 0 0 k +Pc +0.125 0.25 0 0 k +Pc +0.25 0.5 0 0 k +Pc +0.375 0.75 0 0 k +Pc +0.5 1 0 0 k +Pc +Bb +2 (Steel Bar) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0.125 0 k +Pc +0 0.5 0.25 0 k +Pc +0 0.75 0.375 0 k +Pc +0 1 0.5 0 k +Pc +0 0.125 0.25 0 k +Pc +0 0.25 0.5 0 k +Pc +0 0.375 0.75 0 k +Pc +0 0.5 1 0 k +Pc +Bb +2 (Purple, Red & Yellow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0 0.25 0 k +Pc +0.25 0 0.5 0 k +Pc +0.375 0 0.75 0 k +Pc +0.5 0 1 0 k +Pc +0.25 0 0.125 0 k +Pc +0.5 0 0.25 0 k +Pc +0.75 0 0.375 0 k +Pc +1 0 0.5 0 k +Pc +Bb +2 (Green & Blue) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0.125 0 k +Pc +0.5 0.25 0.25 0 k +Pc +0.75 0.375 0.375 0 k +Pc +1 0.5 0.5 0 k +Pc +0.25 0.25 0.125 0 k +Pc +0.5 0.5 0.25 0 k +Pc +0.75 0.75 0.375 0 k +Pc +1 1 0.5 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Orange Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0.25 0.125 0 k +Pc +0.25 0.5 0.25 0 k +Pc +0.375 0.75 0.375 0 k +Pc +0.5 1 0.5 0 k +Pc +0.125 0.25 0.25 0 k +Pc +0.25 0.5 0.5 0 k +Pc +0.375 0.75 0.75 0 k +Pc +0.5 1 1 0 k +Pc +0 0 0 0 k +Pc +0.125 0.125 0.25 0 k +Pc +0.25 0.25 0.5 0 k +Pc +0.375 0.375 0.75 0 k +Pc +0.5 0.5 1 0 k +Pc +0.25 0.125 0.25 0 k +Pc +0.5 0.25 0.5 0 k +Pc +0.75 0.375 0.75 0 k +Pc +1 0.5 1 0 k +Pc +PB +%AI5_EndPalette +%%EndSetup +%AI5_BeginLayer +1 1 1 1 0 0 0 79 128 255 Lb +(Layer 1) Ln +0 A +800 Ar +0 J 0 j 1 w 4 M []0 d +%AI3_Note: +0 D +0 XR +-4014 283.5 m +4626 283.5 L +(N) * +453.5 4716 m +453.5 -3924 L +(N) * +85 4716 m +85 -3924 L +(N) * +-4014 765.5 m +4626 765.5 L +(N) * +u +1 Ap +0 R +0 G +415.1831 559.9902 m +434.752 559.9902 450.6162 569.5087 450.6162 581.25 c +450.6162 592.9914 434.752 602.5099 415.1831 602.5099 c +395.6142 602.5099 379.75 592.9914 379.75 581.25 c +379.75 569.5087 395.6142 559.9902 415.1831 559.9902 c +s +0 To +1 0 0 1 415.1831 577.8162 0 Tp +TP +-9.4434 0 Td +0 Tr +0 O +0 g +/_Univers 10 Tf +0 Ts +100 Tz +0 Tt +1 TA +%_ 0 XL +36 0 Xb +XB +0 0 5 TC +100 100 200 TW +0 0 0 Ti +1 Ta +0 0 2 2 3 Th +0 Tq +0 0 Tl +0 Tc +0 Tw +(MIB) Tx +(\r) TX +TO +U +u +0 R +0 G +341.4331 559.9902 m +361.002 559.9902 376.8662 569.5087 376.8662 581.25 c +376.8662 592.9914 361.002 602.5099 341.4331 602.5099 c +321.8642 602.5099 306 592.9914 306 581.25 c +306 569.5087 321.8642 559.9902 341.4331 559.9902 c +s +0 To +1 0 0 1 341.4331 577.8162 0 Tp +TP +-9.4434 0 Td +0 Tr +0 O +0 g +(MIB) Tx +(\r) TX +TO +U +u +0 R +0 G +267.6831 559.9902 m +287.252 559.9902 303.1162 569.5087 303.1162 581.25 c +303.1162 592.9914 287.252 602.5099 267.6831 602.5099 c +248.1142 602.5099 232.25 592.9914 232.25 581.25 c +232.25 569.5087 248.1142 559.9902 267.6831 559.9902 c +s +0 To +1 0 0 1 267.6831 577.8162 0 Tp +TP +-12.7747 0 Td +0 Tr +0 O +0 g +(Net if) Tx +(\r) TX +TO +U +u +0 R +0 G +415.1831 616.7402 m +434.752 616.7402 450.6162 626.2587 450.6162 638 c +450.6162 649.7414 434.752 659.2599 415.1831 659.2599 c +395.6142 659.2599 379.75 649.7414 379.75 638 c +379.75 626.2587 395.6142 616.7402 415.1831 616.7402 c +s +0 To +1 0 0 1 415.1831 634.5662 0 Tp +TP +-6.9446 0 Td +0 Tr +0 O +0 g +(SA) Tx +(\r) TX +TO +U +u +0 R +0 G +341.4331 616.7402 m +361.002 616.7402 376.8662 626.2587 376.8662 638 c +376.8662 649.7414 361.002 659.2599 341.4331 659.2599 c +321.8642 659.2599 306 649.7414 306 638 c +306 626.2587 321.8642 616.7402 341.4331 616.7402 c +s +0 To +1 0 0 1 341.4331 634.5662 0 Tp +TP +-8.3289 0 Td +0 Tr +0 O +0 g +(MA) Tx +(\r) TX +TO +U +u +0 R +0 G +267.6831 616.7402 m +287.252 616.7402 303.1162 626.2587 303.1162 638 c +303.1162 649.7414 287.252 659.2599 267.6831 659.2599 c +248.1142 659.2599 232.25 649.7414 232.25 638 c +232.25 626.2587 248.1142 616.7402 267.6831 616.7402 c +s +0 To +1 0 0 1 267.6831 640.5662 0 Tp +TP +-21.3855 0 Td +0 Tr +0 O +0 g +(symbolic\r) Tx +9.4434 -12 Td +(store) Tx +(\r) TX +TO +U +u +0 R +0 G +193.9331 616.7402 m +213.502 616.7402 229.3662 626.2587 229.3662 638 c +229.3662 649.7414 213.502 659.2599 193.9331 659.2599 c +174.3642 659.2599 158.5 649.7414 158.5 638 c +158.5 626.2587 174.3642 616.7402 193.9331 616.7402 c +s +0 To +1 0 0 1 193.9331 634.5662 0 Tp +TP +-23.8831 0 Td +0 Tr +0 O +0 g +(note store) Tx +(\r) TX +TO +U +u +0 R +0 G +120.4331 616.7402 m +140.002 616.7402 155.8662 626.2587 155.8662 638 c +155.8662 649.7414 140.002 659.2599 120.4331 659.2599 c +100.8642 659.2599 85 649.7414 85 638 c +85 626.2587 100.8642 616.7402 120.4331 616.7402 c +s +0 To +1 0 0 1 120.4331 634.5662 0 Tp +TP +-18.6096 0 Td +0 Tr +0 O +0 g +(local db) Tx +(\r) TX +TO +U +u +0 R +0 G +231 687.4902 m +250.5689 687.4902 266.4331 697.0087 266.4331 708.75 c +266.4331 720.4914 250.5689 730.0099 231 730.0099 c +211.4311 730.0099 195.5669 720.4914 195.5669 708.75 c +195.5669 697.0087 211.4311 687.4902 231 687.4902 c +s +0 To +1 0 0 1 231 705.3162 0 Tp +TP +-25 0 Td +0 Tr +0 O +0 g +(supervisor) Tx +(\r) TX +TO +U +0 Ap +0 R +0 G +96.6667 526 m +156.6667 526 l +S +0 To +1 0 0 1 171.6667 525 0 Tp +TP +-9.7229 0 Td +0 Tr +0 O +0 g +(Link) Tx +(\r) TX +TO +0 R +0 G +193.9331 659.2599 m +231 687.4902 l +267.6831 659.2599 l +S +231 687.4902 m +341.4331 659.2599 l +S +415.1831 659.2599 m +231 687.4902 l +120.4331 659.2599 l +S +341.4331 602.5 m +341.4331 616.7402 l +267.6831 602.5099 l +S +376.8662 638 m +379.75 638 l +S +415.1831 616.7402 m +415.1831 602.5099 l +S +LB +%AI5_EndLayer-- +%%PageTrailer +gsave annotatepage grestore showpage +%%Trailer +Adobe_Illustrator_AI5 /terminate get exec +Adobe_ColorImage_AI6 /terminate get exec +Adobe_typography_AI5 /terminate get exec +Adobe_level2_AI5 /terminate get exec +%%EOF diff --git a/lib/snmp/doc/src/snmp.gif b/lib/snmp/doc/src/snmp.gif Binary files differnew file mode 100644 index 0000000000..d9985f990b --- /dev/null +++ b/lib/snmp/doc/src/snmp.gif diff --git a/lib/snmp/doc/src/snmp.xml b/lib/snmp/doc/src/snmp.xml new file mode 100644 index 0000000000..af0833f005 --- /dev/null +++ b/lib/snmp/doc/src/snmp.xml @@ -0,0 +1,608 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>1996</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmp</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp.xml</file> + </header> + <module>snmp</module> + <modulesummary>Interface functions to the SNMP toolkit</modulesummary> + <description> + <p>The module <c>snmp</c> contains interface functions to the + SNMP toolkit.</p> + </description> + + <section> + <title>Common Data Types</title> + <p>The following data-types are used in the functions below: </p> + <list type="bulleted"> + <item> + <p><c>datetime() = {date(), time()}</c></p> + <p>See <seealso marker="stdlib:calendar">calendar</seealso> + for more info.</p> + </item> + + </list> + + <marker id="config"></marker> + </section> + + <funcs> + <func> + <name>config() -> ok | {error, Reason}</name> + <fsummary>Configure with a simple interactive tool</fsummary> + <desc> + <p>A simple interactive configuration tool. Simple + configuration files can be generated, but more complex + configurations still have to be edited manually. + </p> + <p>The tool is a textual based tool that asks some questions + and generates <c>sys.config</c> and <c>*.conf</c> files. + </p> + <p><em>Note</em> that if the application shall support version 3, + then the crypto app must be started before running this function + (password generation).</p> + <p><em>Note</em> also that some of the configuration files for the + agent and manager share the same names. This means that + they have to be stored in <em>different</em> directories!</p> + + <marker id="start"></marker> + </desc> + </func> + + <func> + <name>start() -> ok | {error, Reason}</name> + <name>start(Type) -> ok | {error, Reason}</name> + <fsummary>Start the SNMP application</fsummary> + <type> + <v>Type = start_type()</v> + </type> + <desc> + <p>Starts the SNMP application.</p> + <p>See <seealso marker="kernel:application">application</seealso> for more info.</p> + + <marker id="start_agent"></marker> + </desc> + </func> + + <func> + <name>start_agent() -> ok | {error, Reason}</name> + <name>start_agent(Type) -> ok | {error, Reason}</name> + <fsummary>Start the agent part of the SNMP application</fsummary> + <type> + <v>Type = start_type()</v> + </type> + <desc> + <p>The SNMP application consists of several entities, of which the + agent is one. This function starts the agent entity of the + application. + </p> + <p>Note that the only way to actually start the agent in this way is + to add the agent related config after starting the application (e.g + it cannot be part of the normal application config; sys.config). + This is done by calling: + <c>application:set_env(snmp, agent, Conf)</c>. + </p> + <p>The default value for <c>Type</c> is <c>normal</c>.</p> + + <marker id="start_manager"></marker> + </desc> + </func> + + <func> + <name>start_manager() -> ok | {error, Reason}</name> + <name>start_manager(Type) -> ok | {error, Reason}</name> + <fsummary>Start the manager part of the SNMP application</fsummary> + <type> + <v>Type = start_type()</v> + </type> + <desc> + <p>The SNMP application consists of several entities, of which the + manager is one. This function starts the manager entity of the + application. + </p> + <p>Note that the only way to actually start the manager in this way is + to add the manager related config after starting the application (e.g + it cannot be part of the normal application config; sys.config). + This is done by calling: + <c>application:set_env(snmp, manager, Conf)</c>. + </p> + <p>The default value for <c>Type</c> is <c>normal</c>.</p> + + <marker id="dat"></marker> + </desc> + </func> + + <func> + <name>date_and_time() -> DateAndTime</name> + <fsummary>Return the current date and time as an OCTET STRING</fsummary> + <type> + <v>DateAndTime = [int()]</v> + </type> + <desc> + <p>Returns current date and time as the data type DateAndTime, + as specified in RFC1903. This is an OCTET STRING.</p> + + <marker id="dat2ut_dst"></marker> + </desc> + </func> + + <func> + <name>date_and_time_to_universal_time_dst(DateAndTime) -> [utc()]</name> + <fsummary>Convert a DateAndTime value to a list of possible utc()</fsummary> + <type> + <v>DateAndTime = [int()]</v> + <v>utc() = {{Y,Mo,D},{H,M,S}}</v> + </type> + <desc> + <p>Converts a DateAndTime list to a list of possible universal + time(s). The universal time value on the same format as defined in + calendar(3). </p> + + <marker id="dat2s"></marker> + </desc> + </func> + + <func> + <name>date_and_time_to_string(DateAndTime) -> string()</name> + <name>date_and_time_to_string(DateAndTime, Validate) -> string()</name> + <fsummary>Convert a DateAndTime value to a string</fsummary> + <type> + <v>DateAndTime = [int()]</v> + <v>Validate = fun(Kind, Data) -> boolean()</v> + </type> + <desc> + <p>Converts a DateAndTime list to a printable string, according + to the DISPLAY-HINT definition in RFC2579.</p> + + <p>The validation fun, <c>Validate</c>, allows for a more "flexible" + validation of the <c>DateAndTime</c> argument. Whenever the data + is found to not follow RFC2579, the fun is called to allow a more + "lax" validation. + See the <seealso marker="#vdat">validate_date_and_time/2</seealso> + function for more info on the <c>Validate</c> fun. </p> + + <marker id="dat2s2"></marker> + </desc> + </func> + + <func> + <name>date_and_time_to_string2(DateAndTime) -> string()</name> + <fsummary>Convert a DateAndTime value to a string</fsummary> + <type> + <v>DateAndTime = [int()]</v> + </type> + <desc> + <p>Converts a DateAndTime list to a printable string, according + to the DISPLAY-HINT definition in RFC2579, with the extension + that it also allows the values "hours from UTC" = 14 together with + "minutes from UTC" = 0. </p> + + <marker id="lt2dat_dst"></marker> + </desc> + </func> + + <func> + <name>local_time_to_date_and_time_dst(Local) -> [DateAndTime]</name> + <fsummary>Convert a Local time value to a list of possible DateAndTime(s)</fsummary> + <type> + <v>Local = {{Y,Mo,D},{H,M,S}}</v> + <v>DateAndTime = [int()]</v> + </type> + <desc> + <p>Converts a local time value to a list of possible DateAndTime + list(s). The local time value on the same format as defined in + calendar(3).</p> + + <marker id="ut2dat"></marker> + </desc> + </func> + + <func> + <name>universal_time_to_date_and_time(UTC) -> DateAndTime</name> + <fsummary>Convert a UTC value to DateAndTime</fsummary> + <type> + <v>UTC = {{Y,Mo,D},{H,M,S}}</v> + <v>DateAndTime = [int()]</v> + </type> + <desc> + <p>Converts a universal time value to a DateAndTime list. The + universal time value on the same format as defined in calendar(3).</p> + + <marker id="vdat"></marker> + </desc> + </func> + + <func> + <name>validate_date_and_time(DateAndTime) -> bool()</name> + <name>validate_date_and_time(DateAndTime, Validate) -> bool()</name> + <fsummary>Check if a DateAndTime value is correct</fsummary> + <type> + <v>DateAndTime = term()</v> + <v>Validate = fun(Kind, Data) -> boolean()</v> + </type> + <desc> + <p>Checks if <c>DateAndTime</c> is a correct DateAndTime + value, as specified in RFC2579. This function can be used in + instrumentation functions to validate a DateAndTime value.</p> + + + <p>The validation fun, <c>Validate</c>, allows for a more "flexible" + validation of the <c>DateAndTime</c> argument. Whenever the data + is found to not follow RFC2579, the fun is called to allow a more + "lax" validation. + The input to the validation fun looks like this: </p> + + <pre> + Kind Data + -------------- ---------------------- + year {Year1, Year2} + month Month + day Day + hour Hour + minute Minute + seconds Seconds + deci_seconds DeciSeconds + diff [Sign, Hour, Minute] + valid_date {Year, Month, Day} + </pre> + + <marker id="passwd2localized_key"></marker> + </desc> + </func> + + <func> + <name>passwd2localized_key(Alg, Passwd, EngineID) -> Key</name> + <fsummary>Generates an localized key</fsummary> + <type> + <v>Alg = algorithm()</v> + <v>algorithm() = md5 | sha</v> + <v>Passwd = string()</v> + <v>EngineID = string()</v> + <v>Key = list()</v> + </type> + <desc> + <p>Generates a key that can be used as an authentication + or privacy key using MD5 och SHA. The key is + localized for EngineID.</p> + + <marker id="octet_string_to_bits"></marker> + </desc> + </func> + + <func> + <name>octet_string_to_bits(S) -> Val</name> + <fsummary>Convert an OCTET-STRING to BITS</fsummary> + <type> + <v>Val = bits()</v> + </type> + <desc> + <p>Utility function for converting a value of type + <c>OCTET-STRING</c> to <c>BITS</c>. </p> + + <marker id="bits_to_octet_string"></marker> + </desc> + </func> + + <func> + <name>bits_to_octet_string(B) -> Val</name> + <fsummary>Convert an OCTET-STRING to BITS</fsummary> + <type> + <v>Val = octet_string()</v> + </type> + <desc> + <p>Utility function for converting a value of type <c>BITS</c> + to <c>OCTET-STRING</c>. </p> + + <marker id="read_mib"></marker> + </desc> + </func> + + <func> + <name>read_mib(FileName) -> {ok, mib()} | {error, Reason}</name> + <fsummary></fsummary> + <type> + <v>FileName = string()</v> + <v>mib() = #mib{}</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Read a compiled mib.</p> + + <marker id="log_to_txt"></marker> + </desc> + </func> + + <func> + <name>log_to_txt(LogDir, Mibs, OutFile, LogName, LogFile) -> ok | {error, Reason}</name> + <name>log_to_txt(LogDir, Mibs, OutFile, LogName, LogFile, Start) -> ok | {error, Reason}</name> + <name>log_to_txt(LogDir, Mibs, OutFile, LogName, LogFile, Start, Stop) -> ok | {error, Reason}</name> + <fsummary>Convert an Audit Trail Log to text format</fsummary> + <type> + <v>LogDir = string()</v> + <v>Mibs = [MibName]</v> + <v>OutFile = string()</v> + <v>MibName = string()</v> + <v>LogName = string()</v> + <v>LogFile = string()</v> + <v>Start = Stop = null | datetime() | {local_time,datetime()} | {universal_time,datetime()} </v> + <v>Reason = term()</v> + </type> + <desc> + <p>Converts an Audit Trail Log to a readable text file, where + each item has a trailing TAB character, and any TAB + character in the body of an item has been replaced by ESC + TAB. + </p> + <p>The function can be used on a running system, or by copying + the entire log directory and calling this function. SNMP + must be running in order to provide MIB information. + </p> + <p><c>LogDir</c> is the name of the directory where the audit + trail log is stored. + <c>Mibs</c> is a list of Mibs to be used. The function uses + the information in the Mibs to convert for example object + identifiers to their symbolic name. + <c>OutFile</c> is the name of the generated text-file. + <c>LogName</c> is the name of the log, + <c>LogFile</c> is the name of the log file. + <c>Start</c> is the start (first) date and time from which + log events will be converted and + <c>Stop</c> is the stop (last) date and time to which log + events will be converted. + </p> + <p>The format of an audit trail log text item is as follows: + </p> + <p><c>Tag Addr - Community [TimeStamp] Vsn</c><br></br> + <c>PDU</c></p> + <p>where <c>Tag</c> is <c>request</c>, <c>response</c>, + <c>report</c>, <c>trap</c> or <c>inform</c>; Addr is + <c>IP:Port</c> (or comma space separated list of such); + <c>Community</c> is the community parameter (SNMP version + v1 and v2), or <c>SecLevel:"AuthEngineID":"UserName"</c> + (SNMP v3); <c>TimeStamp</c> is a date and time stamp, + and <c>Vsn</c> is the SNMP version. <c>PDU</c> is a textual + version of the protocol data unit. There is a new line + between <c>Vsn</c> and <c>PDU</c>.</p> + + <marker id="change_log_size"></marker> + </desc> + </func> + + <func> + <name>change_log_size(LogName, NewSize) -> ok | {error, Reason}</name> + <fsummary>Change the size of the Audit Trail Log</fsummary> + <type> + <v>LogName = string()</v> + <v>NewSize = {MaxBytes, MaxFiles}</v> + <v>MaxBytes = integer()</v> + <v>MaxFiles = integer()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Changes the log size of the Audit Trail Log. The + application must be configured to use the audit trail log + function. Please refer to disk_log(3) in Kernel Reference + Manual for a description of how to change the log size. + </p> + <p>The change is permanent, as long as the log is not deleted. + That means, the log size is remembered across reboots.</p> + + <marker id="print_version_info"></marker> + </desc> + </func> + + <func> + <name>print_version_info() -> void()</name> + <name>print_version_info(Prefix) -> void()</name> + <fsummary>Formatted print of result of the versions functions</fsummary> + <type> + <v>Prefix = string() | integer()</v> + </type> + <desc> + <p>Utility function(s) to produce a formatted printout of the versions + info generated by the <c>versions1</c> function</p> + <p>This is the same as doing, e.g.: </p> + <pre> + {ok, V} = snmp:versions1(), + snmp:print_versions(V). + </pre> + + <marker id="versions1"></marker> + <marker id="versions2"></marker> + </desc> + </func> + + <func> + <name>versions1() -> {ok, Info} | {error, Reason}</name> + <name>versions2() -> {ok, Info} | {error, Reason}</name> + <fsummary>Retrieve various system and application info</fsummary> + <type> + <v>Info = [info()]</v> + <v>info() = term()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Utility functions used to retrieve some system and + application info.</p> + <p>The difference between the two functions is in how they get + the modules to check. <c>versions1</c> uses the app-file and + <c>versions2</c> uses the function <c>application:get_key</c>.</p> + + <marker id="print_versions"></marker> + </desc> + </func> + + <func> + <name>print_versions(VersionInfo) -> void()</name> + <name>print_versions(Prefix, VersionInfo) -> void()</name> + <fsummary>Formatted print of result of the versions functions</fsummary> + <type> + <v>VersionInfo = [version_info()]</v> + <v>version_info() = term()</v> + <v>Prefix = string() | integer()</v> + </type> + <desc> + <p>Utility function to produce a formatted printout of the versions + info generated by the <c>versions1</c> and <c>versions2</c> + functions</p> + <p>Example: </p> + <pre> + {ok, V} = snmp:versions1(), + snmp:print_versions(V). + </pre> + + <marker id="enable_trace"></marker> + </desc> + </func> + + <func> + <name>enable_trace() -> void()</name> + <fsummary>Starts a tracer</fsummary> + <!-- + <type> + <v>Prefix = string() | integer()</v> + </type> + --> + <desc> + <p>Starts a dbg tracer that prints trace events to stdout (using + plain io:format after a minor formatting). </p> + + <marker id="disable_trace"></marker> + </desc> + </func> + + <func> + <name>disable_trace() -> void()</name> + <fsummary>Stop the tracer</fsummary> + <!-- + <type> + <v>Prefix = string() | integer()</v> + </type> + --> + <desc> + <p>Stop the tracer. </p> + + <marker id="set_trace1"></marker> + </desc> + </func> + + <func> + <name>set_trace(Targets) -> void()</name> + <fsummary>Set trace target</fsummary> + <type> + <v>Targets = target() | targets()</v> + <v>target() = module()</v> + <v>module() = atom()</v> + <v>targets() = [target() | {target(), target_options()}]</v> + <v>target_options() = [target_option()]</v> + <v>target_option() = {return_trace, boolean()} | {scope, scope()}</v> + <v>scope() = all_functions | exported_functions | function_name() | {function_name(), function_arity()}</v> + <v>function_name() = atom()</v> + <v>function_arity() = integer() >= 0</v> + </type> + <desc> + <p>This function is used to set up default trace on function(s) + for the given module or modules. The scope of the trace will be + all <em>exported</em> functions (both the call info and the return + value). Timestamp info will also be included. </p> + + <marker id="reset_trace"></marker> + </desc> + </func> + + <func> + <name>reset_trace(Targets) -> void()</name> + <fsummary>Reset trace target</fsummary> + <type> + <v>Targets = module() | modules()</v> + <v>modules() = [module()]</v> + <v>module() = atom()</v> + </type> + <desc> + <p>This function is used to reset (disable) trace for the + given module(s). </p> + + <marker id="set_trace2"></marker> + </desc> + </func> + + <func> + <name>set_trace(Targets, Opts) -> void()</name> + <fsummary>Set trace target</fsummary> + <type> + <v>Targets = target() | targets()</v> + <v>target() = module()</v> + <v>module() = atom()</v> + <v>targets() = [target() | {target(), target_options()}]</v> + <v>target_options() = [target_option()]</v> + <v>target_option() = {return_trace, boolean()} | {scope, scope()}</v> + <v>scope() = all_functions | exported_functions | function_name() | {function_name(), function_arity()}</v> + <v>function_name() = atom()</v> + <v>function_arity() = integer() >= 0</v> + <v>Opts = disable | trace_options()</v> + <v>trace_options() = [trace_option()]</v> + <v>trace_option() = {timestamp, boolean()} | target_option()</v> + </type> + <desc> + <p>This function is used to set up trace on function(s) for the given + module or modules. </p> + + <p>The example below sets up trace on the exported functions (default) + of module <c>snmp_generic</c> and all functions of module + <c>snmp_generic_mnesia</c>. With return values (which is default) + and timestamps in both cases (which is also default): </p> + + <pre> + snmp:enable_trace(), + snmp:set_trace([snmp_generic, + {snmp_generic_mnesia, [{scope, all_functions}]}]), + . + . + . + snmp:set_trace(snmp_generic, disable), + . + . + . + snmp:disable_trace(), + </pre> + + </desc> + </func> + + </funcs> + + <section> + <title>See Also</title> + <p>calendar(3) + </p> + </section> + +</erlref> + diff --git a/lib/snmp/doc/src/snmp_advanced_agent.xml b/lib/snmp/doc/src/snmp_advanced_agent.xml new file mode 100644 index 0000000000..6600206c2d --- /dev/null +++ b/lib/snmp/doc/src/snmp_advanced_agent.xml @@ -0,0 +1,482 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>1997</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>Advanced Agent Topics</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_advanced_agent.xml</file> + </header> + <p>The chapter <em>Advanced Agent Topics</em> describes the more advanced + agent related features of the SNMP development tool. The following topics + are covered: + </p> + <list type="bulleted"> + <item>When to use a Sub-agent</item> + <item>Agent semantics</item> + <item>Sub-agents and dependencies</item> + <item>Distributed tables</item> + <item>Fault tolerance</item> + <item>Using Mnesia tables as SNMP tables</item> + <item>Audit Trail Logging</item> + <item>Deviations from the standard + </item> + </list> + + <section> + <title>When to use a Sub-agent</title> + <p>The section <em>When to use a Sub-agent</em> describes situations + where the mechanism of loading and unloading MIBs is insufficient. + In these cases a sub-agent is needed. + </p> + + <section> + <title>Special Set Transaction Mechanism</title> + <p>Each sub-agent can implement its own mechanisms for + <c>set</c>, <c>get</c> and <c>get-next</c>. For example, if the + application requires the <c>get</c> mechanism to be + asynchronous, or needs a N-phase <c>set</c> mechanism, a + specialized sub-agent should be used. + </p> + <p>The toolkit allows different kinds of sub-agents at the same + time. Accordingly, different MIBs can have different <c>set</c> + or <c>get</c> mechanisms. + </p> + </section> + + <section> + <title>Process Communication</title> + <p>A simple distributed agent can be managed without sub-agents. + The instrumentation functions can use distributed Erlang to + communicate with other parts of the application. However, a + sub-agent can be used on each node if this generates too much + unnecessary traffic. A sub-agent processes requests per + incoming SNMP request, not per variable. Therefore the network + traffic is minimized. + </p> + <p>If the instrumentation functions communicate with UNIX + processes, it might be a good idea to use a special + sub-agent. This sub-agent sends the SNMP request to the other + process in one packet in order to minimize context switches. For + example, if a whole MIB is implemented on the C level in UNIX, + but you still want to use the Erlang SNMP tool, then you may + have one special sub-agent, which sends the variables in the + request as a single operation down to C. + </p> + </section> + + <section> + <title>Frequent Loading of MIBs</title> + <p>Loading and unloading of MIBs are quite cheap + operations. However, if the application does this very often, + perhaps several times per minute, it should load the MIBs once + and for all in a sub-agent. This sub-agent only registers and + unregisters itself under another agent instead of loading the + MIBs each time. This is cheaper than loading an MIB. + </p> + </section> + + <section> + <title>Interaction With Other SNMP Agent Toolkits</title> + <p>If the SNMP agent needs to interact with sub-agents + constructed in another package, a special sub-agent should be + used, which communicates through a protocol specified by the + other package. + </p> + </section> + </section> + + <section> + <title>Agent Semantics</title> + <p>The agent can be configured to be multi-threaded, to process + one incoming request at a time, or to have a request limit + enabled (this can be used for load control or to limit the effect + of DoS attacks). If it is multi-threaded, read requests (<c>get</c>, + <c>get-next</c> and <c>get-bulk</c>) and traps are processed in + parallel with each other and <c>set</c> requests. However, all + <c>set</c> requests are serialized, which means that if the agent + is waiting for the application to complete a complicated write + operation, it will not process any new write requests until this + operation is finished. It processes read requests and sends traps, + concurrently. The reason for not handle write requests in parallel is + that a complex locking mechanism would be needed even in the simplest + cases. Even with the scheme described above, the user must be + careful not to violate that the <c>set</c> requests are atoms. + If this is hard to do, do not use the multi-threaded feature. + </p> + <p>The order within an request is undefined and variables are not + processed in a defined order. Do not assume that the first + variable in the PDU will be processed before the second, even if + the agent processes variables in this order. It + cannot even be assumed that requests belonging to different + sub-agents have any order. + </p> + <p>If the manager tries to set the same variable many times in the + same PDU, the agent is free to improvise. There is no definition + which determines if the instrumentation will be called once or + twice. If called once only, there is no definition that determines + which of the new values is going to be supplied. + </p> + <p>When the agent receives a request, it keeps the request ID for + one second after the response is sent. If the agent receives + another request with the same request ID during this time, from + the same IP address and UDP port, that request will be + discarded. This mechanism has nothing to do with the function + <c>snmpa:current_request_id/0</c>.</p> + </section> + + <section> + <title>Sub-agents and Dependencies </title> + <p>The toolkit supports the use of different types of sub-agents, + but not the construction of sub-agents. + </p> + <p>Also, the toolkit does not support dependencies between + sub-agents. A sub-agent should by definition be stand alone and it is + therefore not good design to create dependencies between them. + </p> + </section> + + <section> + <title>Distributed Tables</title> + <p>A common situation in more complex systems is that the data in + a table is distributed. Different table rows are implemented in + different places. Some SNMP tool-kits dedicate an SNMP sub-agent for + each part of the table and load the corresponding MIB into all + sub-agents. The Master Agent is responsible for presenting the + distributed table as a single table to the manager. The toolkit + supplied uses a different method. + </p> + <p>The method used to implement distributed tables with this SNMP + tool is to implement a table coordinator process responsible for + coordinating the processes, which hold the table data and they + are called table holders. All table holders must in some way be + known by the coordinator; the structure of the table data + determines how this is achieved. The coordinator may require + that the table holders explicitly register themselves and specify + their information. In other cases, the table holders can be + determined once at compile time. + </p> + <p>When the instrumentation function for the distributed table is + called, the request should be forwarded to the table + coordinator. The coordinator finds the requested information among + the table holders and then returns the answer to the + instrumentation function. The SNMP toolkit contains no support for + coordination of tables since this must be independent of the + implementation. + </p> + <p>The advantages of separating the table coordinator from the + SNMP tool are: + </p> + <list type="bulleted"> + <item>We do not need a sub-agent for each table holder. Normally, + the sub-agent is needed to take care of communication, but in + Distributed Erlang we use ordinary message passing. + </item> + <item>Most likely, some type of table coordinator already + exists. This process should take care of the instrumentation for + the table. + </item> + <item>The method used to present a distributed table is strongly + application dependent. The use of different masking techniques + is only valid for a small subset of problems and registering + every row in a distributed table makes it non-distributed. + </item> + </list> + </section> + + <section> + <title>Fault Tolerance</title> + <p>The SNMP agent toolkit gets input from three different sources: + </p> + <list type="bulleted"> + <item>UDP packets from the network</item> + <item>return values from the user defined instrumentation functions</item> + <item>return values from the MIB. + </item> + </list> + <p>The agent is highly fault tolerant. If the manager gets an + unexpected response from the agent, it is possible that some + instrumentation function has returned an erroneous value. The + agent will not crash even if the instrumentation does. It should + be noted that if an instrumentation function enters an infinite + loop, the agent will also be blocked forever. The supervisor ,or + the application, specifies how to restart the agent. + </p> + + <section> + <title>Using the SNMP Agent in a Distributed Environment</title> + <p>The normal way to use the agent in a distributed + environment is to use one master agent located at one node, + and zero or more sub-agents located on other nodes. However, + this configuration makes the master agent node a single point + of failure. If that node goes down, the agent will not work. + </p> + <p>One solution to this problem is to make the snmp application + a distributed Erlang application, and that means, the agent + may be configured to run on one of several nodes. If the node + where it runs goes down, another node restarts the agent. + This is called <em>failover</em>. When the node starts again, + it may <em>takeover</em> the application. This solution to + the problem adds another problem. Generally, the new node has + another IP address than the first one, which may cause + problems in the communication between the SNMP managers and + the agent. + </p> + <p>If the snmp agent is configured as a distributed Erlang + application, it will during takeover try to load the same MIBs + that were loaded at the old node. It uses the same filenames + as the old node. If the MIBs are not located in the same + paths at the different nodes, the MIBs must be loaded + explicitly after takeover. + </p> + </section> + </section> + + <section> + <title>Using Mnesia Tables as SNMP Tables</title> + <p>The Mnesia DBMS can be used for storing data of SNMP + tables. This means that an SNMP table can be implemented as a + Mnesia table, and that a Mnesia table can be made visible via + SNMP. This mapping is largely automated. + </p> + <p>There are three main reasons for using this mapping: + </p> + <list type="bulleted"> + <item>We get all features of Mnesia, such as fault tolerance, + persistent data storage, replication, and so on. + </item> + <item>Much of the work involved is automated. This includes + <c>get-next</c> processing and <c>RowStatus</c> handling. + </item> + <item>The table may be used as an ordinary Mnesia table, using + the Mnesia API internally in the application at the same time as + it is visible through SNMP. + </item> + </list> + <p>When this mapping is used, insertion and deletion in the + original Mnesia table is slower, with a factor O(log n). The read + access is not affected. + </p> + <p>A drawback with implementing an SNMP table as a Mnesia table is + that the internal resource is forced to use the table definition + from the MIB, which means that the external data model must be + used internally. Actually, this is only partially true. The Mnesia + table may extend the SNMP table, which means that the Mnesia table + may have columns which are use internally and are not seen by + SNMP. Still, the data model from SNMP must be maintained. Although + this is undesirable, it is a pragmatic compromise in many + situations where simple and efficient implementation is preferable + to abstraction. + </p> + + <section> + <title>Creating the Mnesia Table</title> + <p>The table must be created in Mnesia before the manager can + use it. The table must be declared as type <c>snmp</c>. This + makes the table ordered in accordance with the lexicographical + ordering rules of SNMP. The name of the Mnesia table must be + identical to the SNMP table name. The types of the INDEX fields + in the corresponding SNMP table must be specified. + </p> + <p>If the SNMP table has more than one INDEX column, the + corresponding Mnesia row is a tuple, where the first element + is a tuple with the INDEX columns. Generally, if the SNMP table + has <em>N</em> INDEX columns and <em>C</em> data columns, the + Mnesia table is of arity <em>(C-N)+1</em>, where the key is a + tuple of arity <em>N</em> if <em>N > 1</em>, or a single term + if <em>N = 1</em>. + </p> + <p>Refer to the Mnesia User's Guide for information on how to + declare a Mnesia table as an SNMP table. + </p> + <p>The following example illustrates a situation in which we + have an SNMP table that we wish to implement as a Mnesia + table. The table stores information about employees at a + company. Each employee is indexed with the department number and + the name. + </p> + <code type="none"> + empTable OBJECT-TYPE + SYNTAX SEQUENCE OF EmpEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A table with information about employees." + ::= { emp 1} + empEntry OBJECT-TYPE + SYNTAX EmpEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "" + INDEX { empDepNo, empName } + ::= { empTable 1 } + EmpEntry ::= + SEQUENCE { + empDepNo INTEGER, + empName DisplayString, + empTelNo DisplayString + empStatus RowStatus + } + </code> + <p>The corresponding Mnesia table is specified as follows: + </p> + <code type="none"> +mnesia:create_table([{name, employees}, + {snmp, [{key, {integer, string}}]}, + {attributes, [key, telno, row_status]}]). + </code> + <note> + <p>In the Mnesia tables, the two key columns are stored as a + tuple with two elements. Therefore, the arity of the table is + 3.</p> + </note> + </section> + + <section> + <title>Instrumentation Functions</title> + <p>The MIB table shown in the previous section can be compiled + as follows: + </p> + <pre> +1> <input>snmpc:compile("EmpMIB", [{db, mnesia}]).</input> + </pre> + <p>This is all that has to be done! Now the manager can read, + add, and modify rows. Also, you can use the ordinary Mnesia API + to access the table from your programs. The only explicit action + is to create the Mnesia table, an action the user has to perform + in order to create the required table schemas.</p> + </section> + + <section> + <title>Adding Own Actions</title> + <p>It is often necessary to take some specific action when a + table is modified. This is accomplished with an instrumentation + function. It executes some specific code when the table is set, + and passes all other requests down to the pre-defined function. + </p> + <p>The following example illustrates this idea: + </p> + <code type="none"> +emp_table(set, RowIndex, Cols) -> + notify_internal_resources(RowIndex, Cols), + snmp_generic:table_func(set, RowIndex, Cols, {empTable, mnesia}); +emp_table(Op, RowIndex, Cols) -> + snmp_generic:table_func(Op, RowIndex, Cols, {empTable, mnesia}). + </code> + <p>The default instrumentation functions are defined in the + module <c>snmp_generic</c>. Refer to the Reference Manual, + section SNMP, module <c>snmp_generic</c> for details.</p> + </section> + + <section> + <title>Extending the Mnesia Table</title> + <p>A table may contain columns that are used internally, but + should not be visible to a manager. These internal columns must + be the last columns in the table. The <c>set</c> operation will + not work with this arrangement, because there are columns that + the agent does not know about. This situation is handled by + adding values for the internal columns in the <c>set</c> + function. + </p> + <p>To illustrate this, suppose we extend our Mnesia + <c>empTable</c> with one internal column. We create it as + before, but with an arity of 4, by adding another attribute. + </p> + <code type="none"> +mnesia:create_table([{name, employees}, + {snmp, [{key, {integer, string}}]}, + {attributes, {key, telno, row_status, internal_col}}]). + </code> + <p>The last column is the internal column. When performing a + <c>set</c> operation, which creates a row, we must give a + value to the internal column. The instrumentation functions will now + look as follows: + </p> + <code type="none"> +-define(createAndGo, 4). +-define(createAndWait, 5). + +emp_table(set, RowIndex, Cols) -> + notify_internal_resources(RowIndex, Cols), + NewCols = + case is_row_created(empTable, Cols) of + true -> Cols ++ [{4, "internal"}]; % add internal column + false -> Cols % keep original cols + end, + snmp_generic:table_func(set, RowIndex, NewCols, {empTable, mnesia}); +emp_table(Op, RowIndex, Cols) -> + snmp_generic:table_func(Op, RowIndex, Cols, {empTable, mnesia}). + +is_row_created(Name, Cols) -> + case snmp_generic:get_status_col(Name, Cols) of + {ok, ?createAndGo} -> true; + {ok, ?createAndWait} -> true; + _ -> false + end. + </code> + <p>If a row is created, we always set the internal column to + <c>"internal"</c>. + </p> + </section> + </section> + + <section> + <title>Deviations from the Standard</title> + <p>In some aspects the agent does not implement SNMP fully. Here + are the differences: + </p> + <list type="bulleted"> + <item>The default functions and <c>snmp_generic</c> cannot + handle an object of type <c>NetworkAddress</c> as INDEX + (SNMPv1 only!). Use <c>IpAddress</c> instead. + </item> + <item>The agent does not check complex ranges specified for + INTEGER objects. In these cases it just checks that the value + lies within the minimum and maximum values specified. For + example, if the range is specified as <c>1..10 | 12..20</c> + the agent would let 11 through, but not 0 or 21. The + instrumentation functions must check the complex ranges + itself. + </item> + <item>The agent will never generate the <c>wrongEncoding</c> + error. If a variable binding is erroneous encoded, the + <c>asn1ParseError</c> counter will be incremented. + </item> + <item>A <c>tooBig</c> error in an SNMPv1 packet will always use + the <c>'NULL'</c> value in all variable bindings. + </item> + <item>The default functions and <c>snmp_generic</c> do not check + the range of each OCTET in textual conventions derived from + OCTET STRING, e.g. <c>DisplayString</c> and + <c>DateAndTime</c>. This must be checked in an overloaded + <c>is_set_ok</c> function. + </item> + </list> + </section> +</chapter> + diff --git a/lib/snmp/doc/src/snmp_agent_config_files.xml b/lib/snmp/doc/src/snmp_agent_config_files.xml new file mode 100644 index 0000000000..0bab563f87 --- /dev/null +++ b/lib/snmp/doc/src/snmp_agent_config_files.xml @@ -0,0 +1,464 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>1997</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>Definition of Agent Configuration Files</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_agent_config_files.xml</file> + </header> + <p>All configuration data must be included in configuration files + that are located in the configuration directory. The name of this + directory is given in the <c>config_dir</c> configuration + parameter. These files are read at start-up, and are used to + initialize the SNMPv2-MIB or STANDARD-MIB, SNMP-FRAMEWORK-MIB, + SNMP-MPD-MIB, SNMP-VIEW-BASED-ACM-MIB, SNMP-COMMUNITY-MIB, + SNMP-USER-BASED-SM-MIB, SNMP-TARGET-MIB and SNMP-NOTIFICATION-MIB + (refer to the <seealso marker="snmp_agent_funct_descr#management">Management of the Agent</seealso> for a description of the MIBs). </p> + <p>The files are: </p> + <list type="bulleted"> + <item> + <p><c>agent.conf</c>: see + <seealso marker="#agent_information">Agent Information</seealso></p> + </item> + <item> + <p><c>standard.conf</c>: see + <seealso marker="#system_information">System Information</seealso></p> + </item> + <item> + <p><c>context.conf</c>: see + <seealso marker="#context">Contexts</seealso></p> + </item> + <item> + <p><c>community.conf</c>: see + <seealso marker="#community">Communities</seealso></p> + </item> + <item> + <p><c>target_addr.conf</c>: see + <seealso marker="#target_addr">Target Address Definitions</seealso></p> + </item> + <item> + <p><c>target_params.conf</c>: see + <seealso marker="#target_params">Target Parameters Definitions</seealso></p> + </item> + <item> + <p><c>vacm.conf</c>: see + <seealso marker="#vacm">MIB Views for VACM</seealso></p> + </item> + <item> + <p><c>usm.conf</c>: see + <seealso marker="#usm">Security data for USM</seealso></p> + </item> + <item> + <p><c>notify.conf</c>: see + <seealso marker="#notify">Notify Definitions</seealso></p> + </item> + </list> + <p>The directory where the configuration files are found is given as + a parameter to the agent. </p> + <p>The entry format in all files are Erlang terms, separated by a + '<em>.</em>' and a <em>newline</em>. In the following sections, the + formats of these terms are described. Comments may be specified as + ordinary Erlang comments. </p> + <p>Syntax errors in these files are discovered and reported with the + function <c>config_err/2</c> of the error report module at start-up. </p> + + <section> + <marker id="agent_information"></marker> + <title>Agent Information</title> + <p>The agent information should be stored in a file called + <c>agent.conf</c>. + </p> + <p>Each entry is a tuple of size two: + </p> + <p><c>{AgentVariable, Value}.</c></p> + <list type="bulleted"> + <item><c>AgentVariable</c> is one of the variables is + SNMP-FRAMEWORK-MIB or one of the internal variables + <c>intAgentUDPPort</c>, which defines which UDP port the agent + listens to, or <c>intAgentIpAddress</c>, which defines the IP + address of the agent. + </item> + <item><c>Value</c> is the value for the variable. + </item> + </list> + <p>The following example shows a <c>agent.conf</c> file: + </p> + <pre> +{intAgentUDPPort, 4000}. +{intAgentIpAddress,[141,213,11,24]}. +{snmpEngineID, "mbj's engine"}. +{snmpEngineMaxPacketSize, 484}. + </pre> + <p>The value of <c>snmpEngineID</c> is a string, which for a + deployed agent should have a very specific structure. See + RFC 2271/2571 for details. + </p> + </section> + + <section> + <marker id="context"></marker> + <title>Contexts</title> + <p>The context information should be stored in a file called + <c>context.conf</c>. The default context <c>""</c> + need not be present. + </p> + <p>Each row defines a context in the agent. This information is + used in the table <c>vacmContextTable</c> in the + SNMP-VIEW-BASED-ACM-MIB. + </p> + <p>Each entry is a term: + </p> + <p><c>ContextName.</c></p> + <list type="bulleted"> + <item><c>ContextName</c> is a string. + </item> + </list> + </section> + + <section> + <marker id="system_information"></marker> + <title>System Information</title> + <p>The system information should be stored in a file called + <c>standard.conf</c>. + </p> + <p>Each entry is a tuple of size two: + </p> + <p><c>{SystemVariable, Value}.</c></p> + <list type="bulleted"> + <item><c>SystemVariable</c> is one of the variables in the + system group, or <c>snmpEnableAuthenTraps</c>. + </item> + <item><c>Value</c> is the value for the variable. + </item> + </list> + <p>The following example shows a valid <c>standard.conf</c> file: + </p> + <pre> +{sysDescr, "Erlang SNMP agent"}. +{sysObjectID, [1,2,3]}. +{sysContact, "(mbj,eklas)@erlang.ericsson.se"}. +{sysName, "test"}. +{sysServices, 72}. +{snmpEnableAuthenTraps, enabled}. + </pre> + <p>A value must be provided for all variables, which lack default + values in the MIB. + </p> + </section> + + <section> + <marker id="community"></marker> + <title>Communities</title> + <p>The community information should be stored in a file called + <c>community.conf</c>. It must be present if the agent is + configured for SNMPv1 or SNMPv2c. + </p> + <p>The corresponding table is <c>snmpCommunityTable</c> in the + SNMP-COMMUNITY-MIB. + </p> + <p>Each entry is a term: + </p> + <p><c>{CommunityIndex, CommunityName, SecurityName, ContextName, TransportTag}.</c></p> + <list type="bulleted"> + <item><c>CommunityIndex</c> is a non-empty string. + </item> + <item><c>CommunityName</c> is a string. + </item> + <item><c>SecurityName</c> is a string. + </item> + <item><c>ContextName</c> is a string. + </item> + <item><c>TransportTag</c> is a string. + </item> + </list> + </section> + + <section> + <marker id="vacm"></marker> + <title>MIB Views for VACM</title> + <p>The information about MIB Views for VACM should be stored in a + file called + <c>vacm.conf</c>. + </p> + <p>The corresponding tables are <c>vacmSecurityToGroupTable</c>, + <c>vacmAccessTable</c> and <c>vacmViewTreeFamilyTable</c> in the + SNMP-VIEW-BASED-ACM-MIB. + </p> + <p>Each entry is one of the terms, one entry corresponds to one + row in one of the tables. + </p> + <p><c>{vacmSecurityToGroup, SecModel, SecName, GroupName}.</c></p> + <p><c>{vacmAccess, GroupName, Prefix, SecModel, SecLevel, Match, ReadView, WriteView, NotifyView}.</c></p> + <p><c>{vacmViewTreeFamily, ViewIndex, ViewSubtree, ViewStatus, ViewMask}.</c></p> + <list type="bulleted"> + <item> + <p><c>SecModel</c> is <c>any</c>, <c>v1</c>, <c>v2c</c>, or + <c>usm</c>.</p> + </item> + <item> + <p><c>SecName</c> is a string.</p> + </item> + <item> + <p><c>GroupName</c> is a string.</p> + </item> + <item> + <p><c>Prefix</c> is a string.</p> + </item> + <item> + <p><c>SecLevel</c> is <c>noAuthNoPriv</c>, <c>authNoPriv</c>, + or <c>authPriv</c></p> + </item> + <item> + <p><c>Match</c> is <c>prefix</c> or <c>exact</c>.</p> + </item> + <item> + <p><c>ReadView</c> is a string.</p> + </item> + <item> + <p><c>WriteView</c> is a string.</p> + </item> + <item> + <p><c>NotifyView</c> is a string. + </p> + </item> + <item> + <p><c>ViewIndex</c> is an integer.</p> + </item> + <item> + <p><c>ViewSubtree</c> is a list of integer.</p> + </item> + <item> + <p><c>ViewStatus</c> is either <c>included</c> or <c>excluded</c></p> + </item> + <item> + <p><c>ViewMask</c> is either <c>null</c> or a list of ones and + zeros. Ones nominate that an exact match is used for this + sub-identifier. Zeros are wild-cards which match any + sub-identifier. If the mask is shorter than the sub-tree, the + tail is regarded as all ones. <c>null</c> is shorthand for a + mask with all ones.</p> + </item> + </list> + </section> + + <section> + <marker id="usm"></marker> + <title>Security data for USM</title> + <p>The information about Security data for USM should be stored in a + file called + <c>usm.conf</c>, which must be present if the agent is configured + for SNMPv3. + </p> + <p>The corresponding table is <c>usmUserTable</c> in the + SNMP-USER-BASED-SM-MIB. + </p> + <p>Each entry is a term: + </p> + <p><c>{EngineID, UserName, SecName, Clone, AuthP, AuthKeyC, OwnAuthKeyC, PrivP, PrivKeyC, OwnPrivKeyC, Public, AuthKey, PrivKey}.</c></p> + <list type="bulleted"> + <item> + <p><c>EngineID</c> is a string. + </p> + </item> + <item> + <p><c>UserName</c> is a string.</p> + </item> + <item> + <p><c>SecName</c> is a string.</p> + </item> + <item> + <p><c>Clone</c> is <c>zeroDotZero</c> or a list of integers.</p> + </item> + <item> + <p><c>AuthP</c> is a <c>usmNoAuthProtocol</c>, + <c>usmHMACMD5AuthProtocol</c>, or <c>usmHMACSHAAuthProtocol</c>.</p> + </item> + <item> + <p><c>AuthKeyC</c> is a string.</p> + </item> + <item> + <p><c>OwnAuthKeyC</c> is a string.</p> + </item> + <item> + <p><c>PrivP</c> is a <c>usmNoPrivProtocol</c>, + <c>usmDESPrivProtocol</c> or <c>usmAesCfb128Protocol</c>.</p> + </item> + <item> + <p><c>PrivKeyC</c> is a string.</p> + </item> + <item> + <p><c>OwnPrivKeyC</c> is a string.</p> + </item> + <item> + <p><c>Public</c> is a string.</p> + </item> + <item> + <p><c>AuthKey</c> is a list (of integer). This is the User's secret + localized authentication key. It is not visible in the MIB. The length + of this key needs to be 16 if <c>usmHMACMD5AuthProtocol</c> is used, and + 20 if <c>usmHMACSHAAuthProtocol</c> is used.</p> + </item> + <item> + <p><c>PrivKey</c> is a list (of integer). This is the User's secret + localized encryption key. It is not visible in the MIB. The length + of this key needs to be 16 if <c>usmDESPrivProtocol</c> or + <c>usmAesCfb128Protocol</c> is used. + </p> + </item> + </list> + </section> + + <section> + <marker id="notify"></marker> + <title>Notify Definitions</title> + <p>The information about Notify Definitions should be stored in a + file called + <c>notify.conf</c>. + </p> + <p>The corresponding table is <c>snmpNotifyTable</c> in the + SNMP-NOTIFICATION-MIB. + </p> + <p>Each entry is a term: + </p> + <p><c>{NotifyName, Tag, Type}.</c></p> + <list type="bulleted"> + <item> + <p><c>NotifyName</c> is a unique non-empty string. + </p> + </item> + <item> + <p><c>Tag</c> is a string. + </p> + </item> + <item> + <p><c>Type</c> is <c>trap</c> or <c>inform</c>. + </p> + </item> + </list> + </section> + + <section> + <marker id="target_addr"></marker> + <title>Target Address Definitions</title> + <p>The information about Target Address Definitions should be + stored in a file called + <c>target_addr.conf</c>. + </p> + <p>The corresponding tables are <c>snmpTargetAddrTable</c> in the + SNMP-TARGET-MIB and <c>snmpTargetAddrExtTable</c> in the SNMP-COMMUNITY-MIB. + </p> + <p>Each entry is a term: + </p> + <p><c>{TargetName, Ip, Udp, Timeout, RetryCount, TagList, ParamsName, EngineId}.</c> or <br></br> +<c>{TargetName, Ip, Udp, Timeout, RetryCount, TagList, ParamsName, EngineId, TMask, MaxMessageSize}.</c></p> + <list type="bulleted"> + <item> + <p><c>TargetName</c> is a unique non-empty string. + </p> + </item> + <item> + <p><c>Ip</c> is a list of four integers. + </p> + </item> + <item> + <p><c>Udp</c> is an integer. + </p> + </item> + <item> + <p><c>Timeout</c> is an integer. + </p> + </item> + <item> + <p><c>RetryCount</c> is an integer. + </p> + </item> + <item> + <p><c>TagList</c> is a string. + </p> + </item> + <item> + <p><c>ParamsName</c> is a string. + </p> + </item> + <item> + <p><c>EngineId</c> is a string or the atom <c>discovery</c>. + </p> + </item> + <item> + <p><c>TMask</c> is a string of size 0, or size 6 (default: []). + </p> + </item> + <item> + <p><c>MaxMessageSize</c> is an integer (default: 2048). + </p> + </item> + </list> + <p>Note that if <c>EngineId</c> has the value <c>discovery</c>, + the agent cannot send + <c>inform</c> messages to that manager until it has performed the + <em>discovery</em> process with that manager. </p> + </section> + + <section> + <marker id="target_params"></marker> + <title>Target Parameters Definitions</title> + <p>The information about Target Parameters Definitions should be + stored in a file called + <c>target_params.conf</c>. + </p> + <p>The corresponding table is <c>snmpTargetParamsTable</c> in the + SNMP-TARGET-MIB. + </p> + <p>Each entry is a term: + </p> + <p><c>{ParamsName, MPModel, SecurityModel, SecurityName, SecurityLevel}.</c></p> + <list type="bulleted"> + <item> + <p><c>ParamsName</c> is a unique non-empty string. + </p> + </item> + <item> + <p><c>MPModel</c> is <c>v1</c>, <c>v2c</c> or <c>v3</c></p> + </item> + <item> + <p><c>SecurityModel</c> is <c>v1</c>, <c>v2c</c>, or <c>usm</c>. + </p> + </item> + <item> + <p><c>SecurityName</c> is a string. + </p> + </item> + <item> + <p><c>SecurityLevel</c> is <c>noAuthNoPriv</c>, <c>authNoPriv</c> + or <c>authPriv</c>. + </p> + </item> + </list> + </section> +</chapter> + diff --git a/lib/snmp/doc/src/snmp_agent_funct_descr.xml b/lib/snmp/doc/src/snmp_agent_funct_descr.xml new file mode 100644 index 0000000000..9a1bf28ab1 --- /dev/null +++ b/lib/snmp/doc/src/snmp_agent_funct_descr.xml @@ -0,0 +1,947 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>1997</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>Agent Functional Description</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_agent_funct_descr.xml</file> + </header> + <p>The SNMP agent system consists of one Master Agent and + optional Sub-agents. + </p> + <p>The tool makes it easy to dynamically extend an SNMP agent in + run-time. MIBs can be loaded and unloaded at any time. It is also + easy to change the implementation of an MIB in run-time, without + having to recompile the MIB. The MIB implementation is clearly + separated from the agent. + </p> + <p>To facilitate incremental MIB implementation, the tool can + generate a prototype implementation for a whole MIB, or parts + thereof. This allows different MIBs and management applications to + be developed at the same time. + </p> + + <section> + <title>Features</title> + <marker id="features"></marker> + <p>To implement an agent, the programmer writes instrumentation + functions for the variables and the tables in the MIBs that the + agent is going to support. A running prototype which handles <c>set</c>, + <c>get</c>, and <c>get-next</c> can be created without any programming. + </p> + <p>The toolkit provides the following: + </p> + <list type="bulleted"> + <item>multi-lingual multi-threaded extensible SNMP agent</item> + <item>easy writing of instrumentation functions with a + high-level programming language</item> + <item>basic fault handling such as automatic type checking</item> + <item>access control</item> + <item>authentication</item> + <item>privacy through encryption</item> + <item>loading and unloading of MIBs in run-time</item> + <item>the ability to change instrumentation functions without + recompiling the MIB</item> + <item>rapid prototyping environment where the MIB compiler can + use generic instrumentation functions, which later can be + refined by the programmer</item> + <item>a simple and extensible model for transaction handling and + consistency checking of set-requests</item> + <item>support of the sub-agent concept via distributed Erlang</item> + <item>a mechanism for sending notifications (traps and informs)</item> + <item>support for implementing SNMP tables in the Mnesia DBMS.</item> + </list> + </section> + + <section> + <title>SNMPv1, SNMPv2 and SNMPv3</title> + <marker id="versions"></marker> + <p>The SNMP development toolkit works with all three versions of + Standard Internet Management Framework; SNMPv1, SNMPv2 and SNMPv3. + They all share the same basic structure and components. And they + follow the same architecture.</p> + <p>The versions are defined in following RFCs</p> + <list type="bulleted"> + <item>SNMPv1 RFC 1555, 1157 1212, 1213 and 1215</item> + <item>SNMPv2 RFC 1902 - 1907</item> + <item>SNMPv3 RFC 2570 - 2575</item> + </list> + <p>Over time, as the Framework has evolved from SNMPv1 , through SNMPv2, + to SNMPv3 the definitions of each of these architectural components + have become richer and more clearly defined, but the fundamental + architecture has remained consistent.</p> + <p>The main features of SNMPv2 compared to SNMPv1 are: + </p> + <list type="bulleted"> + <item>The <c>get-bulk</c> operation for transferring large + amounts of data. + </item> + <item>Enhanced error codes. + </item> + <item>A more precise language for MIB specification</item> + </list> + <p>The standard documents that define SNMPv2 are incomplete, in + the sense that they do not specify how an SNMPv2 message looks + like. The message format and security issues are left to a + special Administrative Framework. One such framework is the + Community-based SNMPv2 Framework (SNMPv2c), which uses the same + message format and framework as SNMPv1. Other + experimental frameworks as exist, e.g. SNMPv2u and SNMPv2*. + </p> + <p>The SNMPv3 specifications take a modular + approach to SNMP. All modules are + separated from each other, and can be extended or replaced + individually. Examples of modules are Message definition, + Security and Access Control. The main features of SNMPv3 are: + </p> + <list type="bulleted"> + <item>Encryption and authentication is added. + </item> + <item>MIBs for agent configuration are defined.</item> + </list> + <p>All these specifications are commonly referred to as "SNMPv3", + but it is actually only the Message module, which defines a new + message format, and Security module, which takes care of + encryption and authentication, that cannot be used with SNMPv1 or + SNMPv2c. In this version of the agent toolkit, all the standard + MIBs for agent configuration are used. This includes MIBs for + definition of management targets for notifications. These MIBs + are used regardless of which SNMP version the agent is configured + to use. + </p> + <p>The extensible agent in this toolkit understands the SNMPv1, + SNMPv2c and SNMPv3. Recall that SNMP consists of two separate + parts, the MIB definition language (SMI), and the protocol. On + the protocol level, the agent can be configured to speak v1, v2c, + v3 or any combination of them at the same time, i.e. a v1 request + gets an v1 reply, a v2c request gets a v2c reply, and a v3 request + gets a v3 reply. On the MIB level, the MIB compiler can compile + both SMIv1 and SMIv2 MIBs. Once compiled, any of the formats can + be loaded into the agent, regardless of which protocol version the + agent is configured to use. This means that the agent translates + from v2 notifications to v1 traps, and vice versa. For example, + v2 MIBs can be loaded into an agent that speaks v1 only. The + procedures for the translation between the two protocols are + described in RFC 1908 and RFC 2089. + </p> + <p>In order for an implementation to make full use of the enhanced + SNMPv2 error codes, it is essential that the instrumentation + functions always return SNMPv2 error codes, in case of error. + These are translated into the corresponding SNMPv1 error codes by + the agent, if necessary.</p> + <note> + <p>The translation from an SMIv1 MIB to an SNMPv2c or SNMPv3 reply + is always very straightforward, but the translation from a v2 MIB + to a v1 reply is somewhat more complicated. There is one data + type in SMIv2, called <c>Counter64</c>, that an SNMPv1 manager cannot + decode correctly. Therefore, an agent may never send a <c>Counter64</c> + object to an SNMPv1 manager. The common practice in these + situations is to simple ignore any <c>Counter64</c> objects, when sending + a reply or a trap to an SNMPv1 manager. For example, if an SNMPv1 + manager tries to GET an object of type <c>Counter64</c>, he will get a + <c>noSuchName</c> error, while an SNMPv2 manager would get a + correct value.</p> + </note> + </section> + + <section> + <title>Operation</title> + <marker id="operations"></marker> + <p>The following steps are needed to get a running agent:</p> + <list type="ordered"> + <item> + <p>Write your MIB in SMI in a text file.</p> + </item> + <item> + <p>Write the instrumentation functions in Erlang and compile them.</p> + </item> + <item> + <p>Put their names in the association file.</p> + </item> + <item> + <p>Run the MIB together with the association file through the + MIB compiler.</p> + </item> + <item> + <p>Configure the application (agent).</p> + </item> + <item> + <p>Start the application (agent).</p> + </item> + <item> + <p>Load the compiled MIB into the agent.</p> + </item> + </list> + <p>The figures in this section illustrate the steps involved in + the development of an SNMP agent.</p> + <marker id="image-1"></marker> + <image file="snmp-um-1-image-1.gif"> + <icaption>MIB Compiler Principles</icaption> + </image> + <p>The compiler parses the SMI file and associates each table or + variable with an instrumentation function (see the figure <seealso marker="#image-1">MIB Compiler Principles</seealso>). The actual + instrumentation functions are not needed at MIB compile time, only + their names. + </p> + <p>The binary output file produced by the compiler is read by the + agent at MIB load time (see the figure <seealso marker="#image-2">Starting the Agent</seealso>). The instrumentation is ordinary Erlang code which + is loaded explicitly or automatically the first time it is called.</p> + <marker id="image-2"></marker> + <image file="snmp-um-1-image-2.gif"> + <icaption>Starting the Agent</icaption> + </image> + <p>The SNMP agent system consists of one Master Agent and optional + sub-agents. The Master Agent can be seen as a special kind of + sub-agent. It implements the core agent functionality, UDP packet + processing, type checking, access control, trap distribution, and + so on. From a user perspective, it is used as an ordinary + sub-agent. + </p> + <p>Sub-agents are only needed if your application requires special + support for distribution from the SNMP toolkit. A sub-agent can + also be used if the application requires a more complex set + transaction scheme than is found in the master agent. + </p> + <p>The following illustration shows how a system can look in runtime.</p> + <marker id="snmp_ch2_fig3"></marker> + <image file="snmp-um-1-image-3.gif"> + <icaption>Architecture</icaption> + </image> + <p>A typical operation could include the following steps:</p> + <list type="ordered"> + <item>The Manager sends a request to the Agent.</item> + <item>The Master Agent decodes the incoming UDP packet.</item> + <item>The Master Agent determines which items in the request + that should be processed here and which items should be + forwarded to its subagent.</item> + <item>Step 3 is repeated by all subagents.</item> + <item>Each sub-agent calls the instrumentation for its loaded MIBs.</item> + <item>The results of calling the instrumentation are propagated + back to the Master Agent.</item> + <item>The answer to the request is encoded to a UDP Protocol + Data Unit (PDU).</item> + </list> + <p>The sequence of steps shown is probably more complex than + normal, but it illustrates the amount of functionality which is + available. The following points should be noted: + </p> + <list type="bulleted"> + <item>An agent can have many MIBs loaded at the same time.</item> + <item>Sub-agents can also have sub-agents. Each sub-agent can have + an arbitrary number of child sub-agents registered, forming a + hierarchy.</item> + <item>One MIB can communicate with many applications.</item> + <item>Instrumentation can use Distributed Erlang to communicate + with an application.</item> + </list> + <p>Most applications only need the Master Agent because an agent + can have multiple MIBs loaded at the same time.</p> + </section> + + <section> + <title>Sub-agents and MIB Loading</title> + <marker id="sub_agent_mib_loading"></marker> + <p>Since applications tend to be transient (they are dynamically + loaded and unloaded), the management of these applications must be + dynamic as well. For example, if we have an equipment MIB for a + rack and different MIBs for boards, which can be installed in the + rack, the MIB for a card should be loaded when the card is + inserted, and unloaded when the card is removed. + </p> + <p>In this agent system, there are two ways to dynamically install + management information. The most common way is to load an MIB into + an agent. The other way is to use a sub-agent, which is controlled + by the application and is able to register and unregister itself. A + sub-agent can register itself for managing a sub-tree (not to be mixed up + with <c>erlang:register</c>). The sub-tree is identified by an + Object Identifier. When a sub-agent is registered, it receives all + requests for this particular sub-tree and it is responsible for + answering them. It should also be noted that a sub-agent can be + started and stopped at any time. + </p> + <p>Compared to other SNMP agent packages, there is a significant + difference in this way of using sub-agents. Other packages normally + use sub-agents to load and unload MIBs in run-time. In Erlang, it is + easy to load code in run-time and it is possible to load an MIB + into an existing sub-agent. It is not necessary to create a new process + for handling a new MIB. + </p> + <p>Sub-agents are used for the following reasons: + </p> + <list type="bulleted"> + <item>to provide a more complex set-transaction scheme than + master agent</item> + <item>to avoid unnecessary process communication</item> + <item>to provide a more lightweight mechanism for loading and + unloading MIBs in run-time</item> + <item>to provide interaction with other SNMP agent toolkits.</item> + </list> + <p>Refer to the chapter + <seealso marker="snmp_advanced_agent">Advanced Agent Topics</seealso> + in this User's Guide for more information about these topics. + </p> + <p>The communication protocol between sub-agents is the normal + message passing which is used in distributed Erlang systems. This + implies that sub-agent communication is very efficient compared to + SMUX, DPI, AgentX, and similar protocols.</p> + </section> + + <section> + <title>Contexts and Communities</title> + <marker id="context_and_communities"></marker> + <p>A context is a collection of management information accessible + by an SNMP entity. An instance of a management object may exist in + more than one context. An SNMP entity potentially has access to + many contexts.</p> + <p>Each managed object can exist in many instances within a + SNMP entity. To identify the instances, specified by an MIB module, + a method to distinguish the actual instance by its 'scope' or + context is used. Often the context is a physical or a logical device. + It can include multiple devices, a subset of a single device or a + subset of multiple devices, but the context is always + defined as a subset of a single SNMP entity. To be able to + identify a specific + item of management information within an SNMP entity, the context, + the object type and its instance must be used.</p> + <p>For example, the managed object type <c>ifDescr</c> from RFC1573, is + defined as the description of a network interface. To identify + the description of device-X's first network interface, four pieces + of information are needed: the snmpEngineID of the SNMP entity + which provides access to the management information at device-X, + the <c>contextName</c> (device-X), the managed object type + (<c>ifDescr</c>), and the instance ("1"). + </p> + <p>In SNMPv1 and SNMPv2c, the community string in the message was + used for (at least) three different purposes: + </p> + <list type="bulleted"> + <item> + <p>to identify the context</p> + </item> + <item> + <p>to provide authentication</p> + </item> + <item> + <p>to identify a set of trap targets</p> + </item> + </list> + <p>In SNMPv3, each of these usage areas has its own unique + mechanism. A context is identified by the name of the SNMP + entity, <c>contextEngineID</c>, and the name of the context, + <c>contextName</c>. Each SNMPv3 message contains values for these + two parameters. + </p> + <p>There is a MIB, SNMP-COMMUNITY-MIB, which maps a community + string to a <c>contextEngineID</c> and <c>contextName</c>. Thus, + each message, an SNMPv1, SNMPv2c or an SNMPv3 message, always + uniquely identifies a context. + </p> + <p>For an agent, the <c>contextEngineID</c> identified by a received + message, is always equal to the <c>snmpEngineID</c> of the agent. + Otherwise, the message was not intended for the agent. If the + agent is configured with more than one context, the + instrumentation code must be able to figure out for which context + the request was intended. There is a function + <c>snmpa:current_context/0</c> provided for this purpose. + </p> + <p>By default, the agent has no knowledge of any other contexts + than the default context, <c>""</c>. If it is to support more + contexts, these must be explicitly added, by using an appropriate + configuration file + <seealso marker="snmp_agent_config_files">Agent Configuration Files</seealso>. + </p> + </section> + + <section> + <title>Management of the Agent</title> + <marker id="management"></marker> + <p>There is a set of standard MIBs, which are used to control and + configure an SNMP agent. All of these MIBs, with the exception of + the optional SNMP-PROXY-MIB (which is only used for proxy agents), + are implemented in this agent. Further, it is configurable which + of these MIBs are actually loaded, and thus made visible to SNMP + managers. For example, in a non-secure environment, it might be a + good idea to not make MIBs that define access control visible. + Note, the data the MIBs define is used internally in the + agent, even if the MIBs not are loaded. This chapter describes + these standard MIBs, and some aspects of their implementation. + </p> + <p>Any SNMP agent must implement the <c>system</c> group and the + <c>snmp</c> group, defined in MIB-II. The definitions of these + groups have changed from SNMPv1 to SNMPv2. MIBs and implementations + for both of these versions are Provided in the + distribution. The MIB file for SNMPv1 is called STANDARD-MIB, and the + corresponding for SNMPv2 is called SNMPv2-MIB. If the agent is + configured for SNMPv1 only, the STANDARD-MIB is loaded by default; + otherwise, the SNMPv2-MIB is loaded by default. It is possible to + override this default behavior, by explicitly loading another + version of this MIB, for example, you could choose to implement + the union of all objects in these two MIBs. + </p> + <p>An SNMPv3 agent must implement the SNMP-FRAMEWORK-MIB and + SNMP-MPD-MIB. These MIBs are loaded by default, if the agent is + configured for SNMPv3. These MIBs can be loaded for other + versions as well. + </p> + <p>There are five other standard MIBs, which also may be loaded + into the agent. These MIBs are: + </p> + <list type="bulleted"> + <item> + <p>SNMP-TARGET-MIB and SNMP-NOTIFICATION-MIB, which defines + managed objects for configuration of management targets, + i.e. receivers of notifications (traps and informs). These + MIBs can be used with any SNMP version. + </p> + </item> + <item> + <p>SNMP-VIEW-BASED-ACM-MIB, which defined managed objects + for access control. This MIB can be used with any SNMP + version. + </p> + </item> + <item> + <p>SNMP-COMMUNITY-MIB, which defines managed objects for + coexistence of SNMPv1 and SNMPv2c with SNMPv3. This MIB is + only useful if SNMPv1 or SNMPv2c is used, possibly in + combination with SNMPv3. + </p> + </item> + <item> + <p>SNMP-USER-BASED-SM-MIB, which defines managed objects + for authentication and privacy. This MIB is only useful + with SNMPv3. + </p> + </item> + </list> + <p>All of these MIBs should be loaded into the Master Agent. Once + loaded, these MIBs are always available in all contexts. + </p> + <p>The ASN.1 code, the Erlang source code, and the generated + <c>.hrl</c> files for them are provided in the distribution and are + placed in the directories <c>mibs</c>, <c>src</c>, and <c>include</c>, + respectively, in the <c>snmp</c> application. + </p> + <p>The <c>.hrl</c> files are generated with + <c>snmpc:mib_to_hrl/1</c>. Include these files in your code as in + the following example: + </p> + <code type="none"> +-include_lib("snmp/include/SNMPv2-MIB.hrl"). + </code> + <p>The initial values for the managed objects defined in these + tables, are read at start-up from a set of configuration files. + These are described in <seealso marker="snmp_config">Configuration Files</seealso>. + </p> + + <section> + <title>STANDARD-MIB and SNMPv2-MIB</title> + <p>These MIBs contain the <c>snmp-</c> and <c>system</c> groups + from MIB-II which is defined in RFC1213 (STANDARD-MIB) or + RFC1907 (SNMPv2-MIB). They are implemented in the + <c>snmp_standard_mib</c> module. The <c>snmp</c> counters all + reside in volatile memory and the <c>system</c> and + <c>snmpEnableAuthenTraps</c> variables in persistent memory, + using the SNMP built-in database (refer to the Reference Manual, + section <c>snmp</c>, module <c>snmpa_local_db</c> for more + details).</p> + <p>If another implementation of any of these variables is needed, + e.g. to store the persistent variables in a Mnesia database, + an own implementation of the variables must be made. That MIB + will be compiled and loaded instead of the default MIB. + The new compiled MIB + must have the same name as the original MIB (i.e. STANDARD-MIB + or SNMPv2-MIB), and be located in the SNMP configuration + directory (see <seealso marker="snmp_config">Configuration Files</seealso>.) + </p> + <p>One of these MIBs is always loaded. If only SNMPv1 is used, + STANDARD-MIB is loaded, otherwise SNMPv2-MIB is loaded. + </p> + + <section> + <title>Data Types</title> + <p>There are some new data types in SNMPv2 that are useful in + SNMPv1 as well. In the STANDARD-MIB, three data types are + defined, <c>RowStatus</c>, <c>TruthValue</c> and + <c>DateAndTime</c>. These data types are originally defined + as textual conventions in SNMPv2-TC (RFC1903). + </p> + </section> + </section> + + <section> + <title>SNMP-FRAMEWORK-MIB and SNMP-MPD-MIB</title> + <p>The SNMP-FRAMEWORK-MIB and SNMP-MPD-MIB define additional + read-only managed objects, which + is used in the generic SNMP framework defined in RFC2271 and the + generic message processing and dispatching module defined in + RFC2272. They are generic in the sense that they are not tied + to any specific SNMP version. + </p> + <p>The objects in these MIBs are implemented in the modules + <c>snmp_framework_mib</c> and <c>snmp_standard_mib</c>, + respectively. All objects reside in volatile memory, and the + configuration files are always reread at start-up. + </p> + <p>If SNMPv3 is used, these MIBs are loaded by default. + </p> + </section> + + <section> + <title>SNMP-TARGET-MIB and SNMP-NOTIFICATION-MIB</title> + <p>The SNMP-TARGET-MIB and SNMP-NOTIFICATION-MIB define managed + objects for configuration of notification receivers. They + are described in detail in RFC2273. Only a brief description + is given here. + </p> + <p>All tables in these MIBs have a column of type + <c>StorageType</c>. The value of this column specifies how each + row is stored, and what happens in case of a restart of the + agent. The implementation supports the values <c>volatile</c> + and <c>nonVolatile</c>. When the tables are initially filled + with data from the configuration files, these rows will + automatically have storage type <c>nonVolatile</c>. Should the + agent restart, all <c>nonVolatile</c> rows survive the restart, + while the <c>volatile</c> rows are lost. + The configuration files are not read at restart, by default. + </p> + <p>These MIBs are not loaded by default. + </p> + + <section> + <title>snmpNotifyTable</title> + <p>An entry in the <c>snmpNotifyTable</c> selects a set + of management targets, which should receive notifications, + as well as the type (trap or inform) of notification that + should be sent to each selected management target. + When an application sends a notification using + the function <c>send_notification/5</c> or the function + <c>send_trap</c> the parameter <c>NotifyName</c>, specified in + the call, is used as an index in the table. The notification + is sent to the management targets selected by that entry. + </p> + </section> + + <section> + <title>snmpTargetAddrTable</title> + <p>An entry in the <c>snmpTargetAddrTable</c> defines + transport parameters (such as + IP address and UDP port) for each management target. Each row + in the <c>snmpNotifyTable</c> refers to potentially many rows + in the <c>snmpTargetAddrTable</c>. Each row in the + <c>snmpTargetAddrTable</c> + refers to an entry in the <c>snmpTargetParamsTable</c>. + </p> + </section> + + <section> + <title>snmpTargetParamsTable</title> + <p>An entry in the <c>snmpTargetParamsTable</c> defines + which SNMP version to use, and which security parameters to use. + </p> + <p>Which SNMP version to use is implicitly defined by + specifying the Message Processing Model. This version of the + agent handles the models <c>v1</c>, <c>v2c</c> and <c>v3</c>. + </p> + <p>Each row specifies which security model to use, along with + security level and security parameters. + </p> + </section> + </section> + + <section> + <title>SNMP-VIEW-BASED-ACM-MIB</title> + <p>The SNMP-VIEW-BASED-ACM-MIB defines managed objects to + control access to the the managed objects for the managers. + The View Based Access Control Module (VACM) can be used with + any SNMP version. However, if it is used with SNMPv1 or SNMPv2c, + the SNMP-COMMUNITY-MIB defines additional objects to map + community strings to VACM parameters. + </p> + <p>All tables in this MIB have a column of type <c>StorageType</c>. + The value of this column specifies how each + row is stored, and what happens in case of a restart of the + agent. The implementation supports the values <c>volatile</c> + and <c>nonVolatile</c>. When the tables are initially filled + with data from the configuration files, these rows will + automatically have storage type <c>nonVolatile</c>. Should the + agent restart, all <c>nonVolatile</c> rows survive the restart, + while the <c>volatile</c> rows are lost. + The configuration files are not read at restart by default. + </p> + <p>This MIB is not loaded by default. + </p> + <p>VACM is described in detail in RFC2275. Here is only a brief + description given. + </p> + <p>The basic concept is that of a <em>MIB view</em>. An MIB view + is a subset of all the objects implemented by an agent. A + manager has access to a certain MIB view, depending on which + security parameters are used, in which context the request is + made, and which type of request is made. + </p> + <p>The following picture gives an overview of the mechanism to + select an MIB view:</p> + <image file="MIB_mechanism.gif"> + <icaption>Overview of the mechanism of MIB selection</icaption> + </image> + + <section> + <title>vacmContextTable</title> + <p>The <c>vacmContextTable</c> is a read-only table that lists all + available contexts. + </p> + </section> + + <section> + <title>vacmSecurityToGroupTable</title> + <p>The <c>vacmSecurityToGroupTable</c> maps a <c>securityModel</c> + and a + <c>securityName</c> to a <c>groupName</c>. + </p> + </section> + + <section> + <title>vacmAccessTable</title> + <p>The <c>vacmAccessTable</c> maps the <c>groupName</c> (found in + <c>vacmSecurityToGroupTable</c>), <c>contextName</c>, + <c>securityModel</c>, and <c>securityLevel</c> to an MIB view + for each type of operation (read, write, or notify). The MIB + view is represented as a <c>viewName</c>. The definition of + the MIB view represented by the <c>viewName</c> is found in + the <c>vacmViewTreeFamilyTable</c></p> + </section> + + <section> + <title>vacmViewTreeFamilyTable</title> + <p>The <c>vacmViewTreeFamilyTable</c> is indexed by the + <c>viewName</c>, and defines + which objects are included in the MIB view. + </p> + <p>The MIB definition for the table looks as follows:</p> + <pre> +VacmViewTreeFamilyEntry ::= SEQUENCE + { + vacmViewTreeFamilyViewName SnmpAdminString, + vacmViewTreeFamilySubtree OBJECT IDENTIFIER, + vacmViewTreeFamilyMask OCTET STRING, + vacmViewTreeFamilyType INTEGER, + vacmViewTreeFamilyStorageType StorageType, + vacmViewTreeFamilyStatus RowStatus + } + +INDEX { vacmViewTreeFamilyViewName, + vacmViewTreeFamilySubtree + } + </pre> + <p>Each <c>vacmViewTreeFamilyViewName</c> refers to a + collection of sub-trees. + </p> + + <section> + <title>MIB View Semantics</title> + <p>An MIB view is a collection of included and excluded + sub-trees. A sub-tree is identified by an OBJECT IDENTIFIER. A + mask is associated with each sub-tree. + </p> + <p>For each possible MIB object instance, the instance + belongs to a sub-tree if: + </p> + <list type="bulleted"> + <item>the OBJECT IDENTIFIER name of that MIB object + instance comprises at least as many sub-identifiers as + does the sub-tree, and + </item> + <item>each sub-identifier in the name of that MIB object + instance matches the corresponding sub-identifier of the + sub-tree whenever the corresponding bit of the associated + mask is 1 (0 is a wild card that matches anything).</item> + </list> + <p>Membership of an object instance in an MIB view is + determined by the following algorithm: + </p> + <list type="bulleted"> + <item>If an MIB object instance does not belong to any of + the relevant sub-trees, then the instance is not in the + MIB view. + </item> + <item>If an MIB object instance belongs to exactly one + sub-tree, then the instance is included in, or excluded + from, the relevant MIB view according to the type of + that entry. + </item> + <item>If an MIB object instance belongs to more than one + sub-tree, then the sub-tree which comprises the greatest + number of sub-identifiers, and is the lexicographically + greatest, is used. + </item> + </list> + <note> + <p>If the OBJECT IDENTIFIER is longer than an OBJECT + IDENTIFIER of an object type in the MIB, it refers to + object instances. Because of this, it is possible to + control whether or not particular rows in a table shall be + visible.</p> + </note> + </section> + </section> + </section> + + <section> + <title>SNMP-COMMUNITY-MIB</title> + <p>The SNMP-COMMUNITY-MIB defines managed objects that is used + for coexistence between SNMPv1 and SNMPv2c with SNMPv3. + Specifically, it contains objects for mapping between community + strings and version-independent SNMP message parameters. In + addition, this MIB provides a mechanism for performing source address + validation on incoming requests, and for selecting community + strings based on target addresses for outgoing notifications. + </p> + <p>All tables in this MIB have a column of type + <c>StorageType</c>. The value of this column specifies how each + row is stored, and what happens in case of a restart of the + agent. The implementation supports the values <c>volatile</c> + and <c>nonVolatile</c>. When the tables are initially filled + with data from the configuration files, these rows will + automatically have storage type <c>nonVolatile</c>. Should the + agent restart, all <c>nonVolatile</c> rows survive the restart, + while the <c>volatile</c> rows are lost. + The configuration files are not read at restart, by default. + </p> + <p>This MIB is not loaded by default. + </p> + </section> + + <section> + <title>SNMP-USER-BASED-SM-MIB</title> + <p>The SNMP-USER-BASED-SM-MIB defines managed objects that is + used for the User-Based Security Model. + </p> + <p>All tables in this MIB have a column of type + <c>StorageType</c>. The value of the column specifies how each + row is stored, and what happens in case of a restart of the + agent. The implementation supports the values <c>volatile</c> + and <c>nonVolatile</c>. When the tables are initially filled + with data from the configuration files, these rows will + automatically have storage type <c>nonVolatile</c>. Should the + agent restart, all <c>nonVolatile</c> rows survive the restart, + while the <c>volatile</c> rows are lost. + The configuration files are not read at restart, by default. + </p> + <p>This MIB is not loaded by default. + </p> + </section> + + <section> + <title>OTP-SNMPEA-MIB</title> + <p>The OTP-SNMPEA-MIB was used in earlier versions of the agent, before + standard MIBs existed for access control, MIB views, and trap + target specification. All objects in this MIB are now obsolete. + </p> + </section> + </section> + + <section> + <title>Notifications</title> + <marker id="notifications"></marker> + <p>Notifications are defined in SMIv1 with the TRAP-TYPE macro in + the definition of an MIB (see RFC1215). The corresponding + macro in SMIv2 is NOTIFICATION-TYPE. When an application + decides to send a notification, it calls one of the following + functions: + </p> + <code type="none"> +snmpa:send_notification(Agent, Notification, Receiver + [, NotifyName, ContextName, Varbinds]) +snmpa:send_trap(Agent, Notification, Community [, Receiver, Varbinds]) + </code> + <p>providing the registered name or process identifier of the + agent where the MIB, which defines the notification is loaded and + the symbolic name of the notification. + </p> + <p>If the <c>send_notification/3,4</c> function is used, all + management targets are selected, as defined in RFC2273. The + <c>Receiver</c> parameter defines where the agent should send + information about the delivery of inform requests. + </p> + <p>If the <c>send_notification/5</c> function is used, an + <c>NotifyName</c> must be provided. This parameter is used as an + index in the <c>snmpNotifyTable</c>, and the management targets + defined by that single entry is used. + </p> + <p>The <c>send_notification/6</c> function is the most general + version of the function. A <c>ContextName</c> must be specified, + from which the notification will be sent. If this parameter is + not specified, the default context (<c>""</c>) is used. + </p> + <p>The function <c>send_trap</c> is kept for backwards + compatibility and should not be used in new code. Applications + that use this function will + continue to work. The <c>snmpNotifyName</c> is used as the + community string by the agent when a notification is sent. + </p> + + <section> + <title>Notification Sending</title> + <p>The simplest way to send a notification is to call the function + <c>snmpa:send_notification(Agent, Notification, no_receiver)</c>. + In this case, the agent performs a get-operation to retrieve the + object values that are defined in the notification + specification (with the TRAP-TYPE or NOTIFICATION-TYPE macros). + The notification is sent to all managers defined in the target + and notify tables, either unacknowledged as traps, or + acknowledged as inform requests. + </p> + <p>If the caller of the function wants to know whether or not + acknowledgments are received for a certain notification + (provided it is sent as an inform), the <c>Receiver</c> + parameter can be specified as <c>{Tag, ProcessName}</c> (refer + to the Reference Manual, section snmp, module <c>snmp</c> for + more details). In this case, the agent send a message + <c>{snmp_notification, Tag, {got_response, ManagerAddr}}</c> or + <c>{snmp_notification, Tag, {no_response, ManagerAddr}}</c> for + each management target. + </p> + <p>Sometimes it is not possible to retrieve the values for some + of the objects in the notification specification with a + get-operation. However, they are known when the + <c>send_notification</c> function is called. This is the case if + an object is an element in a table. It is possible to give the + values of some objects to the <c>send_notification</c> function + <c>snmpa:send_notification(Agent, Notification, Receiver, Varbinds)</c>. In this function, <c>Varbinds</c> is a list of + <c>Varbind</c>, where each <c>Varbind</c> is one of: + </p> + <list type="bulleted"> + <item><c>{Variable, Value}</c>, where <c>Variable</c> is the + symbolic name of a scalar variable referred to in the notification + specification. + </item> + <item><c>{Column, RowIndex, Value}</c>, where <c>Column</c> is + the symbolic name of a column variable. <c>RowIndex</c> is a + list of indices for the specified element. If this is the + case, the OBJECT IDENTIFIER sent in the trap is the + <c>RowIndex</c> appended to the OBJECT IDENTIFIER for the + table column. This is the OBJECT IDENTIFIER which specifies + the element. + </item> + <item><c>{OID, Value}</c>, where <c>OID</c> is the OBJECT + IDENTIFIER for an instance of an object, scalar variable or + column variable. + </item> + </list> + <p>For example, to specify that <c>sysLocation</c> should have the + value <c>"upstairs"</c> in the notification, we could use one of: + </p> + <list type="bulleted"> + <item><c>{sysLocation, "upstairs"}</c> or</item> + <item><c>{[1,3,6,1,2,1,1,6,0], "upstairs"}</c></item> + </list> + <p>It is also possible to specify names and values for extra + variables that should be sent in the notification, but were not + defined in the notification specification. + </p> + <p>The notification is sent to all management targets found in + the tables. However, make sure that each manager has access to + the variables in the notification. If a variable is outside a + manager's MIB view, this manager will not receive the + notification. + </p> + <note> + <p>By definition, it is not possible to send objects with + ACCESS <c>not-accessible</c> in notifications. However, + historically this is often done and for this reason we allow + it in notification sending. If a variable has ACCESS + <c>not-accessible</c>, the user must provide a value for the + variable in the <c>Varbinds</c> list. It is not possible for + the agent to perform a get-operation to retrieve this value. + </p> + </note> + </section> + + <section> + <title>Notification Filters</title> + <p>It is possible to add <em>notification filters</em> to an agent. + These filters will be called when a notification is to be + sent. Their purpose is to allow modification, suppression or + other type of actions.</p> + <p>A notification filter is a module implementing the + <seealso marker="snmpa_notification_filter">snmpa_notification_filter</seealso> behaviour. A filter is added/deleted using the functions: + <seealso marker="snmpa#register_notification_filter">snmpa:register_notification_filter</seealso> and + <seealso marker="snmpa#unregister_notification_filter">snmpa:unregister_notification_filter</seealso>.</p> + <p>Unless otherwise specified, the order of the registered filters + will be the order in which they are registered.</p> + </section> + + <section> + <title>Sub-agent Path</title> + <p>If a value for an object is not given to the + <c>send_notification</c> function, the sub-agent will perform a + get-operation to retrieve it. If the object is not implemented + in this sub-agent, its parent agent tries to perform a + get-operation to retrieve it. If the object is not implemented + in this agent either, it forwards the object to its parent, and + so on. Eventually the Master Agent is reached and at this point + all unknown object values must be resolved. If some object is + unknown even to the Master Agent, this is regarded as an error + and is reported with a call to <c>user_err/2</c> of the + error report module. No notifications are sent in this case. + </p> + <p>For a given notification, the variables, which are referred to + in the notification specification, must be implemented by the + agent that has the MIB loaded, or by some parent to this + agent. If not, the application must provide values for the + unknown variables. The application must also provide values for + all elements in tables. + </p> + </section> + </section> + + <section> + <title>Discovery</title> + <marker id="discovery"></marker> + <p>The <em>sender</em> is <em>authoritative</em> for messages containing + payload which does <em>not</em> expect a response (for example + SNMPv2-Trap, Response or Report PDU). </p> + <p>The <em>receiver</em> is <em>authoritative</em> for messages containing + payload which expects a response (for example + Get, GetNext, Get-Bulk, Set or Inform PDU). </p> + <p>The agent can both perform and respond to discovery.</p> + <p>The agent responds to discovery autonomously, without interaction + by the user. </p> + <p>Initiating discovery towards a manager is done by calling the + <seealso marker="snmpa#discovery">discovery</seealso> function. + The <c>EngineId</c> field of the target (manager) entry in the + <seealso marker="snmp_agent_config_files#target_addr">target_addr.conf</seealso> file has to have the value <c>discovery</c>. + Note that if the manager does not respond, the <c>Timeout</c> and + <c>RetryCount</c> + fields decide how long the function will hang before it returns. </p> + <p>Discovery can only be performed towards one manager at a time.</p> + </section> + +</chapter> + diff --git a/lib/snmp/doc/src/snmp_agent_netif.xml b/lib/snmp/doc/src/snmp_agent_netif.xml new file mode 100644 index 0000000000..1f2dbe80db --- /dev/null +++ b/lib/snmp/doc/src/snmp_agent_netif.xml @@ -0,0 +1,268 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>1997</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>Definition of Agent Net if</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_agent_netif.xml</file> + </header> + <p></p> + <image file="snmp_agent_netif_1.gif"> + <icaption>The Purpose of Agent Net if</icaption> + </image> + <p>The Network Interface (Net if) process delivers SNMP PDUs to a + master agent, and receives SNMP PDUs from the master agent. The most + common behaviour of a Net if process is that is receives bytes from + a network, decodes them into an SNMP PDU, which it sends to a master + agent. When the master agent has processed the PDU, it sends a + response PDU to the Net if process, which encodes the PDU into bytes + and transmits the bytes onto the network. + </p> + <p>However, that simple behaviour can be modified in numerous + ways. For example, the Net if process can apply some kind of + encrypting/decrypting scheme on the bytes or + act as a proxy filter, which sends some packets to a proxy agent and + some packets to the master agent. + </p> + <p>It is also possible to write your own Net if process. The default + Net if process is implemented in the module <c>snmpa_net_if</c> and + it uses UDP as the transport protocol. + </p> + <p>This section describes how to write a Net if process. + </p> + + <section> + <marker id="mandatory_functions"></marker> + <title>Mandatory Functions</title> + <p>A Net if process must implement the SNMP agent + <seealso marker="snmpa_network_interface">network interface behaviour</seealso>. + </p> + </section> + + <section> + <title>Messages</title> + <p>The section <em>Messages</em> describes mandatory messages, which + Net if must send and be able to receive. + </p> + + <section> + <title>Outgoing Messages</title> + <p>Net if must send the following message when it receives an + SNMP PDU from the network that is aimed for the MasterAgent: + </p> + <pre> +MasterAgent ! {snmp_pdu, Vsn, Pdu, PduMS, ACMData, From, Extra} + </pre> + <list type="bulleted"> + <item><c>Vsn</c> is either <c>'version-1'</c>, + <c>'version-2'</c>, or <c>'version-3'</c>. + </item> + <item><c>Pdu</c> is an SNMP PDU record, as defined in + <c>snmp_types.hrl</c>, with the SNMP request. + </item> + <item><c>PduMS</c> is the Maximum Size of the response Pdu + allowed. Normally this is returned from + <c>snmpa_mpd:process_packet</c> (see Reference Manual). + </item> + <item><c>ACMData</c> is data used by the Access Control Module + in use. Normally this is returned from + <c>snmpa_mpd:process_packet</c> (see Reference Manual). + </item> + <item><c>From</c> is the source address. If UDP over IP is + used, this should be a 2-tuple <c>{IP, UDPport}</c>, where + <c>IP</c> is a 4-tuple with the IP address, and <c>UDPport</c> + is an integer. + </item> + <item><c>Extra</c> is any term the Net if process wishes to + send to the agent. This term can be retrieved by the + instrumentation functions by calling + <c>snmp:current_net_if_data()</c>. This data is also sent back + to the Net if process when the agent generates a response to + the request.</item> + </list> + <p>The following message is used to report that a response to a + request has been received. The only request an agent can send + is an Inform-Request. + </p> + <pre> +Pid ! {snmp_response_received, Vsn, Pdu, From} + </pre> + <list type="bulleted"> + <item><c>Pid</c> is the Process that waits for the response + for the request. The Pid was specified in the + <c>send_pdu_req</c> message <seealso marker="#message">(see below)</seealso>. + </item> + <item><c>Vsn</c> is either <c>'version-1'</c>, <c>'version-2'</c>, or + <c>'version-3'</c>. + </item> + <item><c>Pdu</c> is the SNMP Pdu received + </item> + <item><c>From</c> is the source address. If UDP over IP is + used, this should be a 2-tuple <c>{IP, UDPport}</c>, where + <c>IP</c> is a 4-tuple with the IP address, and <c>UDPport</c> + is an integer. + </item> + </list> + </section> + + <section> + <title>Incoming Messages</title> + <p>This section describes the incoming messages which a Net if + process must be able to receive. + </p> + <list type="bulleted"> + <item> + <p><c>{snmp_response, Vsn, Pdu, Type, ACMData, To, Extra}</c></p> + <p>This message is sent to the Net if process from a master + agent as a response to a previously received request. + </p> + <list type="bulleted"> + <item><c>Vsn</c> is either <c>'version-1'</c>, + <c>'version-2'</c>, or <c>'version-3'</c>. + </item> + <item><c>Pdu</c> is an SNMP PDU record (as defined in + snmp_types.hrl) with the SNMP response. + </item> + <item><c>Type</c> is the <c>#pdu.type</c> of the original + request. + </item> + <item><c>ACMData</c> is data used by the Access Control + Module in use. Normally this is just sent to + <c>snmpa_mpd:generate_response_message</c> (see Reference Manual). + </item> + <item><c>To</c> is the destination address. If UDP over IP + is used, this should be a 2-tuple <c>{IP, UDPport}</c>, + where <c>IP</c> is a 4-tuple with the IP address, and + <c>UDPport</c> is an integer. + </item> + <item><c>Extra</c> is the term that the Net if process + sent to the agent when the request was sent to the agent. + </item> + </list> + </item> + <item> + <p><c>{discarded_pdu, Vsn, ReqId, ACMData, Variable, Extra}</c></p> + <p>This message is sent from a master agent if it for some + reason decided to discard the pdu. + </p> + <list type="bulleted"> + <item><c>Vsn</c> is either <c>'version-1'</c>, + <c>'version-2'</c>, or <c>'version-3'</c>. + </item> + <item><c>ReqId</c> is the request id of the original + request. + </item> + <item><c>ACMData</c> is data used by the Access Control + Module in use. Normally this is just sent to + <c>snmpa_mpd:generate_response_message</c> (see Reference Manual). + </item> + <item><c>Variable</c> is the name of an snmp counter that + represents the error, e.g. <c>snmpInBadCommunityUses</c>. + </item> + <item><c>Extra</c> is the term that the Net if process + sent to the agent when the request was sent to the agent. + </item> + </list> + </item> + <item> + <p><c>{send_pdu, Vsn, Pdu, MsgData, To}</c></p> + <p>This message is sent from a master agent when a trap is + to be sent. + </p> + <list type="bulleted"> + <item><c>Vsn</c> is either <c>'version-1'</c>, + <c>'version-2'</c>, or <c>'version-3'</c>. + </item> + <item><c>Pdu</c> is an SNMP PDU record (as defined in + snmp_types.hrl) with the SNMP response. + </item> + <item><c>MsgData</c> is the message specific data used in + the SNMP message. This value is normally sent to + <c>snmpa_mpd:generate_message/4</c>. In SNMPv1 and + SNMPv2c, this message data is the community string. In + SNMPv3, it is the context information. + </item> + <item><c>To</c> is a list of the destination addresses and + their corresponding security parameters. This value is + normally sent to <c>snmpa_mpd:generate_message/4</c>. + </item> + </list> + </item> + <item> + <p><c>{send_pdu_req, Vsn, Pdu, MsgData, To, Pid}</c></p> + <p>This <marker id="message"></marker> + message is sent from a master + agent when a request is + to be sent. The only request an agent can send is + Inform-Request. The net if process needs to remember the + request id and the Pid, and when a response is received for + the request id, send it to Pid, using a + <c>snmp_response_received</c> message. + </p> + <list type="bulleted"> + <item><c>Vsn</c> is either <c>'version-1'</c>, + <c>'version-2'</c>, or <c>'version-3'</c>. + </item> + <item><c>Pdu</c> is an SNMP PDU record (as defined in + snmp_types.hrl) with the SNMP response. + </item> + <item><c>MsgData</c> is the message specific data used in + the SNMP message. This value is normally sent to + <c>snmpa_mpd:generate_message/4</c>. In SNMPv1 and + SNMPv2c, this message data is the community string. In + SNMPv3, it is the context information. + </item> + <item><c>To</c> is a list of the destination addresses and + their corresponding security parameters. This value is + normally sent to <c>snmpa_mpd:generate_message/4</c>. + </item> + <item><c>Pid</c> is a process identifier. + </item> + </list> + </item> + </list> + </section> + + <section> + <title>Notes</title> + <p>Since the Net if process is responsible for encoding and + decoding of SNMP messages, it must also update the relevant + counters in the SNMP group in MIB-II. It can use the functions + in the module <c>snmpa_mpd</c> for this purpose (refer to the + Reference Manual, section <c>snmp</c>, + module <seealso marker="snmp_pdus">snmpa_mpd</seealso> + for more details.) + </p> + <p>There are also some useful functions for encoding and + decoding of SNMP messages in the module + <seealso marker="snmp_pdus">snmp_pdus</seealso>. + </p> + </section> + </section> +</chapter> + diff --git a/lib/snmp/doc/src/snmp_agent_netif_1.gif b/lib/snmp/doc/src/snmp_agent_netif_1.gif Binary files differnew file mode 100644 index 0000000000..8687ae56fb --- /dev/null +++ b/lib/snmp/doc/src/snmp_agent_netif_1.gif diff --git a/lib/snmp/doc/src/snmp_agent_netif_1.ps b/lib/snmp/doc/src/snmp_agent_netif_1.ps new file mode 100644 index 0000000000..40a6376591 --- /dev/null +++ b/lib/snmp/doc/src/snmp_agent_netif_1.ps @@ -0,0 +1,2909 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Adobe Illustrator(r) 6.0 +%%For: (Anna Fedoriw) (Ericsson Telecom) +%%Title: (PurposeofNetif.eps) +%%CreationDate: (97-05-23) (14.06) +%%BoundingBox: 89 539 446 708 +%%HiResBoundingBox: 89.6046 539.5735 445.5998 707.3677 +%%DocumentProcessColors: Black +%%DocumentFonts: Univers +%%DocumentSuppliedResources: procset Adobe_level2_AI5 1.0 0 +%%+ procset Adobe_typography_AI5 1.0 0 +%%+ procset Adobe_Illustrator_AI6_vars Adobe_Illustrator_AI6 +%%+ procset Adobe_Illustrator_AI5 1.0 0 +%AI5_FileFormat 2.0 +%AI3_ColorUsage: Black&White +%%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) +%%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 -1 -1 +%%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () +%AI3_TemplateBox: 306 396 306 396 +%AI3_TileBox: 21 -12 588 802 +%AI3_DocumentPreview: Macintosh_ColorPic +%AI5_ArtSize: 595.2756 841.8898 +%AI5_RulerUnits: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 1 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI5_OpenToView: 2 796 1.5 1146 827 58 1 1 3 40 +%AI5_OpenViewLayers: 7 +%%EndComments +%%BeginProlog +%%BeginResource: procset Adobe_level2_AI5 1.2 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) +%%Version: 1.2 +%%CreationDate: (04/10/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +userdict /Adobe_level2_AI5 23 dict dup begin + put + /packedarray where not + { + userdict begin + /packedarray + { + array astore readonly + } bind def + /setpacking /pop load def + /currentpacking false def + end + 0 + } if + pop + userdict /defaultpacking currentpacking put true setpacking + /initialize + { + Adobe_level2_AI5 begin + } bind def + /terminate + { + currentdict Adobe_level2_AI5 eq + { + end + } if + } bind def + mark + /setcustomcolor where not + { + /findcmykcustomcolor + { + 5 packedarray + } bind def + /setcustomcolor + { + exch aload pop pop + 4 + { + 4 index mul 4 1 roll + } repeat + 5 -1 roll pop + setcmykcolor + } + def + } if + + /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def + userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put + userdict /level2? + systemdict /languagelevel known dup + { + pop systemdict /languagelevel get 2 ge + } if + put +/level2ScreenFreq +{ + begin + 60 + HalftoneType 1 eq + { + pop Frequency + } if + HalftoneType 2 eq + { + pop GrayFrequency + } if + HalftoneType 5 eq + { + pop Default level2ScreenFreq + } if + end +} bind def +userdict /currentScreenFreq + level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put +level2? not + { + /setcmykcolor where not + { + /setcmykcolor + { + exch .11 mul add exch .59 mul add exch .3 mul add + 1 exch sub setgray + } def + } if + /currentcmykcolor where not + { + /currentcmykcolor + { + 0 0 0 1 currentgray sub + } def + } if + /setoverprint where not + { + /setoverprint /pop load def + } if + /selectfont where not + { + /selectfont + { + exch findfont exch + dup type /arraytype eq + { + makefont + } + { + scalefont + } ifelse + setfont + } bind def + } if + /cshow where not + { + /cshow + { + [ + 0 0 5 -1 roll aload pop + ] cvx bind forall + } bind def + } if + } if + cleartomark + /anyColor? + { + add add add 0 ne + } bind def + /testColor + { + gsave + setcmykcolor currentcmykcolor + grestore + } bind def + /testCMYKColorThrough + { + testColor anyColor? + } bind def + userdict /composite? + level2? + { + gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore + add add add 4 eq + } + { + 1 0 0 0 testCMYKColorThrough + 0 1 0 0 testCMYKColorThrough + 0 0 1 0 testCMYKColorThrough + 0 0 0 1 testCMYKColorThrough + and and and + } ifelse + put + composite? not + { + userdict begin + gsave + /cyan? 1 0 0 0 testCMYKColorThrough def + /magenta? 0 1 0 0 testCMYKColorThrough def + /yellow? 0 0 1 0 testCMYKColorThrough def + /black? 0 0 0 1 testCMYKColorThrough def + grestore + /isCMYKSep? cyan? magenta? yellow? black? or or or def + /customColor? isCMYKSep? not def + end + } if + end defaultpacking setpacking +%%EndResource +%%BeginResource: procset Adobe_typography_AI5 1.0 1 +%%Title: (Typography Operators) +%%Version: 1.0 +%%CreationDate:(03/26/93) () +%%Copyright: ((C) 1987-1993 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_typography_AI5 54 dict dup begin +put +/initialize +{ + begin + begin + Adobe_typography_AI5 begin + Adobe_typography_AI5 + { + dup xcheck + { + bind + } if + pop pop + } forall + end + end + end + Adobe_typography_AI5 begin +} def +/terminate +{ + currentdict Adobe_typography_AI5 eq + { + end + } if +} def +/modifyEncoding +{ + /_tempEncode exch ddef + /_pntr 0 ddef + { + counttomark -1 roll + dup type dup /marktype eq + { + pop pop exit + } + { + /nametype eq + { + _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll + put + } + { + /_pntr exch ddef + } ifelse + } ifelse + } loop + _tempEncode +} def +/TE +{ + StandardEncoding 256 array copy modifyEncoding + /_nativeEncoding exch def +} def +% +/TZ +{ + dup type /arraytype eq + { + /_wv exch def + } + { + /_wv 0 def + } ifelse + /_useNativeEncoding exch def + pop pop + findfont _wv type /arraytype eq + { + _wv makeblendedfont + } if + dup length 2 add dict + begin + mark exch + { + 1 index /FID ne + { + def + } if + cleartomark mark + } forall + pop + /FontName exch def + counttomark 0 eq + { + 1 _useNativeEncoding eq + { + /Encoding _nativeEncoding def + } if + cleartomark + } + { + /Encoding load 256 array copy + modifyEncoding /Encoding exch def + } ifelse + FontName currentdict + end + definefont pop +} def +/tr +{ + _ax _ay 3 2 roll +} def +/trj +{ + _cx _cy _sp _ax _ay 6 5 roll +} def +/a0 +{ + /Tx + { + dup + currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + } ddef + /Tj + { + dup + currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + } ddef +} def +/a1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + tr _psf + newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + dup currentpoint 3 2 roll + trj _pjsf + newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/e0 +{ + /Tx + { + tr _psf + } ddef + /Tj + { + trj _pjsf + } ddef +} def +/e1 +{ + /Tx + { + dup currentpoint 4 2 roll gsave + tr _psf + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll gsave + trj _pjsf + grestore 3 1 roll moveto tr jsp + } ddef +} def +/i0 +{ + /Tx + { + tr sp + } ddef + /Tj + { + trj jsp + } ddef +} def +/i1 +{ + W N +} def +/o0 +{ + /Tx + { + tr sw rmoveto + } ddef + /Tj + { + trj swj rmoveto + } ddef +} def +/r0 +{ + /Tx + { + tr _ctm _pss + } ddef + /Tj + { + trj _ctm _pjss + } ddef +} def +/r1 +{ + /Tx + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + tr _ctm _pss + grestore 3 1 roll moveto tr sp + } ddef + /Tj + { + dup currentpoint 4 2 roll currentpoint gsave newpath moveto + trj _ctm _pjss + grestore 3 1 roll moveto tr jsp + } ddef +} def +/To +{ + pop _ctm currentmatrix pop +} def +/TO +{ + iTe _ctm setmatrix newpath +} def +/Tp +{ + pop _tm astore pop _ctm setmatrix + _tDict begin + /W + { + } def + /h + { + } def +} def +/TP +{ + end + iTm 0 0 moveto +} def +/Tr +{ + _render 3 le + { + currentpoint newpath moveto + } if + dup 8 eq + { + pop 0 + } + { + dup 9 eq + { + pop 1 + } if + } ifelse + dup /_render exch ddef + _renderStart exch get load exec +} def +/iTm +{ + _ctm setmatrix _tm concat 0 _rise translate _hs 1 scale +} def +/Tm +{ + _tm astore pop iTm 0 0 moveto +} def +/Td +{ + _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto +} def +/iTe +{ + _render -1 eq + { + } + { + _renderEnd _render get dup null ne + { + load exec + } + { + pop + } ifelse + } ifelse + /_render -1 ddef +} def +/Ta +{ + pop +} def +/Tf +{ + dup 1000 div /_fScl exch ddef +% + selectfont +} def +/Tl +{ + pop + 0 exch _leading astore pop +} def +/Tt +{ + pop +} def +/TW +{ + 3 npop +} def +/Tw +{ + /_cx exch ddef +} def +/TC +{ + 3 npop +} def +/Tc +{ + /_ax exch ddef +} def +/Ts +{ + /_rise exch ddef + currentpoint + iTm + moveto +} def +/Ti +{ + 3 npop +} def +/Tz +{ + 100 div /_hs exch ddef + iTm +} def +/TA +{ + pop +} def +/Tq +{ + pop +} def +/Th +{ + pop pop pop pop pop +} def +/TX +{ + pop +} def +/Tk +{ + exch pop _fScl mul neg 0 rmoveto +} def +/TK +{ + 2 npop +} def +/T* +{ + _leading aload pop neg Td +} def +/T*- +{ + _leading aload pop Td +} def +/T- +{ + _ax neg 0 rmoveto + _hyphen Tx +} def +/T+ +{ +} def +/TR +{ + _ctm currentmatrix pop + _tm astore pop + iTm 0 0 moveto +} def +/TS +{ + currentfont 3 1 roll + /_Symbol_ _fScl 1000 mul selectfont + + 0 eq + { + Tx + } + { + Tj + } ifelse + setfont +} def +/Xb +{ + pop pop +} def +/Tb /Xb load def +/Xe +{ + pop pop pop pop +} def +/Te /Xe load def +/XB +{ +} def +/TB /XB load def +currentdict readonly pop +end +setpacking +%%EndResource +%%BeginProcSet: Adobe_ColorImage_AI6 1.0 0 +userdict /Adobe_ColorImage_AI6 known not +{ + userdict /Adobe_ColorImage_AI6 17 dict put +} if +userdict /Adobe_ColorImage_AI6 get begin + + /initialize + { + Adobe_ColorImage_AI6 begin + Adobe_ColorImage_AI6 + { + dup type /arraytype eq + { + dup xcheck + { + bind + } if + } if + pop pop + } forall + } def + /terminate { end } def + + currentdict /Adobe_ColorImage_AI6_Vars known not + { + /Adobe_ColorImage_AI6_Vars 14 dict def + } if + + Adobe_ColorImage_AI6_Vars begin + /channelcount 0 def + /sourcecount 0 def + /sourcearray 4 array def + /plateindex -1 def + /XIMask 0 def + /XIBinary 0 def + /XIChannelCount 0 def + /XIBitsPerPixel 0 def + /XIImageHeight 0 def + /XIImageWidth 0 def + /XIImageMatrix null def + /XIBuffer null def + /XIDataProc null def + end + + /WalkRGBString null def + /WalkCMYKString null def + + /StuffRGBIntoGrayString null def + /RGBToGrayImageProc null def + /StuffCMYKIntoGrayString null def + /CMYKToGrayImageProc null def + /ColorImageCompositeEmulator null def + + /SeparateCMYKImageProc null def + + /FourEqual null def + /TestPlateIndex null def + + currentdict /_colorimage known not + { + /colorimage where + { + /colorimage get /_colorimage exch def + } + { + /_colorimage null def + } ifelse + } if + + /_currenttransfer systemdict /currenttransfer get def + + /colorimage null def + /XI null def + + + /WalkRGBString + { + 0 3 index + + dup length 1 sub 0 3 3 -1 roll + { + 3 getinterval { } forall + + 5 index exec + + 3 index + } for + + 5 { pop } repeat + + } def + + + /WalkCMYKString + { + 0 3 index + + dup length 1 sub 0 4 3 -1 roll + { + 4 getinterval { } forall + + 6 index exec + + 3 index + + } for + + 5 { pop } repeat + + } def + + + /StuffRGBIntoGrayString + { + .11 mul exch + + .59 mul add exch + + .3 mul add + + cvi 3 copy put + + pop 1 add + } def + + + /RGBToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 3 idiv string + dup 3 1 roll + + /StuffRGBIntoGrayString load exch + WalkRGBString + end + } def + + + /StuffCMYKIntoGrayString + { + exch .11 mul add + + exch .59 mul add + + exch .3 mul add + + dup 255 gt { pop 255 } if + + 255 exch sub cvi 3 copy put + + pop 1 add + } def + + + /CMYKToGrayImageProc + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 get exec + dup length 4 idiv string + dup 3 1 roll + + /StuffCMYKIntoGrayString load exch + WalkCMYKString + end + } def + + + /ColorImageCompositeEmulator + { + pop true eq + { + Adobe_ColorImage_AI6_Vars /sourcecount get 5 add { pop } repeat + } + { + Adobe_ColorImage_AI6_Vars /channelcount get 1 ne + { + Adobe_ColorImage_AI6_Vars begin + sourcearray 0 3 -1 roll put + + channelcount 3 eq + { + /RGBToGrayImageProc + } + { + /CMYKToGrayImageProc + } ifelse + load + end + } if + image + } ifelse + } def + + + /SeparateCMYKImageProc + { + Adobe_ColorImage_AI6_Vars begin + + sourcecount 0 ne + { + sourcearray plateindex get exec + } + { + sourcearray 0 get exec + + dup length 4 idiv string + + 0 2 index + + plateindex 4 2 index length 1 sub + { + get 255 exch sub + + 3 copy put pop 1 add + + 2 index + } for + + pop pop exch pop + } ifelse + end + } def + + + /FourEqual + { + 4 index ne + { + pop pop pop false + } + { + 4 index ne + { + pop pop false + } + { + 4 index ne + { + pop false + } + { + 4 index eq + } ifelse + } ifelse + } ifelse + } def + + + /TestPlateIndex + { + Adobe_ColorImage_AI6_Vars begin + /plateindex -1 def + + /setcmykcolor where + { + pop + gsave + 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub + 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub + grestore + + 1 0 0 0 FourEqual + { + /plateindex 0 def + } + { + 0 1 0 0 FourEqual + { + /plateindex 1 def + } + { + 0 0 1 0 FourEqual + { + /plateindex 2 def + } + { + 0 0 0 1 FourEqual + { + /plateindex 3 def + } + { + 0 0 0 0 FourEqual + { + /plateindex 5 def + } if + } ifelse + } ifelse + } ifelse + } ifelse + pop pop pop pop + } if + plateindex + end + } def + + + /colorimage + { + Adobe_ColorImage_AI6_Vars begin + /channelcount 1 index def + /sourcecount 2 index 1 eq { channelcount 1 sub } { 0 } ifelse def + + 4 sourcecount add index dup + 8 eq exch 1 eq or not + end + + { + /_colorimage load null ne + { + _colorimage + } + { + Adobe_ColorImage_AI6_Vars /sourcecount get + 7 add { pop } repeat + } ifelse + } + { + dup 3 eq + TestPlateIndex + dup -1 eq exch 5 eq or or + { + /_colorimage load null eq + { + ColorImageCompositeEmulator + } + { + dup 1 eq + { + pop pop image + } + { + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + gsave + + 0 _currenttransfer exec + 1 _currenttransfer exec + eq + { 0 _currenttransfer exec 0.5 lt } + { 0 _currenttransfer exec 1 _currenttransfer exec gt } ifelse + + { { pop 0 } } { { pop 1 } } ifelse + systemdict /settransfer get exec + } if + + _colorimage + + Adobe_ColorImage_AI6_Vars /plateindex get 5 eq + { + grestore + } if + } ifelse + } ifelse + } + { + dup 1 eq + { + pop pop + image + } + { + pop pop + + Adobe_ColorImage_AI6_Vars begin + sourcecount -1 0 + { + exch sourcearray 3 1 roll put + } for + + /SeparateCMYKImageProc load + end + + systemdict /image get exec + } ifelse + } ifelse + } ifelse + } def + + /XI + { + Adobe_ColorImage_AI6_Vars begin + gsave + /XIMask exch 0 ne def + /XIBinary exch 0 ne def + pop + pop + /XIChannelCount exch def + /XIBitsPerPixel exch def + /XIImageHeight exch def + /XIImageWidth exch def + pop pop pop pop + /XIImageMatrix exch def + + XIBitsPerPixel 1 eq + { + XIImageWidth 8 div ceiling cvi + } + { + XIImageWidth XIChannelCount mul + } ifelse + /XIBuffer exch string def + + XIBinary + { + /XIDataProc { currentfile XIBuffer readstring pop } def + currentfile 128 string readline pop pop + } + { + /XIDataProc { currentfile XIBuffer readhexstring pop } def + } ifelse + + 0 0 moveto + XIImageMatrix concat + XIImageWidth XIImageHeight scale + + XIMask + { + XIImageWidth XIImageHeight + false + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + /_lp /null ddef + _fc + /_lp /imagemask ddef + + imagemask + } + { + XIImageWidth XIImageHeight + XIBitsPerPixel + [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] + /XIDataProc load + + XIChannelCount 1 eq + { + + gsave + 0 setgray + + image + + grestore + } + { + false + XIChannelCount + colorimage + } ifelse + } ifelse + grestore + end + } def + +end +%%EndProcSet +%%BeginResource: procset Adobe_Illustrator_AI5 1.1 0 +%%Title: (Adobe Illustrator (R) Version 5.0 Full Prolog) +%%Version: 1.1 +%%CreationDate: (3/7/1994) () +%%Copyright: ((C) 1987-1994 Adobe Systems Incorporated All Rights Reserved) +currentpacking true setpacking +userdict /Adobe_Illustrator_AI5_vars 81 dict dup begin +put +/_eo false def +/_lp /none def +/_pf +{ +} def +/_ps +{ +} def +/_psf +{ +} def +/_pss +{ +} def +/_pjsf +{ +} def +/_pjss +{ +} def +/_pola 0 def +/_doClip 0 def +/cf currentflat def +/_tm matrix def +/_renderStart +[ +/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 +] def +/_renderEnd +[ +null null null null /i1 /i1 /i1 /i1 +] def +/_render -1 def +/_rise 0 def +/_ax 0 def +/_ay 0 def +/_cx 0 def +/_cy 0 def +/_leading +[ +0 0 +] def +/_ctm matrix def +/_mtx matrix def +/_sp 16#020 def +/_hyphen (-) def +/_fScl 0 def +/_cnt 0 def +/_hs 1 def +/_nativeEncoding 0 def +/_useNativeEncoding 0 def +/_tempEncode 0 def +/_pntr 0 def +/_tDict 2 dict def +/_wv 0 def +/Tx +{ +} def +/Tj +{ +} def +/CRender +{ +} def +/_AI3_savepage +{ +} def +/_gf null def +/_cf 4 array def +/_if null def +/_of false def +/_fc +{ +} def +/_gs null def +/_cs 4 array def +/_is null def +/_os false def +/_sc +{ +} def +/_pd 1 dict def +/_ed 15 dict def +/_pm matrix def +/_fm null def +/_fd null def +/_fdd null def +/_sm null def +/_sd null def +/_sdd null def +/_i null def +/discardSave null def +/buffer 256 string def +/beginString null def +/endString null def +/endStringLength null def +/layerCnt 1 def +/layerCount 1 def +/perCent (%) 0 get def +/perCentSeen? false def +/newBuff null def +/newBuffButFirst null def +/newBuffLast null def +/clipForward? false def +end +userdict /Adobe_Illustrator_AI5 known not { + userdict /Adobe_Illustrator_AI5 91 dict put +} if +userdict /Adobe_Illustrator_AI5 get begin +/initialize +{ + Adobe_Illustrator_AI5 dup begin + Adobe_Illustrator_AI5_vars begin + discardDict + { + bind pop pop + } forall + dup /nc get begin + { + dup xcheck 1 index type /operatortype ne and + { + bind + } if + pop pop + } forall + end + newpath +} def +/terminate +{ + end + end +} def +/_ +null def +/ddef +{ + Adobe_Illustrator_AI5_vars 3 1 roll put +} def +/xput +{ + dup load dup length exch maxlength eq + { + dup dup load dup + length 2 mul dict copy def + } if + load begin + def + end +} def +/npop +{ + { + pop + } repeat +} def +/sw +{ + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add +} def +/swj +{ + dup 4 1 roll + dup length exch stringwidth + exch 5 -1 roll 3 index mul add + 4 1 roll 3 1 roll mul add + 6 2 roll /_cnt 0 ddef + { + 1 index eq + { + /_cnt _cnt 1 add ddef + } if + } forall + pop + exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop +} def +/ss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put pop + gsave + false charpath currentpoint + 4 index setmatrix + stroke + grestore + moveto + 2 copy rmoveto + } exch cshow + 3 npop +} def +/jss +{ + 4 1 roll + { + 2 npop + (0) exch 2 copy 0 exch put + gsave + _sp eq + { + exch 6 index 6 index 6 index 5 -1 roll widthshow + currentpoint + } + { + false charpath currentpoint + 4 index setmatrix stroke + } ifelse + grestore + moveto + 2 copy rmoveto + } exch cshow + 6 npop +} def +/sp +{ + { + 2 npop (0) exch + 2 copy 0 exch put pop + false charpath + 2 copy rmoveto + } exch cshow + 2 npop +} def +/jsp +{ + { + 2 npop + (0) exch 2 copy 0 exch put + _sp eq + { + exch 5 index 5 index 5 index 5 -1 roll widthshow + } + { + false charpath + } ifelse + 2 copy rmoveto + } exch cshow + 5 npop +} def +/pl +{ + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform +} def +/setstrokeadjust where +{ + pop true setstrokeadjust + /c + { + curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll curveto + } def + /V + /v load def + /y + { + 2 copy curveto + } def + /Y + /y load def + /l + { + lineto + } def + /L + /l load def + /m + { + moveto + } def +} +{ + /c + { + pl curveto + } def + /C + /c load def + /v + { + currentpoint 6 2 roll pl curveto + } def + /V + /v load def + /y + { + pl 2 copy curveto + } def + /Y + /y load def + /l + { + pl lineto + } def + /L + /l load def + /m + { + pl moveto + } def +} ifelse +/d +{ + setdash +} def +/cf +{ +} def +/i +{ + dup 0 eq + { + pop cf + } if + setflat +} def +/j +{ + setlinejoin +} def +/J +{ + setlinecap +} def +/M +{ + setmiterlimit +} def +/w +{ + setlinewidth +} def +/XR +{ + 0 ne + /_eo exch ddef +} def +/H +{ +} def +/h +{ + closepath +} def +/N +{ + _pola 0 eq + { + _doClip 1 eq + { + _eo {eoclip} {clip} ifelse /_doClip 0 ddef + } if + newpath + } + { + /CRender + { + N + } ddef + } ifelse +} def +/n +{ + N +} def +/F +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc + /_doClip 0 ddef + } + { + _pf + } ifelse + } + { + /CRender + { + F + } ddef + } ifelse +} def +/f +{ + closepath + F +} def +/S +{ + _pola 0 eq + { + _doClip 1 eq + { + gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + _ps + } ifelse + } + { + /CRender + { + S + } ddef + } ifelse +} def +/s +{ + closepath + S +} def +/B +{ + _pola 0 eq + { + _doClip 1 eq + gsave F grestore + { + gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc + /_doClip 0 ddef + } + { + S + } ifelse + } + { + /CRender + { + B + } ddef + } ifelse +} def +/b +{ + closepath + B +} def +/W +{ + /_doClip 1 ddef +} def +/* +{ + count 0 ne + { + dup type /stringtype eq + { + pop + } if + } if + newpath +} def +/u +{ +} def +/U +{ +} def +/q +{ + _pola 0 eq + { + gsave + } if +} def +/Q +{ + _pola 0 eq + { + grestore + } if +} def +/*u +{ + _pola 1 add /_pola exch ddef +} def +/*U +{ + _pola 1 sub /_pola exch ddef + _pola 0 eq + { + CRender + } if +} def +/D +{ + pop +} def +/*w +{ +} def +/*W +{ +} def +/` +{ + /_i save ddef + clipForward? + { + nulldevice + } if + 6 1 roll 4 npop + concat pop + userdict begin + /showpage + { + } def + 0 setgray + 0 setlinecap + 1 setlinewidth + 0 setlinejoin + 10 setmiterlimit + [] 0 setdash + /setstrokeadjust where {pop false setstrokeadjust} if + newpath + 0 setgray + false setoverprint +} def +/~ +{ + end + _i restore +} def +/O +{ + 0 ne + /_of exch ddef + /_lp /none ddef +} def +/R +{ + 0 ne + /_os exch ddef + /_lp /none ddef +} def +/g +{ + /_gf exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _gf setgray + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/G +{ + /_gs exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _gs setgray + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/k +{ + _cf astore pop + /_fc + { + _lp /fill ne + { + _of setoverprint + _cf aload pop setcmykcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/K +{ + _cs astore pop + /_sc + { + _lp /stroke ne + { + _os setoverprint + _cs aload pop setcmykcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/x +{ + /_gf exch ddef + findcmykcustomcolor + /_if exch ddef + /_fc + { + _lp /fill ne + { + _of setoverprint + _if _gf 1 exch sub setcustomcolor + /_lp /fill ddef + } if + } ddef + /_pf + { + _fc + _eo {eofill} {fill} ifelse + } ddef + /_psf + { + _fc + ashow + } ddef + /_pjsf + { + _fc + awidthshow + } ddef + /_lp /none ddef +} def +/X +{ + /_gs exch ddef + findcmykcustomcolor + /_is exch ddef + /_sc + { + _lp /stroke ne + { + _os setoverprint + _is _gs 1 exch sub setcustomcolor + /_lp /stroke ddef + } if + } ddef + /_ps + { + _sc + stroke + } ddef + /_pss + { + _sc + ss + } ddef + /_pjss + { + _sc + jss + } ddef + /_lp /none ddef +} def +/A +{ + pop +} def +/annotatepage +{ +userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse +} def +/XT { + pop pop +} def +/discard +{ + save /discardSave exch store + discardDict begin + /endString exch store + gt38? + { + 2 add + } if + load + stopped + pop + end + discardSave restore +} bind def +userdict /discardDict 7 dict dup begin +put +/pre38Initialize +{ + /endStringLength endString length store + /newBuff buffer 0 endStringLength getinterval store + /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store + /newBuffLast newBuff endStringLength 1 sub 1 getinterval store +} def +/shiftBuffer +{ + newBuff 0 newBuffButFirst putinterval + newBuffLast 0 + currentfile read not + { + stop + } if + put +} def +0 +{ + pre38Initialize + mark + currentfile newBuff readstring exch pop + { + { + newBuff endString eq + { + cleartomark stop + } if + shiftBuffer + } loop + } + { + stop + } ifelse +} def +1 +{ + pre38Initialize + /beginString exch store + mark + currentfile newBuff readstring exch pop + { + { + newBuff beginString eq + { + /layerCount dup load 1 add store + } + { + newBuff endString eq + { + /layerCount dup load 1 sub store + layerCount 0 eq + { + cleartomark stop + } if + } if + } ifelse + shiftBuffer + } loop + } if +} def +2 +{ + mark + { + currentfile buffer readline not + { + stop + } if + endString eq + { + cleartomark stop + } if + } loop +} def +3 +{ + /beginString exch store + /layerCnt 1 store + mark + { + currentfile buffer readline not + { + stop + } if + dup beginString eq + { + pop /layerCnt dup load 1 add store + } + { + endString eq + { + layerCnt 1 eq + { + cleartomark stop + } + { + /layerCnt dup load 1 sub store + } ifelse + } if + } ifelse + } loop +} def +end +userdict /clipRenderOff 15 dict dup begin +put +{ + /n /N /s /S /f /F /b /B +} +{ + { + _doClip 1 eq + { + /_doClip 0 ddef _eo {eoclip} {clip} ifelse + } if + newpath + } def +} forall +/Tr /pop load def +/Bb {} def +/BB /pop load def +/Bg {12 npop} def +/Bm {6 npop} def +/Bc /Bm load def +/Bh {4 npop} def +end +/Lb +{ + 4 npop + 6 1 roll + pop + 4 1 roll + pop pop pop + 0 eq + { + 0 eq + { + (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard + } + { + + /clipForward? true def + + /Tx /pop load def + /Tj /pop load def + + currentdict end clipRenderOff begin begin + } ifelse + } + { + 0 eq + { + save /discardSave exch store + } if + } ifelse +} bind def +/LB +{ + discardSave dup null ne + { + restore + } + { + pop + clipForward? + { + currentdict + end + end + begin + + /clipForward? false ddef + } if + } ifelse +} bind def +/Pb +{ + pop pop + 0 (%AI5_EndPalette) discard +} bind def +/Np +{ + 0 (%AI5_End_NonPrinting--) discard +} bind def +/Ln /pop load def +/Ap +/pop load def +/Ar +{ + 72 exch div + 0 dtransform dup mul exch dup mul add sqrt + dup 1 lt + { + pop 1 + } if + setflat +} def +/Mb +{ + q +} def +/Md +{ +} def +/MB +{ + Q +} def +/nc 3 dict def +nc begin +/setgray +{ + pop +} bind def +/setcmykcolor +{ + 4 npop +} bind def +/setcustomcolor +{ + 2 npop +} bind def +currentdict readonly pop +end +end +setpacking +%%EndResource +%%EndProlog +%%BeginSetup +%%IncludeFont: Univers +Adobe_level2_AI5 /initialize get exec +Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_typography_AI5 /initialize get exec +Adobe_ColorImage_AI6 /initialize get exec +Adobe_Illustrator_AI5 /initialize get exec +[ +39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis +/Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute +/egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde +/oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex +/udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls +/registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash +/.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef +/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash +/questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef +/guillemotleft/guillemotright/ellipsis/.notdef/Agrave/Atilde/Otilde/OE/oe +/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide +/.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright +/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand +/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex +/Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex +/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla +/hungarumlaut/ogonek/caron +TE +%AI3_BeginEncoding: _Univers Univers +[/_Univers/Univers 0 0 1 TZ +%AI3_EndEncoding AdobeType +%AI5_Begin_NonPrinting +Np +8 Bn +%AI5_BeginGradient: (Black & White) +(Black & White) 0 2 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Green & Blue) +(Green & Blue) 0 2 Bd +[ +< +99999A9A9B9B9B9C9C9D9D9D9E9E9F9F9FA0A0A1A1A1A2A2A3A3A3A4A4A5A5A5A6A6A7A7A7A8A8A9 +A9A9AAAAABABABACACADADADAEAEAFAFAFB0B0B1B1B1B2B2B3B3B3B4B4B5B5B5B6B6B7B7B7B8B8B9 +B9B9BABABBBBBBBCBCBDBDBDBEBEBFBFBFC0C0C1C1C1C2C2C3C3C3C4C4C5C5C5C6C6C7C7C7C8C8C9 +C9C9CACACBCBCBCCCCCDCDCDCECECFCFCFD0D0D1D1D1D2D2D3D3D3D4D4D5D5D5D6D6D7D7D7D8D8D9 +D9D9DADADBDBDBDCDCDDDDDDDEDEDFDFDFE0E0E1E1E1E2E2E3E3E3E4E4E5E5E5E6E6E7E7E7E8E8E9 +E9E9EAEAEBEBEBECECEDEDEDEEEEEFEFEFF0F0F1F1F1F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F9 +F9F9FAFAFBFBFBFCFCFDFDFDFEFEFFFF +> +< +000102020304050506070808090A0B0B0C0D0E0E0F101111121314141516171718191A1A1B1C1D1D +1E1F20202122232324252626272829292A2B2C2C2D2E2F2F303132323334353536373838393A3B3B +3C3D3E3E3F404141424344444546474748494A4A4B4C4D4D4E4F5050515253535455565657585959 +5A5B5C5C5D5E5F5F606162626364656566676868696A6B6B6C6D6E6E6F7071717273747475767777 +78797A7A7B7C7D7D7E7F80808182828384858586878888898A8B8B8C8D8E8E8F9091919293949495 +96979798999A9A9B9C9D9D9E9FA0A0A1A2A3A3A4A5A6A6A7A8A9A9AAABACACADAEAFAFB0B1B2B2B3 +B4B5B5B6B7B8B8B9BABBBBBCBDBEBEBF +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +[ +1 0.75 0 0 1 50 100 %_Bs +0.6 0 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Pink, Yellow, Green) +(Pink, Yellow, Green) 0 3 Bd +[ +< +00000000000000000000000000000000000000010101010101010101010101010101010101010101 +01010101010202020202020202020202020202020202020202020203030303030303030303030303 +03030303030303030404040404040404040404040404040404040404050505050505050505050505 +05050505050505060606060606060606060606060606060606060707070707070707070707070707 +07070707080808080808080808080808080808080809090909090909090909090909090909090A0A +0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C +0C0C0C0C0C0C0C0D0D0D0D0D +> +< +050506060606070708080809090A0A0A0B0B0C0C0D0D0E0E0F0F1010111112121313141415151617 +17181819191A1A1B1C1C1D1D1E1F1F202021222223232425252626272828292A2A2B2C2C2D2D2E2F +2F3031313233333435353637373839393A3B3B3C3D3E3E3F4040414242434445454647474849494A +4B4C4C4D4E4F4F505151525354545556575758595A5A5B5C5C5D5E5F5F6061626363646566666768 +69696A6B6C6C6D6E6F707071727373747576777778797A7B7B7C7D7E7F7F80818283838485868787 +88898A8B8B8C8D8E8F8F9091929394949596979898999A9B9C9D9D9E9FA0A1A2A2A3A4A5A6A7A7A8 +A9AAABACADADAEAFB0B1B2B2 +> +< +CCCCCBCBCBCACACAC9C9C8C8C7C7C6C6C5C5C4C4C3C2C2C1C1C0C0BFBEBEBDBDBCBBBBBAB9B9B8B7 +B7B6B6B5B4B4B3B2B1B1B0AFAFAEADADACABAAAAA9A8A8A7A6A5A5A4A3A2A2A1A0A09F9E9D9C9C9B +9A999998979696959493929291908F8E8E8D8C8B8A8A8988878686858483828181807F7E7D7C7C7B +7A7978777776757473727171706F6E6D6C6B6A6A69686766656463636261605F5E5D5C5B5B5A5958 +5756555453525151504F4E4D4C4B4A49484746464544434241403F3E3D3C3B3A3938383736353433 +3231302F2E2D2C2B2A29282726252423222221201F1E1D1C1B1A191817161514131211100F0E0D0C +0B0A09080706050403020100 +> +0 +1 %_Br +< +737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5B5A59585756555453525150504F4E +4D4C4B4A4949484746454443434241403F3E3E3D3C3B3A3A393837363635343333323130302F2E2D +2D2C2B2A2A29282827262525242323222121201F1F1E1D1D1C1C1B1A1A1918181717161615141413 +1312121111100F0F0E0E0D0D0C0C0C0B0B0A0A090908080807070606060505050404040303030202 +020201010101010000000000 +> +< +00000000000000000000000001010101010101010101010101010101010101010101010102020202 +02020202020202020202020202020202020202020202030303030303030303030303030303030303 +03030303030303030303030303040404040404040404040404040404040404040404040404040404 +04040404040404040404050505050505050505050505050505050505050505050505050505050505 +050505050505050505050505 +> +< +BFBFBFC0C0C0C0C0C0C0C0C0C1C1C1C1C1C1C1C1C1C2C2C2C2C2C2C2C2C2C2C3C3C3C3C3C3C3C3C3 +C3C4C4C4C4C4C4C4C4C4C4C5C5C5C5C5C5C5C5C5C5C5C6C6C6C6C6C6C6C6C6C6C6C6C7C7C7C7C7C7 +C7C7C7C7C7C7C8C8C8C8C8C8C8C8C8C8C8C8C8C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9CACACACACACA +CACACACACACACACACACACBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCCCCCCCCCCCCCCCC +CCCCCCCCCCCCCCCCCCCCCCCC +> +0 +1 %_Br +[ +0.05 0.7 0 0 1 50 100 %_Bs +0 0.02 0.8 0 1 57 36 %_Bs +0.45 0 0.75 0 1 37 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Purple, Red & Yellow) +(Purple, Red & Yellow) 0 3 Bd +[ +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A +> +< +CCCCCCCDCDCDCDCDCECECECECECFCFCFCFD0D0D0D0D0D1D1D1D1D1D2D2D2D2D2D3D3D3D3D3D4D4D4 +D4D5D5D5D5D5D6D6D6D6D6D7D7D7D7D7D8D8D8D8D8D9D9D9D9DADADADADADBDBDBDBDBDCDCDCDCDC +DDDDDDDDDDDEDEDEDEDFDFDFDFDFE0E0E0E0E0E1E1E1E1E1E2E2E2E2E2E3E3E3E3E4E4E4E4E4E5E5 +E5E5E5E6E6E6E6E6E7E7E7E7E7E8E8E8E8E9E9E9E9E9EAEAEAEAEAEBEBEBEBEBECECECECECEDEDED +EDEEEEEEEEEEEFEFEFEFEFF0F0F0F0F0F1F1F1F1F1F2F2F2F2F3F3F3F3F3F4F4F4F4F4F5F5F5F5F5 +F6F6F6F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFAFAFBFBFBFBFBFCFCFCFCFDFDFDFDFDFEFE +FEFEFEFFFFFF +> +0 +1 %_Br +< +E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBE +BDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A99989796 +9594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B7A797877767574737271706F6E +6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A49484746 +4544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E +1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403020100 +> +< +E5E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9EAEAEAEA +EAEAEAEAEAEBEBEBEBEBEBEBEBEBECECECECECECECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEE +EEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F3F3F3 +F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 +F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFCFC +FCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFF +> +< +00010203040405060708090A0B0C0C0D0E0F10111213141415161718191A1B1C1D1D1E1F20212223 +242525262728292A2B2C2D2D2E2F30313233343535363738393A3B3C3D3D3E3F4041424344454546 +4748494A4B4C4D4E4E4F50515253545556565758595A5B5C5D5E5E5F60616263646566666768696A +6B6C6D6E6E6F70717273747576767778797A7B7C7D7E7F7F80818283848586878788898A8B8C8D8E +8F8F90919293949596979798999A9B9C9D9E9F9FA0A1A2A3A4A5A6A7A7A8A9AAABACADAEAFAFB0B1 +B2B3B4B5B6B7B8B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C8C9CACBCC +> +0 +1 %_Br +[ +0 0.04 1 0 1 50 100 %_Bs +0 1 0.8 0 1 50 50 %_Bs +0.9 0.9 0 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Rainbow) +(Rainbow) 0 6 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +0 +1 %_Br +1 +< +0708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E +2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556 +5758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E +7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6 +A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCE +CFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6 +F7F8F9FAFBFCFDFEFF +> +0 +0 +1 %_Br +1 +< +00000000000000000000000000000000000001010101010101010101010101010101010101010101 +01010101010101010101010101010202020202020202020202020202020202020202020202020202 +02020202020202020202030303030303030303030303030303030303030303030303030303030303 +03030303030304040404040404040404040404040404040404040404040404040404040404040404 +04040505050505050505050505050505050505050505050505050505050505050505050505050606 +06060606060606060606060606060606060606060606060606060606060606060606070707070707 +07070707070707070707070707070707 +> +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 +1 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 +1 +0 +1 %_Br +0 +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +1 +0 +1 %_Br +[ +0 1 0 0 1 50 100 %_Bs +1 1 0 0 1 50 80 %_Bs +1 0.0279 0 0 1 50 60 %_Bs +1 0 1 0 1 50 40 %_Bs +0 0 1 0 1 50 20 %_Bs +0 1 1 0 1 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Steel Bar) +(Steel Bar) 0 3 Bd +[ +< +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 +D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 +AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 +87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 +5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 +37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 +0F0E0D0C0B0A09080706050403020100 +> +0 %_Br +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +0 %_Br +[ +0 0 50 100 %_Bs +1 0 50 70 %_Bs +0 0 50 0 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Orange Radial) +(Yellow & Orange Radial) 1 2 Bd +[ +0 +< +0001010203040506060708090A0B0C0C0D0E0F10111213131415161718191A1B1C1D1D1E1F202122 +232425262728292A2B2B2C2D2E2F303132333435363738393A3B3C3D3E3E3F404142434445464748 +494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60606162636465666768696A6B6C6D6E6F +707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C +> +< +FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9 +F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2 +F2F2F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEDEDEDEDEDEDECECECECECEBEBEBEBEB +EBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E8E8E8E7E7E7E7E7E6E6E6E6E6E5 +> +0 +1 %_Br +[ +0 0 1 0 1 52 19 %_Bs +0 0.55 0.9 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_BeginGradient: (Yellow & Purple Radial) +(Yellow & Purple Radial) 1 2 Bd +[ +< +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 +28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F +505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 +78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 +C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF +F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +> +< +1415161718191A1B1C1D1E1F1F202122232425262728292A2A2B2C2D2E2F30313233343536363738 +393A3B3C3D3E3F40414142434445464748494A4B4C4D4D4E4F50515253545556575858595A5B5C5D +5E5F60616263646465666768696A6B6C6D6E6F6F707172737475767778797A7B7B7C7D7E7F808182 +83848586868788898A8B8C8D8E8F90919292939495969798999A9B9C9D9D9E9FA0A1A2A3A4A5A6A7 +A8A9A9AAABACADAEAFB0B1B2B3B4B4B5B6B7B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C9CACBCB +CCCDCECFD0D1D2D3D4D5D6D7D7D8D9DADBDCDDDEDFE0E1E2E2E3E4E5E6E7E8E9EAEBECEDEEEEEFF0 +F1F2F3F4F5F6F7F8F9F9FAFBFCFDFEFF +> +< +ABAAAAA9A8A7A7A6A5A5A4A3A3A2A1A1A09F9F9E9D9D9C9B9B9A9999989797969595949393929191 +908F8F8E8D8D8C8B8B8A8989888787868585848383828181807F7F7E7D7D7C7B7B7A797978777776 +7575747373727171706F6F6E6D6D6C6B6B6A6969686767666565646362626160605F5E5E5D5C5C5B +5A5A5958585756565554545352525150504F4E4E4D4C4C4B4A4A4948484746464544444342424140 +403F3E3E3D3C3C3B3A3A3938383736363534343332323130302F2E2E2D2C2C2B2A2A292828272626 +25242423222121201F1F1E1D1D1C1B1B1A1919181717161515141313121111100F0F0E0D0D0C0B0B +0A090908070706050504030302010100 +> +0 +1 %_Br +[ +0 0.08 0.67 0 1 50 14 %_Bs +1 1 0 0 1 50 100 %_Bs +BD +%AI5_EndGradient +%AI5_End_NonPrinting-- +%AI5_BeginPalette +0 2 Pb +Pn +Pc +1 g +Pc +0 g +Pc +0 0 0 0 k +Pc +0.75 g +Pc +0.5 g +Pc +0.25 g +Pc +0 g +Pc +Bb +2 (Black & White) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0 0 0 k +Pc +0.5 0 0 0 k +Pc +0.75 0 0 0 k +Pc +1 0 0 0 k +Pc +0.25 0.25 0 0 k +Pc +0.5 0.5 0 0 k +Pc +0.75 0.75 0 0 k +Pc +1 1 0 0 k +Pc +Bb +2 (Pink, Yellow, Green) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0 0 k +Pc +0 0.5 0 0 k +Pc +0 0.75 0 0 k +Pc +0 1 0 0 k +Pc +0 0.25 0.25 0 k +Pc +0 0.5 0.5 0 k +Pc +0 0.75 0.75 0 k +Pc +0 1 1 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Purple Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0 0.25 0 k +Pc +0 0 0.5 0 k +Pc +0 0 0.75 0 k +Pc +0 0 1 0 k +Pc +0.25 0 0.25 0 k +Pc +0.5 0 0.5 0 k +Pc +0.75 0 0.75 0 k +Pc +1 0 1 0 k +Pc +Bb +2 (Rainbow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0 0 k +Pc +0.5 0.25 0 0 k +Pc +0.75 0.375 0 0 k +Pc +1 0.5 0 0 k +Pc +0.125 0.25 0 0 k +Pc +0.25 0.5 0 0 k +Pc +0.375 0.75 0 0 k +Pc +0.5 1 0 0 k +Pc +Bb +2 (Steel Bar) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0 0.25 0.125 0 k +Pc +0 0.5 0.25 0 k +Pc +0 0.75 0.375 0 k +Pc +0 1 0.5 0 k +Pc +0 0.125 0.25 0 k +Pc +0 0.25 0.5 0 k +Pc +0 0.375 0.75 0 k +Pc +0 0.5 1 0 k +Pc +Bb +2 (Purple, Red & Yellow) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0 0.25 0 k +Pc +0.25 0 0.5 0 k +Pc +0.375 0 0.75 0 k +Pc +0.5 0 1 0 k +Pc +0.25 0 0.125 0 k +Pc +0.5 0 0.25 0 k +Pc +0.75 0 0.375 0 k +Pc +1 0 0.5 0 k +Pc +Bb +2 (Green & Blue) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.25 0.125 0.125 0 k +Pc +0.5 0.25 0.25 0 k +Pc +0.75 0.375 0.375 0 k +Pc +1 0.5 0.5 0 k +Pc +0.25 0.25 0.125 0 k +Pc +0.5 0.5 0.25 0 k +Pc +0.75 0.75 0.375 0 k +Pc +1 1 0.5 0 k +Pc +Bb +0 0 0 0 Bh +2 (Yellow & Orange Radial) -4014 4716 0 0 1 0 0 1 0 0 Bg +0 BB +Pc +0.125 0.25 0.125 0 k +Pc +0.25 0.5 0.25 0 k +Pc +0.375 0.75 0.375 0 k +Pc +0.5 1 0.5 0 k +Pc +0.125 0.25 0.25 0 k +Pc +0.25 0.5 0.5 0 k +Pc +0.375 0.75 0.75 0 k +Pc +0.5 1 1 0 k +Pc +0 0 0 0 k +Pc +0.125 0.125 0.25 0 k +Pc +0.25 0.25 0.5 0 k +Pc +0.375 0.375 0.75 0 k +Pc +0.5 0.5 1 0 k +Pc +0.25 0.125 0.25 0 k +Pc +0.5 0.25 0.5 0 k +Pc +0.75 0.375 0.75 0 k +Pc +1 0.5 1 0 k +Pc +PB +%AI5_EndPalette +%%EndSetup +%AI5_BeginLayer +1 1 1 1 0 0 0 79 128 255 Lb +(Layer 1) Ln +0 A +800 Ar +0 J 0 j 1 w 4 M []0 d +%AI3_Note: +0 D +0 XR +-4014 283.5 m +4626 283.5 L +(N) * +453.5 4716 m +453.5 -3924 L +(N) * +85 4716 m +85 -3924 L +(N) * +-4014 765.5 m +4626 765.5 L +(N) * +u +0 R +0.25 G +2 w +152.7439 649.8296 m +164.3439 653.4296 158.3439 667.0297 v +153.0847 678.9503 141.5439 672.6297 y +141.9635 683.3994 130.3438 683.8297 v +119.5438 684.2297 118.7438 672.6297 y +113.429 685.1021 100.7437 677.0297 v +91.9437 671.4297 96.3437 661.0297 y +85.9436 655.0296 93.1437 643.0296 v +98.1213 634.7336 107.5437 638.6296 y +105.5437 626.6295 118.7438 627.0295 v +131.9438 627.4295 130.3438 638.6296 y +138.0225 629.4983 148.3439 636.2296 v +157.5439 642.2296 152.7439 649.8296 y +s +0 To +1 0 0 1 125.3333 652 0 Tp +TP +-19.9951 0 Td +0 Tr +0 O +0 g +1 w +/_Univers 10 Tf +0 Ts +100 Tz +0 Tt +1 TA +%_ 0 XL +36 0 Xb +XB +0 0 5 TC +100 100 200 TW +0 0 0 Ti +1 Ta +0 0 2 2 3 Th +0 Tq +0 0 Tl +0 Tc +0 Tw +(Network) Tx +(\r) TX +TO +U +1 Ap +0 R +0 G +245 630.7402 m +256.7413 630.7402 266.2598 640.2587 266.2598 652 c +266.2598 663.7413 256.7413 673.2598 245 673.2598 c +233.2587 673.2598 223.7402 663.7413 223.7402 652 c +223.7402 640.2587 233.2587 630.7402 245 630.7402 c +s +u +409.6667 630.7402 m +429.2355 630.7402 445.0998 640.2587 445.0998 652 c +445.0998 663.7414 429.2355 673.2599 409.6667 673.2599 c +390.0978 673.2599 374.2335 663.7414 374.2335 652 c +374.2335 640.2587 390.0978 630.7402 409.6667 630.7402 c +s +0 To +1 0 0 1 409.6667 654.5662 0 Tp +TP +-16.3867 0 Td +0 Tr +0 O +0 g +(Master\r) Tx +2.2253 -12 Td +(Agent) Tx +(\r) TX +TO +U +0 To +1 0 0 1 415 698 0 Tp +TP +0 Tr +(\r) Tx +TO +u +0 R +0 G +341.6667 540.0735 m +361.2355 540.0735 377.0998 549.592 377.0998 561.3333 c +377.0998 573.0747 361.2355 582.5932 341.6667 582.5932 c +322.0978 582.5932 306.2335 573.0747 306.2335 561.3333 c +306.2335 549.592 322.0978 540.0735 341.6667 540.0735 c +s +0 To +1 0 0 1 341.6667 563.8995 0 Tp +TP +-29.1626 0 Td +0 Tr +0 O +0 g +(Proxy Agent\r) Tx +2.7771 -12 Td +(Subsystem) Tx +(\r) TX +TO +U +u +u +0 Ap +0 R +0 G +274.4641 652 m +366 652 l +S +0 O +0 g +368.362 653.0249 m +366.7087 653.5241 365.6341 653.9841 364.3076 654.5165 c +364.3076 649.4722 l +364.7824 649.6974 366.7087 650.4647 368.362 650.9636 c +370.1314 651.4983 371.7359 651.8639 372.7766 651.9944 c +371.7359 652.1249 370.1314 652.4904 368.362 653.0249 c +f +U +272.1021 650.9751 m +273.7554 650.4759 274.83 650.0159 276.1565 649.4835 c +276.1565 654.5278 l +275.6817 654.3026 273.7554 653.5353 272.1021 653.0364 c +270.3327 652.5017 268.7282 652.1361 267.6875 652.0056 c +268.7282 651.8751 270.3327 651.5096 272.1021 650.9751 c +f +U +u +0 R +0 G +265.2292 630.5208 m +314.2292 584.5208 l +S +0 O +0 g +316.6527 583.6514 m +315.789 585.147 315.3204 586.2179 314.7176 587.5139 c +311.2651 583.8362 l +311.7654 583.6754 313.695 582.9164 315.2419 582.1486 c +316.8979 581.3274 318.3179 580.4958 319.166 579.8786 c +318.4966 580.6861 317.5769 582.0507 316.6527 583.6514 c +f +262.8056 631.3902 m +263.6693 629.8947 264.1379 628.8238 264.7407 627.5278 c +268.1932 631.2055 l +267.6929 631.3663 265.7633 632.1252 264.2164 632.8931 c +262.5604 633.7143 261.1404 634.5459 260.2923 635.163 c +260.9617 634.3556 261.8814 632.9909 262.8056 631.3902 c +f +U +0 To +1 0 0 1 245 648.5662 0 Tp +TP +-12.7747 0 Td +0 Tr +(Net if) Tx +(\r) TX +TO +0 To +1 0 0 1 319.6667 656.6667 0 Tp +TP +-31.1438 0 Td +0 Tr +(Erlang T) Tx 1 104 Tk +(erms) Tx +(\r) TX +TO +0 To +1 0 0 1 294.3333 606.3333 0 Tp +TP +-73.335 0 Td +0 Tr +2 Ta +(Proxy agent\312\312\312\312\312\312\r) Tx +-33.8769 -12 Td +(specific representation) Tx +(\r) TX +TO +0 To +1 0 0 1 263.6667 601.3333 0 Tp +TP +0 Tr +(\r) Tx +TO +u +0 R +0 G +168 652 m +215.3333 652 l +B +217.6953 653.0249 m +216.042 653.5241 214.9674 653.9841 213.6409 654.5165 c +213.6409 649.4722 l +214.1157 649.6974 216.042 650.4647 217.6953 650.9636 c +219.4647 651.4983 221.0692 651.8639 222.1099 651.9944 c +221.0692 652.1249 219.4647 652.4904 217.6953 653.0249 c +f +165.638 650.9751 m +167.2913 650.4759 168.3659 650.0159 169.6924 649.4835 c +169.6924 654.5278 l +169.2176 654.3026 167.2913 653.5353 165.638 653.0364 c +163.8686 652.5017 162.2641 652.1361 161.2234 652.0056 c +162.2641 651.8751 163.8686 651.5096 165.638 650.9751 c +f +U +0 To +1 0 0 1 190.75 656.25 0 Tp +TP +-13.0579 0 Td +0 Tr +1 Ta +(Bytes) Tx +(\r) TX +TO +LB +%AI5_EndLayer-- +%%PageTrailer +gsave annotatepage grestore showpage +%%Trailer +Adobe_Illustrator_AI5 /terminate get exec +Adobe_ColorImage_AI6 /terminate get exec +Adobe_typography_AI5 /terminate get exec +Adobe_level2_AI5 /terminate get exec +%%EOF diff --git a/lib/snmp/doc/src/snmp_app.xml b/lib/snmp/doc/src/snmp_app.xml new file mode 100644 index 0000000000..460f0b8018 --- /dev/null +++ b/lib/snmp/doc/src/snmp_app.xml @@ -0,0 +1,708 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE appref SYSTEM "appref.dtd"> + +<appref> + <header> + <copyright> + <year>1997</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmp</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp.xml</file> + </header> + <app>snmp</app> + <appsummary>The SNMP Application</appsummary> + <description> + <p>This chapter describes the <c>snmp</c> + application in OTP. The SNMP application provides the following + services:</p> + <list type="bulleted"> + <item> + <p>a multilingual extensible SNMP agent</p> + </item> + <item> + <p>a SNMP manager</p> + </item> + <item> + <p>a MIB compiler</p> + </item> + </list> + + </description> + + <section> + <marker id="configuration_params"></marker> + <title>Configuration</title> + <p>The following configuration parameters are defined for the SNMP + application. Refer to application(3) for more information about + configuration parameters. + </p> + + <p>The snmp part of the config file specifying the configuration + parameters is basically the following tuple:</p> + <pre> + {snmp, snmp_components_config()} + </pre> + + <p>A minimal config file for starting a node with both a manager + and an agent:</p> + <pre> + [{snmp, + [{agent, [{db_dir, "/tmp/snmp/agent/db"}, + {config, [{dir, "/tmp/snmp/agent/conf"}]}]}, + {manager, [{config, [{dir, "/tmp/snmp/manager/conf"}, + {db_dir, "/tmp/snmp/manager/db"}]}]}]} + ] + } + ]. + </pre> + + <p>Each snmp component has it's own set of configuration parameters, + even though some of the types are common to both components. </p> + + <!-- Also in snmp_config.xml --> + + <pre> + snmp_components_config() -> [snmp_component_config()] + snmp_component_config() -> {agent, agent_options()} | {manager, manager_options()} + agent_options() = [agent_option()] + agent_option() = {restart_type, restart_type()} | + {agent_type, agent_type()} | + {agent_verbosity, verbosity()} | + {discovery, agent_discovery()} | + {versions, versions()} | + {priority, priority()} | + {multi_threaded, multi_threaded()} | + {db_dir, db_dir()} | + {db_init_error, db_init_error()} | + {local_db, local_db()} | + {net_if, agent_net_if()} | + {mibs, mibs()} | + {mib_storage, mib_storage()} | + {mib_server, mib_server()} | + {audit_trail_log, audit_trail_log()} | + {error_report_mod, error_report_mod()} | + {note_store, note_store()} | + {symbolic_store, symbolic_store()} | + {target_cache, target_cache()} | + {config, agent_config()} + manager_options() = [manager_option()] + manager_option() = {restart_type, restart_type()} | + {net_if, manager_net_if()} | + {server, server()} | + {note_store, note_store()} | + {config, manager_config()} | + {inform_request_behaviour, manager_irb()} | + {mibs, manager_mibs()} | + {priority, priority()} | + {audit_trail_log, audit_trail_log()} | + {versions, versions()} | + {def_user_mod, def_user_module() | + {def_user_data, def_user_data()} + </pre> + + <p>Agent specific config options and types:</p> + <taglist> + <tag><c><![CDATA[agent_type() = master | sub <optional>]]></c></tag> + <item> + <p>If <c>master</c>, one master agent is + started. Otherwise, no agents are started. </p> + <p>Default is <c>master</c>.</p> + </item> + + <tag><c><![CDATA[agent_discovery() = [agent_discovery_opt()] <optional>]]></c></tag> + <item> + <p><c>agent_discovery_opt() = + {terminating, agent_terminating_discovery_opts()} | + {originating, agent_originating_discovery_opts()}</c></p> + <p>The <c>terminating</c> options effects discovery initiated by + a manager. </p> + <p>The <c>originating</c> options effects discovery initiated + by this agent. </p> + <p>For defaults see the options in <c>agent_discovery_opt()</c>.</p> + </item> + + <tag><c><![CDATA[agent_terminating_discovery_opts() = [agent_terminating_discovery_opt()] <optional>]]></c></tag> + <item> + <p><c>agent_terminating_discovery_opt() = + {enable, boolean()} | + {stage2, discovery | plain} | + {trigger_username, string()}</c></p> + <p>These are options effecting discovery <c>terminating</c> in this + agent (i.e. initiated by a manager). </p> + <p>The default values for the <c>terminating</c> + discovery options are: </p> + <list type="bulleted"> + <item>enable: <c>true</c></item> + <item>stage2: <c>discovery</c></item> + <item>trigger_username: <c>""</c></item> + </list> + </item> + + <tag><c><![CDATA[agent_originating_discovery_opts() = [agent_originating_discovery_opt()] <optional>]]></c></tag> + <item> + <p><c>agent_originating_discovery_opt() = + {enable, boolean()}</c></p> + <p>These are options effecting discovery <c>originating</c> in this + agent. </p> + <p>The default values for the <c>originating</c> + discovery options are: </p> + <list type="bulleted"> + <item>enable: <c>true</c></item> + </list> + </item> + + <tag><c><![CDATA[multi_threaded() = bool() <optional>]]></c></tag> + <item> + <p>If <c>true</c>, the agent is multi-threaded, with one + thread for each get request. </p> + <p>Default is <c>false</c>.</p> + </item> + + <tag><c><![CDATA[db_dir() = string() <mandatory>]]></c></tag> + <item> + <p>Defines where the SNMP agent internal db files are stored.</p> + </item> + + <tag><c><![CDATA[local_db() = [local_db_opt()] <optional>]]></c></tag> + <item> + <p><c>local_db_opt() = {repair, agent_repair()} | {auto_save, agent_auto_save()} | {verbosity, verbosity()}</c></p> + <p>Defines options specific for the SNMP agent local database.</p> + <p>For defaults see the options in <c>local_db_opt()</c>.</p> + </item> + + <tag><c><![CDATA[agent_repair() = false | true | force <optional>]]></c></tag> + <item> + <p>When starting snmpa_local_db it always tries to open an + existing database. If <c>false</c>, and some errors occur, a new + database is created instead. If <c>true</c>, an existing file + will be repaired. If <c>force</c>, the table will be repaired + even if it was properly closed. </p> + <p>Default is <c>true</c>.</p> + </item> + + <tag><c><![CDATA[agent_auto_save() = integer() | infinity <optional>]]></c></tag> + <item> + <p>The auto save interval. The table is flushed to disk + whenever not accessed for this amount of time.</p> + <p>Default is <c>5000</c>.</p> + </item> + + <tag><c><![CDATA[agent_net_if() = [agent_net_if_opt()] <optional>]]></c></tag> + <item> + <p><c>agent_net_if_opt() = {module, agent_net_if_module()} | {verbosity, verbosity()} | {options, agent_net_if_options()}</c></p> + <p>Defines options specific for the SNMP agent network interface + entity. </p> + <p>For defaults see the options in <c>agent_net_if_opt()</c>.</p> + </item> + + <tag><c><![CDATA[agent_net_if_module() = atom() <optional>]]></c></tag> + <item> + <p>Module which handles the network interface part for the + SNMP agent. Must implement the + <seealso marker="snmpa_network_interface">snmpa_network_interface</seealso> behaviour.</p> + <p>Default is <c>snmpa_net_if</c>.</p> + </item> + + <tag><c><![CDATA[agent_net_if_options() = [agent_net_if_option()] <optional>]]></c></tag> + <item> + <p><c>agent_net_if_option() = {bind_to, bind_to()} | + {sndbuf, sndbuf()} | + {recbuf, recbuf()} | + {no_reuse, no_reuse()} | + {req_limit, req_limit()} | + {filter, agent_net_if_filter_options()}</c></p> + <p>These options are actually specific to the used module. + The ones shown here are applicable to the default + <c>agent_net_if_module()</c>.</p> + <p>For defaults see the options in <c>agent_net_if_option()</c>.</p> + </item> + + <tag><c><![CDATA[req_limit() = integer() | infinity <optional>]]></c></tag> + <item> + <p>Max number of simultaneous requests handled by the agent.</p> + <p>Default is <c>infinity</c>.</p> + </item> + + <tag><c><![CDATA[agent_net_if_filter_options() = [agent_net_if_filter_option()] <optional>]]></c></tag> + <item> + <p><c>agent_net_if_filter_option() = {module, agent_net_if_filter_module()}</c></p> + <p>These options are actually specific to the used module. + The ones shown here are applicable to the default + <c><![CDATA[agent_net_if_filter_module()]]></c>.</p> + <p>For defaults see the options in + <c>agent_net_if_filter_option()</c>.</p> + </item> + + <tag><c><![CDATA[agent_net_if_filter_module() = atom() <optional>]]></c></tag> + <item> + <p>Module which handles the network interface filter part for the + SNMP agent. Must implement the + <seealso marker="snmpa_network_interface_filter">snmpa_network_interface_filter</seealso> behaviour.</p> + <p>Default is <c>snmpa_net_if_filter</c>.</p> + </item> + + <tag><c><![CDATA[agent_mibs() = [string()] <optional>]]></c></tag> + <item> + <p>Specifies a list of MIBs (including path) that defines which MIBs + are initially loaded into the SNMP master agent. </p> + <p>Note that the following mibs will always be loaded:</p> + <list type="bulleted"> + <item>version v1: <c>STANDARD-MIB</c></item> + <item>version v2: <c>SNMPv2</c></item> + <item>version v3: <c>SNMPv2</c>, <c>SNMP-FRAMEWORK-MIB</c> + and <c>SNMP-MPD-MIB</c></item> + </list> + <p>Default is <c>[]</c>.</p> + </item> + + <tag><c><![CDATA[mib_storage() = ets | {ets, Dir} | {ets, Dir, Action} | dets | {dets, Dir} | {dets, Dir, Action} | mnesia | {mnesia, Nodes} | {mnesia, Nodes, Action} <optional>]]></c></tag> + <item> + <p>Specifies how info retrieved from the mibs will be stored.</p> + <p>If <c>mib_storage</c> is <c>{ets, Dir}</c>, the table will also be + stored on file. If <c>Dir</c> is <c>default</c>, then <c>db_dir</c> + will be used.</p> + <p>If <c>mib_storage</c> is <c>dets</c> or if <c>Dir</c> is + <c>default</c>, then <c>db_dir</c> will be used for <c>Dir</c>.</p> + <p>If <c>mib_storage</c> is <c>mnesia</c> then <c>erlang:nodes()</c> + will be used for <c>Nodes</c>.</p> + <p>Default is <c>ets</c>. </p> + <p><c>Dir = default | string()</c>. Dir is the directory where the + files will be stored. If <c>default</c>, then <c>db_dir</c> will be + used.</p> + <p><c>Nodes = visible | connected | [node()]</c>. + <c>Nodes = visible</c> is translated to + <c>erlang:nodes(visible)</c>. + <c>Nodes = connected</c> is translated to + <c>erlang:nodes(connected)</c>. + If <c>Nodes = []</c> then the own node is assumed.</p> + <p><c>Action = clear | keep</c>. Default is <c>keep</c>. + <c>Action</c> is used to specify what shall be done if the + mnesia/dets table already exist.</p> + </item> + + <tag><c><![CDATA[mib_server() = [mib_server_opt()] <optional>]]></c></tag> + <item> + <p><c>mib_server_opt() = {mibentry_override, mibentry_override()} | {trapentry_override, trapentry_override()} | {verbosity, verbosity()} | {cache, mibs_cache()}</c></p> + <p>Defines options specific for the SNMP agent mib server. </p> + <p>For defaults see the options in <c>mib_server_opt()</c>.</p> + </item> + + <tag><c><![CDATA[mibentry_override() = bool() <optional>]]></c></tag> + <item> + <p>If this value is false, then when loading a mib each mib- + entry is checked prior to installation of the mib. + The purpose of the check is to prevent that the same symbolic + mibentry name is used for different oid's.</p> + <p>Default is <c>false</c>.</p> + </item> + + <tag><c><![CDATA[trapentry_override() = bool() <optional>]]></c></tag> + <item> + <p>If this value is false, then when loading a mib each trap + is checked prior to installation of the mib. + The purpose of the check is to prevent that the same symbolic + trap name is used for different trap's.</p> + <p>Default is <c>false</c>.</p> + </item> + + <tag><c><![CDATA[mibs_cache() = bool() | mibs_cache_opts() <optional>]]></c></tag> + <item> + <p>Shall the agent utilize the mib server lookup cache or not.</p> + <p>Default is <c>true</c> (in which case the <c>mibs_cache_opts()</c> + default values apply).</p> + </item> + + <tag><c><![CDATA[mibs_cache_opts() = [mibs_cache_opt()] <optional>]]></c></tag> + <item> + <p><c>mibs_cache_opt() = {autogc, mibs_cache_autogc()} | {gclimit, mibs_cache_gclimit()} | {age, mibs_cache_age()}</c></p> + <p>Defines options specific for the SNMP agent mib server cache. </p> + <p>For defaults see the options in <c>mibs_cache_opt()</c>.</p> + </item> + + <tag><c><![CDATA[mibs_cache_autogc() = bool() <optional>]]></c></tag> + <item> + <p>Defines if the mib server shall perform cache gc automatically or + leave it to the user (see + <seealso marker="snmpa#gc_mibs_cache">gc_mibs_cache/0,1,2,3</seealso>). </p> + <p>Default is <c>false</c>.</p> + </item> + + <tag><c><![CDATA[mibs_cache_age() = integer() > 0 <optional>]]></c></tag> + <item> + <p>Defines how old the entries in the cache will be allowed before + they are GC'ed (assuming GC is performed). Each entry in the + cache is "touched" whenever it is accessed. </p> + <p>The age is defined in milliseconds. </p> + <p>Default is <c>10 timutes</c>.</p> + </item> + + <tag><c><![CDATA[mibs_cache_gclimit() = integer() > 0 | infinity <optional>]]></c></tag> + <item> + <p>When performing a GC, this is the max number of cache entries + that will be deleted from the cache. </p> + <p>The reason for having this limit is that if the cache is + large, the GC can potentially take a long time, during which + the agent is locked. </p> + <p>Default is <c>100</c>.</p> + </item> + + <tag><c><![CDATA[error_report_mod() = atom() <optional>]]></c></tag> + <item> + <p>Defines an error report module, implementing the + <seealso marker="snmpa_error_report">snmpa_error_report</seealso> + behaviour. Two modules are provided with the toolkit: + <c>snmpa_error_logger</c> and <c>snmpa_error_io</c>.</p> + <p>Default is <c>snmpa_error_logger</c>.</p> + </item> + + <tag><c>symbolic_store() = [symbolic_store_opt()]</c></tag> + <item> + <p><c>symbolic_store_opt() = {verbosity, verbosity()}</c></p> + <p>Defines options specific for the SNMP agent symbolic store. </p> + <p>For defaults see the options in <c>symbolic_store_opt()</c>.</p> + </item> + + <tag><c>target_cache() = [target_cache_opt()]</c></tag> + <item> + <p><c>target_cache_opt() = {verbosity, verbosity()}</c></p> + <p>Defines options specific for the SNMP agent target cache. </p> + <p>For defaults see the options in <c>target_cache_opt()</c>.</p> + </item> + <tag><c><![CDATA[agent_config() = [agent_config_opt()] <mandatory>]]></c></tag> + <item> + <p><c>agent_config_opt() = {dir, agent_config_dir()} | {force_load, force_load()} | {verbosity, verbosity()}</c></p> + <p>Defines specific config related options for the SNMP agent. </p> + <p>For defaults see the options in <c>agent_config_opt()</c>.</p> + </item> + <tag><c><![CDATA[agent_config_dir = dir() <mandatory>]]></c></tag> + <item> + <p>Defines where the SNMP agent configuration files are stored.</p> + </item> + + <tag><c><![CDATA[force_load() = bool() <optional>]]></c></tag> + <item> + <p>If <c>true</c> the configuration files are re-read + during start-up, and the contents of the configuration + database ignored. Thus, if <c>true</c>, changes to + the configuration database are lost upon reboot of the + agent. </p> + <p>Default is <c>false</c>.</p> + </item> + </taglist> + + <p>Manager specific config options and types:</p> + <taglist> + <tag><c><![CDATA[server() = [server_opt()] <optional>]]></c></tag> + <item> + <p><c>server_opt() = {timeout, server_timeout()} | {verbosity, verbosity()}</c></p> + <p>Specifies the options for the manager server process.</p> + <p>Default is <c>silence</c>.</p> + </item> + <tag><c><![CDATA[server_timeout() = integer() <optional>]]></c></tag> + <item> + <p>Asynchroneous request cleanup time. For every requests, + some info is stored internally, in order to be able to + deliver the reply (when it arrives) to the proper destination. + If the reply arrives, this info will be deleted. But if + there is no reply (in time), the info has to be deleted + after the <em>best before</em> time has been passed. + This cleanup will be performed at regular intervals, defined + by the <c>server_timeout()</c> time. + The information will have an <em>best before</em> time, + defined by the <c>Expire</c> time given when calling the + request function (see + <seealso marker="snmpm#async_get">async_get</seealso>, + <seealso marker="snmpm#async_get_next">async_get_next</seealso> and + <seealso marker="snmpm#async_set">async_set</seealso>).</p> + <p>Time in milli-seconds.</p> + <p>Default is <c>30000</c>.</p> + </item> + + <tag><c><![CDATA[manager_config() = [manager_config_opt()] <mandatory>]]></c></tag> + <item> + <p><c>manager_config_opt() = {dir, manager_config_dir()} | {db_dir, manager_db_dir()} | {db_init_error, db_init_error()} | {repair, manager_repair()} | {auto_save, manager_auto_save()} | {verbosity, verbosity()}</c></p> + <p>Defines specific config related options for the SNMP manager. </p> + <p>For defaults see the options in <c>manager_config_opt()</c>.</p> + </item> + + <tag><c><![CDATA[manager_config_dir = dir() <mandatory>]]></c></tag> + <item> + <p>Defines where the SNMP manager configuration files are stored.</p> + </item> + + <tag><c><![CDATA[manager_db_dir = dir() <mandatory>]]></c></tag> + <item> + <p>Defines where the SNMP manager store persistent data.</p> + </item> + + <tag><c><![CDATA[manager_repair() = false | true | force <optional>]]></c></tag> + <item> + <p>Defines the repair option for the persistent database (if + and how the table is repaired when opened). </p> + <p>Default is <c>true</c>.</p> + </item> + + <tag><c><![CDATA[manager_auto_save() = integer() | infinity <optional>]]></c></tag> + <item> + <p>The auto save interval. The table is flushed to disk + whenever not accessed for this amount of time.</p> + <p>Default is <c>5000</c>.</p> + </item> + + <tag><c><![CDATA[manager_irb() = auto | user | {user, integer()} <optional>]]></c></tag> + <item> + <p>This option defines how the manager will handle the sending of + response (acknowledgment) to received inform-requests. </p> + <list type="bulleted"> + <item> + <p><c>auto</c> - The manager will autonomously send response + (acknowledgment> to inform-request messages.</p> + </item> + <item> + <p><c>{user, integer()}</c> - The manager will send response + (acknowledgment) to inform-request messages when the + <seealso marker="snmpm_user#handle_inform">handle_inform</seealso> + function completes. The integer is the time, in milli-seconds, + that the manager will consider the stored inform-request info + valid.</p> + </item> + <item> + <p><c>user</c> - Same as <c>{user, integer()}</c>, except that + the default time, 15 seconds (15000), is used.</p> + </item> + </list> + <p>See + <seealso marker="snmpm_network_interface">snmpm_network_interface</seealso>, + <seealso marker="snmpm_user">handle_inform</seealso> and + <seealso marker="snmp_manager_netif">definition of the manager net if</seealso> for more info.</p> + <p>Default is <c>auto</c>.</p> + </item> + + <tag><c><![CDATA[manager_mibs() = [string()] <optional>]]></c></tag> + <item> + <p>Specifies a list of MIBs (including path) and defines which MIBs + are initially loaded into the SNMP manager. </p> + <p>Default is <c>[]</c>.</p> + </item> + + <tag><c><![CDATA[manager_net_if() = [manager_net_if_opt()] <optional>]]></c></tag> + <item> + <p><c>manager_net_if_opt() = {module, manager_net_if_module()} | + {verbosity, verbosity()} | + {options, manager_net_if_options()}</c></p> + <p>Defines options specific for the SNMP manager network interface + entity. </p> + <p>For defaults see the options in <c>manager_net_if_opt()</c>.</p> + </item> + + <tag><c><![CDATA[manager_net_if_options() = [manager_net_if_option()] <optional>]]></c></tag> + <item> + <p><c>manager_net_if_option() = {bind_to, bind_to()} | + {sndbuf, sndbuf()} | + {recbuf, recbuf()} | + {no_reuse, no_reuse()} | + {filter, manager_net_if_filter_options()} </c></p> + <p>These options are actually specific to the used module. + The ones shown here are applicable to the default + <c>manager_net_if_module()</c>.</p> + <p>For defaults see the options in <c>manager_net_if_option()</c>.</p> + </item> + + <tag><c><![CDATA[manager_net_if_module() = atom() <optional>]]></c></tag> + <item> + <p>Module which handles the network interface part for the + SNMP manager. Must implement the + <seealso marker="snmpm_network_interface">snmpm_network_interface</seealso> behaviour.</p> + <p>Default is <c>snmpm_net_if</c>.</p> + </item> + + <tag><c><![CDATA[manager_net_if_filter_options() = [manager_net_if_filter_option()] <optional>]]></c></tag> + <item> + <p><c>manager_net_if_filter_option() = {module, manager_net_if_filter_module()}</c></p> + <p>These options are actually specific to the used module. + The ones shown here are applicable to the default + <c><![CDATA[manager_net_if_filter_module()]]></c>.</p> + <p>For defaults see the options in + <c>manager_net_if_filter_option()</c>.</p> + </item> + + <tag><c><![CDATA[manager_net_if_filter_module() = atom() <optional>]]></c></tag> + <item> + <p>Module which handles the network interface filter part for the + SNMP manager. Must implement the + <seealso marker="snmpm_network_interface_filter">snmpm_network_interface_filter</seealso> behaviour.</p> + <p>Default is <c>snmpm_net_if_filter</c>.</p> + </item> + + <tag><c><![CDATA[def_user_module() = atom() <optional>]]></c></tag> + <item> + <p>The module implementing the default user. See the + <seealso marker="snmpm_user">snmpm_user</seealso> behaviour.</p> + <p>Default is <c>snmpm_user_default</c>.</p> + </item> + + <tag><c><![CDATA[def_user_data() = term() <optional>]]></c></tag> + <item> + <p>Data for the default user. Passed to the user module when + calling the callback functions.</p> + <p>Default is <c>undefined</c>.</p> + </item> + </taglist> + + <p>Common config types:</p> + <taglist> + <tag><c>restart_type() = permanent | transient | temporary</c></tag> + <item> + <p>See <seealso marker="stdlib:supervisor#child_spec">supervisor</seealso> + documentation for more info.</p> + <p>Default is <c>permanent</c> for the agent and <c>transient</c> + for the manager.</p> + </item> + <tag><c>db_init_error() = terminate | create</c></tag> + <item> + <p>Defines what to do if the agent or manager is unable to open an + existing database file. <c>terminate</c> means that the + agent/manager will terminate and <c>create</c> means that the + agent/manager will remove the faulty file(s) and create new ones.</p> + <p>Default is <c>terminate</c>.</p> + </item> + <tag><c><![CDATA[priority() = atom() <optional>]]></c></tag> + <item> + <p>Defines the Erlang priority for all SNMP processes.</p> + <p>Default is <c>normal</c>.</p> + </item> + <tag><c><![CDATA[versions() = [version()] <optional>]]></c></tag> + <item> + <p><c>version() = v1 | v2 | v3</c></p> + <p>Which SNMP versions shall be accepted/used.</p> + <p>Default is <c>[v1,v2,v3]</c>.</p> + </item> + <tag><c><![CDATA[verbosity() = silence | info | log | debug | trace <optional>]]></c></tag> + <item> + <p>Verbosity for a SNMP process. This specifies now much debug info + is printed.</p> + <p>Default is <c>silence</c>.</p> + </item> + <tag><c><![CDATA[bind_to() = bool() <optional>]]></c></tag> + <item> + <p>If <c>true</c>, net_if binds to the IP address. + If <c>false</c>, net_if listens on any IP address on the host + where it is running. </p> + <p>Default is <c>false</c>.</p> + </item> + <tag><c><![CDATA[no_reuse() = bool() <optional>]]></c></tag> + <item> + <p>If <c>true</c>, net_if does not specify that the IP + and port address should be reusable. If <c>false</c>, + the address is set to reusable. </p> + <p>Default is <c>false</c>.</p> + </item> + <tag><c><![CDATA[recbuf() = integer() <optional>]]></c></tag> + <item> + <p>Receive buffer size. </p> + <p>Default value is defined by <c>gen_udp</c>.</p> + </item> + <tag><c><![CDATA[sndbuf() = integer() <optional>]]></c></tag> + <item> + <p>Send buffer size. </p> + <p>Default value is defined by <c>gen_udp</c>.</p> + </item> + <tag><c><![CDATA[note_store() = [note_store_opt()] <optional>]]></c></tag> + <item> + <p><c>note_store_opt() = {timeout, note_store_timeout()} | {verbosity, verbosity()}</c></p> + <p>Specifies the start-up verbosity for the SNMP note store.</p> + <p>For defaults see the options in <c>note_store_opt()</c>.</p> + </item> + <tag><c><![CDATA[note_store_timeout() = integer() <optional>]]></c></tag> + <item> + <p>Note cleanup time. When storing a note in the note store, + each note is given lifetime. Every <c>timeout</c> the note_store + process performs a GC to remove the expired note's. Time in + milli-seconds.</p> + <p>Default is <c>30000</c>.</p> + </item> + <tag><c><![CDATA[audit_trail_log() = [audit_trail_log_opt()] <optional>]]></c></tag> + <item> + <p><c>audit_trail_log_opt() = {type, atl_type()} | {dir, atl_dir()} | {size, atl_size()} | {repair, atl_repair()}</c></p> + <p>If present, this option specifies the options for the + audit trail logging. The <c>disk_log</c> module is used + to maintain a wrap log. If present, the <c>dir</c> and + <c>size</c> options are mandatory.</p> + <p>If not present, audit trail logging is not used.</p> + </item> + <tag><c><![CDATA[atl_type() = read | write | read_write <optional>]]></c></tag> + <item> + <p>Specifies what type of an audit trail log should be used. + The effect of the type is actually different for the the agent + and the manager. </p> + <p>For the agent:</p> + <list type="bulleted"> + <item>If <c>write</c> is specified, only set requests are logged. </item> + <item>If <c>read</c> is specified, only get requests are logged. </item> + <item>If <c>read_write</c>, all requests are logged. </item> + </list> + <p>For the manager:</p> + <list type="bulleted"> + <item>If <c>write</c> is specified, only sent messages are logged. </item> + <item>If <c>read</c> is specified, only received messages are logged. </item> + <item>If <c>read_write</c>, both outgoing and incoming messages are + logged. </item> + </list> + <p>Default is <c>read_write</c>.</p> + </item> + <tag><c><![CDATA[atl_dir = dir() <mandatory>]]></c></tag> + <item> + <p>Specifies where the audit trail log should be stored.</p> + <p>If <c>audit_trail_log</c> specifies that logging should take + place, this parameter <em>must</em> be defined.</p> + </item> + <tag><c><![CDATA[atl_size() = {integer(), integer()} <mandatory>]]></c></tag> + <item> + <p>Specifies the size of the audit + trail log. This parameter is sent to <c>disk_log</c>. </p> + <p>If <c>audit_trail_log</c> specifies that logging should + take place, this parameter <em>must</em> be defined.</p> + </item> + <tag><c><![CDATA[atl_repair() = true | false | truncate | snmp_repair <optional>]]></c></tag> + <item> + <p>Specifies if and how the audit trail log shall be repaired + when opened. Unless this parameter has the value <c>snmp_repair</c> + it is sent to <c>disk_log</c>. If, on the other hand, the value is + <c>snmp_repair</c>, snmp attempts to handle certain faults on it's + own. And even if it cannot repair the file, it does not truncate it + directly, but instead <em>moves it aside</em> for later off-line + analysis.</p> + <p>Default is <c>true</c>.</p> + </item> + </taglist> + </section> + + <section> + <title>See Also</title> + <p>application(3), disk_log(3)</p> + </section> + +</appref> + diff --git a/lib/snmp/doc/src/snmp_app_a.xml b/lib/snmp/doc/src/snmp_app_a.xml new file mode 100644 index 0000000000..5192279a45 --- /dev/null +++ b/lib/snmp/doc/src/snmp_app_a.xml @@ -0,0 +1,108 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>1997</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>SNMP Appendix A</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_app_a.xml</file> + </header> + + <section> + <title>Appendix A</title> + <p>This appendix describes the conversion of SNMPv2 to SNMPv1 + error messages. The instrumentation functions should return v2 + error messages. + </p> + <p>Mapping of SNMPv2 error message to SNMPv1: + </p> + <table> + <row> + <cell align="left" valign="middle">SNMPv2 message</cell> + <cell align="left" valign="middle">SNMPv1 message</cell> + </row> + <row> + <cell align="left" valign="middle">noError</cell> + <cell align="left" valign="middle">noError</cell> + </row> + <row> + <cell align="left" valign="middle">genErr</cell> + <cell align="left" valign="middle">genErr</cell> + </row> + <row> + <cell align="left" valign="middle">noAccess</cell> + <cell align="left" valign="middle">noSuchName</cell> + </row> + <row> + <cell align="left" valign="middle">wrongType</cell> + <cell align="left" valign="middle">badValue</cell> + </row> + <row> + <cell align="left" valign="middle">wrongLength</cell> + <cell align="left" valign="middle">badValue</cell> + </row> + <row> + <cell align="left" valign="middle">wrongEncoding</cell> + <cell align="left" valign="middle">badValue</cell> + </row> + <row> + <cell align="left" valign="middle">wrongValue</cell> + <cell align="left" valign="middle">badValue</cell> + </row> + <row> + <cell align="left" valign="middle">noCreation</cell> + <cell align="left" valign="middle">noSuchName</cell> + </row> + <row> + <cell align="left" valign="middle">inconsistentValue</cell> + <cell align="left" valign="middle">badValue</cell> + </row> + <row> + <cell align="left" valign="middle">resourceUnavailable</cell> + <cell align="left" valign="middle">genErr</cell> + </row> + <row> + <cell align="left" valign="middle">commitFailed</cell> + <cell align="left" valign="middle">genErr</cell> + </row> + <row> + <cell align="left" valign="middle">undoFailed</cell> + <cell align="left" valign="middle">genErr</cell> + </row> + <row> + <cell align="left" valign="middle">notWritable</cell> + <cell align="left" valign="middle">noSuchName</cell> + </row> + <row> + <cell align="left" valign="middle">inconsistentName</cell> + <cell align="left" valign="middle">noSuchName</cell> + </row> + <tcaption>Error Messages</tcaption> + </table> + </section> +</chapter> + diff --git a/lib/snmp/doc/src/snmp_app_b.xml b/lib/snmp/doc/src/snmp_app_b.xml new file mode 100644 index 0000000000..536a4b5c6f --- /dev/null +++ b/lib/snmp/doc/src/snmp_app_b.xml @@ -0,0 +1,511 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>1997</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>SNMP Appendix B</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_app_b.xml</file> + </header> + + <section> + <title>Appendix B</title> + + <section> + <title>RowStatus (from RFC1903)</title> + <pre> +RowStatus ::= TEXTUAL-CONVENTION + STATUS current + DESCRIPTION + "The RowStatus textual convention is used to manage the + creation and deletion of conceptual rows, and is used as the + value of the SYNTAX clause for the status column of a + conceptual row (as described in Section 7.7.1 in RFC1902.) + + The status column has six defined values: + + - `active', which indicates that the conceptual row is + available for use by the managed device; + + - `notInService', which indicates that the conceptual + row exists in the agent, but is unavailable for use by + the managed device (see NOTE below); + + - `notReady', which indicates that the conceptual row + exists in the agent, but is missing information + necessary in order to be available for use by the + managed device; + + - `createAndGo', which is supplied by a management + station wishing to create a new instance of a + conceptual row and to have its status automatically set + to active, making it available for use by the managed + device; + + - `createAndWait', which is supplied by a management + station wishing to create a new instance of a + conceptual row (but not make it available for use by + the managed device); and, + + - `destroy', which is supplied by a management station + wishing to delete all of the instances associated with + an existing conceptual row. + + Whereas five of the six values (all except `notReady') may + be specified in a management protocol set operation, only + three values will be returned in response to a management + protocol retrieval operation: `notReady', `notInService' or + `active'. That is, when queried, an existing conceptual row + has only three states: it is either available for use by + the managed device (the status column has value `active'); + it is not available for use by the managed device, though + the agent has sufficient information to make it so (the + status column has value `notInService'); or, it is not + available for use by the managed device, and an attempt to + make it so would fail because the agent has insufficient + information (the state column has value `notReady'). + + + NOTE WELL + + This textual convention may be used for a MIB table, + irrespective of whether the values of that table's + conceptual rows are able to be modified while it is + active, or whether its conceptual rows must be taken + out of service in order to be modified. That is, it is + the responsibility of the DESCRIPTION clause of the + status column to specify whether the status column must + not be `active' in order for the value of some other + column of the same conceptual row to be modified. If + such a specification is made, affected columns may be + changed by an SNMP set PDU if the RowStatus would not + be equal to `active' either immediately before or after + processing the PDU. In other words, if the PDU also + contained a varbind that would change the RowStatus + value, the column in question may be changed if the + RowStatus was not equal to `active' as the PDU was + received, or if the varbind sets the status to a value + other than 'active'. + + + Also note that whenever any elements of a row exist, the + RowStatus column must also exist. + + To summarize the effect of having a conceptual row with a + status column having a SYNTAX clause value of RowStatus, + consider the following state diagram: + + + STATE + +--------------+-----------+-------------+------------- + | A | B | C | D + | |status col.|status column| + |status column | is | is |status column + ACTION |does not exist| notReady | notInService| is active +--------------+--------------+-----------+-------------+------------- +set status |noError ->D|inconsist- |inconsistent-|inconsistent- +column to | or | entValue| Value| Value +createAndGo |inconsistent- | | | + | Value| | | +--------------+--------------+-----------+-------------+------------- +set status |noError see 1|inconsist- |inconsistent-|inconsistent- +column to | or | entValue| Value| Value +createAndWait |wrongValue | | | +--------------+--------------+-----------+-------------+------------- +set status |inconsistent- |inconsist- |noError |noError +column to | Value| entValue| | +active | | | | + | | or | | + | | | | + | |see 2 ->D| ->D| ->D +--------------+--------------+-----------+-------------+------------- +set status |inconsistent- |inconsist- |noError |noError ->C +column to | Value| entValue| | +notInService | | | | + | | or | | or + | | | | + | |see 3 ->C| ->C|wrongValue +--------------+--------------+-----------+-------------+------------- +set status |noError |noError |noError |noError +column to | | | | +destroy | ->A| ->A| ->A| ->A +--------------+--------------+-----------+-------------+------------- +set any other |see 4 |noError |noError |see 5 +column to some| | | | +value | | see 1| ->C| ->D +--------------+--------------+-----------+-------------+------------- + + (1) goto B or C, depending on information available to the + agent. + + (2) if other variable bindings included in the same PDU, + provide values for all columns which are missing but + required, then return noError and goto D. + + (3) if other variable bindings included in the same PDU, + provide values for all columns which are missing but + required, then return noError and goto C. + + (4) at the discretion of the agent, the return value may be + either: + + inconsistentName: because the agent does not choose to + create such an instance when the corresponding + RowStatus instance does not exist, or + + inconsistentValue: if the supplied value is + inconsistent with the state of some other MIB object's + value, or + + noError: because the agent chooses to create the + instance. + + If noError is returned, then the instance of the status + column must also be created, and the new state is B or C, + depending on the information available to the agent. If + inconsistentName or inconsistentValue is returned, the row + remains in state A. + + (5) depending on the MIB definition for the column/table, + either noError or inconsistentValue may be returned. + + NOTE: Other processing of the set request may result in a + response other than noError being returned, e.g., + wrongValue, noCreation, etc. + + + Conceptual Row Creation + + There are four potential interactions when creating a + conceptual row: selecting an instance-identifier which is + not in use; creating the conceptual row; initializing any + objects for which the agent does not supply a default; and, + making the conceptual row available for use by the managed + device. + + + Interaction 1: Selecting an Instance-Identifier + + The algorithm used to select an instance-identifier varies + for each conceptual row. In some cases, the instance- + identifier is semantically significant, e.g., the + destination address of a route, and a management station + selects the instance-identifier according to the semantics. + + In other cases, the instance-identifier is used solely to + distinguish conceptual rows, and a management station + without specific knowledge of the conceptual row might + examine the instances present in order to determine an + unused instance-identifier. (This approach may be used, but + it is often highly sub-optimal; however, it is also a + questionable practice for a naive management station to + attempt conceptual row creation.) + + Alternately, the MIB module which defines the conceptual row + might provide one or more objects which provide assistance + in determining an unused instance-identifier. For example, + if the conceptual row is indexed by an integer-value, then + an object having an integer-valued SYNTAX clause might be + defined for such a purpose, allowing a management station to + issue a management protocol retrieval operation. In order + to avoid unnecessary collisions between competing management + stations, `adjacent' retrievals of this object should be + different. + + Finally, the management station could select a pseudo-random + number to use as the index. In the event that this index + was already in use and an inconsistentValue was returned in + response to the management protocol set operation, the + management station should simply select a new pseudo-random + number and retry the operation. + + A MIB designer should choose between the two latter + algorithms based on the size of the table (and therefore the + efficiency of each algorithm). For tables in which a large + number of entries are expected, it is recommended that a MIB + object be defined that returns an acceptable index for + creation. For tables with small numbers of entries, it is + recommended that the latter pseudo-random index mechanism be + used. + + + Interaction 2: Creating the Conceptual Row + + Once an unused instance-identifier has been selected, the + management station determines if it wishes to create and + activate the conceptual row in one transaction or in a + negotiated set of interactions. + + Interaction 2a: Creating and Activating the Conceptual Row + + The management station must first determine the column + requirements, i.e., it must determine those columns for + which it must or must not provide values. Depending on the + complexity of the table and the management station's + knowledge of the agent's capabilities, this determination + can be made locally by the management station. Alternately, + the management station issues a management protocol get + operation to examine all columns in the conceptual row that + it wishes to create. In response, for each column, there + are three possible outcomes: + + - a value is returned, indicating that some other + management station has already created this conceptual + row. We return to interaction 1. + + - the exception `noSuchInstance' is returned, + indicating that the agent implements the object-type + associated with this column, and that this column in at + least one conceptual row would be accessible in the MIB + view used by the retrieval were it to exist. For those + columns to which the agent provides read-create access, + the `noSuchInstance' exception tells the management + station that it should supply a value for this column + when the conceptual row is to be created. + + - the exception `noSuchObject' is returned, indicating + that the agent does not implement the object-type + associated with this column or that there is no + conceptual row for which this column would be + accessible in the MIB view used by the retrieval. As + such, the management station cannot issue any + management protocol set operations to create an + instance of this column. + + Once the column requirements have been determined, a + management protocol set operation is accordingly issued. + This operation also sets the new instance of the status + column to `createAndGo'. + + When the agent processes the set operation, it verifies that + it has sufficient information to make the conceptual row + available for use by the managed device. The information + available to the agent is provided by two sources: the + management protocol set operation which creates the + conceptual row, and, implementation-specific defaults + supplied by the agent (note that an agent must provide + implementation-specific defaults for at least those objects + which it implements as read-only). If there is sufficient + information available, then the conceptual row is created, a + `noError' response is returned, the status column is set to + `active', and no further interactions are necessary (i.e., + interactions 3 and 4 are skipped). If there is insufficient + information, then the conceptual row is not created, and the + set operation fails with an error of `inconsistentValue'. + On this error, the management station can issue a management + protocol retrieval operation to determine if this was + because it failed to specify a value for a required column, + or, because the selected instance of the status column + already existed. In the latter case, we return to + interaction 1. In the former case, the management station + can re-issue the set operation with the additional + information, or begin interaction 2 again using + `createAndWait' in order to negotiate creation of the + conceptual row. + + NOTE WELL + + Regardless of the method used to determine the column + requirements, it is possible that the management + station might deem a column necessary when, in fact, + the agent will not allow that particular columnar + instance to be created or written. In this case, the + management protocol set operation will fail with an + error such as `noCreation' or `notWritable'. In this + case, the management station decides whether it needs + to be able to set a value for that particular columnar + instance. If not, the management station re-issues the + management protocol set operation, but without setting + a value for that particular columnar instance; + otherwise, the management station aborts the row + creation algorithm. + + Interaction 2b: Negotiating the Creation of the Conceptual + Row + + The management station issues a management protocol set + operation which sets the desired instance of the status + column to `createAndWait'. If the agent is unwilling to + process a request of this sort, the set operation fails with + an error of `wrongValue'. (As a consequence, such an agent + must be prepared to accept a single management protocol set + operation, i.e., interaction 2a above, containing all of the + columns indicated by its column requirements.) Otherwise, + the conceptual row is created, a `noError' response is + returned, and the status column is immediately set to either + `notInService' or `notReady', depending on whether it has + sufficient information to make the conceptual row available + for use by the managed device. If there is sufficient + information available, then the status column is set to + `notInService'; otherwise, if there is insufficient + information, then the status column is set to `notReady'. + Regardless, we proceed to interaction 3. + + Interaction 3: Initializing non-defaulted Objects + + The management station must now determine the column + requirements. It issues a management protocol get operation + to examine all columns in the created conceptual row. In + the response, for each column, there are three possible + outcomes: + + - a value is returned, indicating that the agent + implements the object-type associated with this column + and had sufficient information to provide a value. For + those columns to which the agent provides read-create + access (and for which the agent allows their values to + be changed after their creation), a value return tells + the management station that it may issue additional + management protocol set operations, if it desires, in + order to change the value associated with this column. + + - the exception `noSuchInstance' is returned, + indicating that the agent implements the object-type + associated with this column, and that this column in at + least one conceptual row would be accessible in the MIB + view used by the retrieval were it to exist. However, + the agent does not have sufficient information to + provide a value, and until a value is provided, the + conceptual row may not be made available for use by the + managed device. For those columns to which the agent + provides read-create access, the `noSuchInstance' + exception tells the management station that it must + issue additional management protocol set operations, in + order to provide a value associated with this column. + + - the exception `noSuchObject' is returned, indicating + that the agent does not implement the object-type + associated with this column or that there is no + conceptual row for which this column would be + accessible in the MIB view used by the retrieval. As + such, the management station cannot issue any + management protocol set operations to create an + instance of this column. + + If the value associated with the status column is + `notReady', then the management station must first deal with + all `noSuchInstance' columns, if any. Having done so, the + value of the status column becomes `notInService', and we + proceed to interaction 4. + + Interaction 4: Making the Conceptual Row Available + + Once the management station is satisfied with the values + associated with the columns of the conceptual row, it issues + a management protocol set operation to set the status column + to `active'. If the agent has sufficient information to + make the conceptual row available for use by the managed + device, the management protocol set operation succeeds (a + `noError' response is returned). Otherwise, the management + protocol set operation fails with an error of + `inconsistentValue'. + + + NOTE WELL + + A conceptual row having a status column with value + `notInService' or `notReady' is unavailable to the + managed device. As such, it is possible for the + managed device to create its own instances during the + time between the management protocol set operation + which sets the status column to `createAndWait' and the + management protocol set operation which sets the status + column to `active'. In this case, when the management + protocol set operation is issued to set the status + column to `active', the values held in the agent + supersede those used by the managed device. + + If the management station is prevented from setting the + status column to `active' (e.g., due to management station + or network failure) the conceptual row will be left in the + `notInService' or `notReady' state, consuming resources + indefinitely. The agent must detect conceptual rows that + have been in either state for an abnormally long period of + time and remove them. It is the responsibility of the + DESCRIPTION clause of the status column to indicate what an + abnormally long period of time would be. This period of + time should be long enough to allow for human response time + (including `think time') between the creation of the + conceptual row and the setting of the status to `active'. + In the absence of such information in the DESCRIPTION + clause, it is suggested that this period be approximately 5 + minutes in length. This removal action applies not only to + newly-created rows, but also to previously active rows which + are set to, and left in, the notInService state for a + prolonged period exceeding that which is considered normal + for such a conceptual row. + + + Conceptual Row Suspension + + When a conceptual row is `active', the management station + may issue a management protocol set operation which sets the + instance of the status column to `notInService'. If the + agent is unwilling to do so, the set operation fails with an + error of `wrongValue'. Otherwise, the conceptual row is + taken out of service, and a `noError' response is returned. + It is the responsibility of the DESCRIPTION clause of the + status column to indicate under what circumstances the + status column should be taken out of service (e.g., in order + for the value of some other column of the same conceptual + row to be modified). + + + Conceptual Row Deletion + + For deletion of conceptual rows, a management protocol set + operation is issued which sets the instance of the status + column to `destroy'. This request may be made regardless of + the current value of the status column (e.g., it is possible + to delete conceptual rows which are either `notReady', + `notInService' or `active'.) If the operation succeeds, + then all instances associated with the conceptual row are + immediately removed." + + + SYNTAX INTEGER { + -- the following two values are states: + -- these values may be read or written + active(1), + notInService(2), + + -- the following value is a state: + -- this value may be read, but not written + notReady(3), + + -- the following three values are + -- actions: these values may be written, + -- but are never read + createAndGo(4), + createAndWait(5), + destroy(6) + } + </pre> + </section> + </section> +</chapter> + diff --git a/lib/snmp/doc/src/snmp_audit_trail_log.xml b/lib/snmp/doc/src/snmp_audit_trail_log.xml new file mode 100644 index 0000000000..9a49a0175b --- /dev/null +++ b/lib/snmp/doc/src/snmp_audit_trail_log.xml @@ -0,0 +1,81 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>2004</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>Audit Trail Log</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_audit_trail_log.xml</file> + </header> + <p>The chapter <em>Audit Trail Log</em> describes the audit trail logging. + </p> + <p>Both the agent and the manager can be configured to log + incoming and outgoing messages. It uses the Erlang standard log + mechanism <c>disk_log</c> for logging. The size and location of + the log files are configurable. A wrap log is used, which means + that when the log has grown to a maximum size, it starts from the + beginning of the log, overwriting existing log records. + </p> + <p>The log can be either a <c>read</c>, <c>write</c> or a + <c>read_write</c>. + </p> + + <section> + <title>Agent Logging</title> + <p>For the agent, a <c>write</c>, means that all <c>set</c> + requests and their responses are stored. No <c>get</c> requests + or traps are stored in a <c>write</c>. A <c>read_write</c>, + all requests, responses and traps are stored. + </p> + <p>The log uses a raw data format (basically the BER encoded + message), in order to minimize the CPU load needed for the log + mechanism. This means that the log is not human readable, but + needs to be formatted off-line before it can be read. Use the + function + <seealso marker="snmpa#log_to_txt">snmpa:log_to_txt</seealso> + for this purpose. + </p> + </section> + + <section> + <title>Manager Logging</title> + <p>For the manager, a <c>write</c>, means that all + requests (<c>set</c> and <c>get</c>) and their responses are stored. + No traps are stored in a <c>write</c>. A <c>read_write</c>, + all requests, responses and traps are stored. + </p> + <p>The log uses a raw data format (basically the BER encoded + message), in order to minimize the CPU load needed for the log + mechanism. This means that the log is not human readable, but + needs to be formatted off-line before it can be read. Use the + function + <seealso marker="snmpm#log_to_txt">snmpm:log_to_txt</seealso> + for this purpose. + </p> + </section> +</chapter> + diff --git a/lib/snmp/doc/src/snmp_community_mib.xml b/lib/snmp/doc/src/snmp_community_mib.xml new file mode 100644 index 0000000000..7c7386af19 --- /dev/null +++ b/lib/snmp/doc/src/snmp_community_mib.xml @@ -0,0 +1,136 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>1999</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmp_community_mib</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_community_mib.xml</file> + </header> + <module>snmp_community_mib</module> + <modulesummary>Instrumentation Functions for SNMP-COMMUNITY-MIB</modulesummary> + <description> + <p>The module <c>snmp_community_mib</c> implements the instrumentation + functions for the + SNMP-COMMUNITY-MIB, and functions for configuring the database. + </p> + <p>The configuration files are described in the SNMP User's Manual.</p> + </description> + <funcs> + <func> + <name>configure(ConfDir) -> void()</name> + <fsummary>Configure the SNMP-COMMUNITY-MIB</fsummary> + <type> + <v>ConfDir = string()</v> + </type> + <desc> + <p>This function is called from the supervisor at system + start-up. + </p> + <p>Inserts all data in the configuration files into the + database and destroys all old rows with StorageType + <c>volatile</c>. The rows created from the configuration file + will have StorageType <c>nonVolatile</c>. + </p> + <p>All <c>snmp</c> counters are set to zero. + </p> + <p>If an error is found in the configuration file, it is + reported using the function <c>config_err/2</c> of the error, + report module and the function fails with reason + <c>configuration_error</c>. + </p> + <p><c>ConfDir</c> is a string which points to the directory + where the configuration files are found. + </p> + <p>The configuration file read is: <c>community.conf</c>. + </p> + </desc> + </func> + <func> + <name>reconfigure(ConfDir) -> void()</name> + <fsummary>Configure the SNMP-COMMUNITY-MIB</fsummary> + <type> + <v>ConfDir = string()</v> + </type> + <desc> + <p>Inserts all data in the configuration files into the + database and destroys all old data, including the rows with + StorageType <c>nonVolatile</c>. The rows created from the + configuration file will have StorageType <c>nonVolatile</c>. + </p> + <p>Thus, the data in the SNMP-COMMUNITY-MIB, after this + function has been called, is from the configuration files. + </p> + <p>All <c>snmp</c> counters are set to zero. + </p> + <p>If an error is found in the configuration file, it is + reported using the function <c>config_err/2</c> of the error report + module, and the function fails with reason + <c>configuration_error</c>. + </p> + <p><c>ConfDir</c> is a string which points to the directory + where the configuration files are found. + </p> + <p>The configuration file read is: <c>community.conf</c>.</p> + <marker id="add_community"></marker> + </desc> + </func> + <func> + <name>add_community(Idx, CommName, SecName, CtxName, TransportTag) -> Ret</name> + <fsummary>Added one community</fsummary> + <type> + <v>Idx = string()</v> + <v>CommName = string()</v> + <v>SecName = string()</v> + <v>CtxName = string()</v> + <v>TransportTag = string()</v> + <v>Ret = {ok, Key} | {error, Reason}</v> + <v>Key = term()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Adds a community to the agent config. + Equivalent to one line in the <c>community.conf</c> file.</p> + <marker id="delete_community"></marker> + </desc> + </func> + <func> + <name>delete_community(Key) -> Ret</name> + <fsummary>Delete one community</fsummary> + <type> + <v>Key = term()</v> + <v>Ret = ok | {error, Reason}</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Delete a community from the agent config.</p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmp_config.xml b/lib/snmp/doc/src/snmp_config.xml new file mode 100644 index 0000000000..073cdde308 --- /dev/null +++ b/lib/snmp/doc/src/snmp_config.xml @@ -0,0 +1,1030 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>1997</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>Running the application</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_config.xml</file> + </header> + <p>The chapter <em>Running the application</em> describes how the + application is configured and started. + The topics include:</p> + <list type="bulleted"> + <item>configuration directories and parameters</item> + <item>modifying the configuration files</item> + <item>starting the application (agent and/or manager)</item> + <item>debugging the application (agent and/or manager)</item> + </list> + <p>Refer also to the chapter(s) + <seealso marker="snmp_agent_config_files">Definition of Agent Configuration Files</seealso> and + <seealso marker="snmp_manager_config_files">Definition of Manager Configuration Files</seealso> which contains more detailed information + about the agent and manager configuration files.</p> + + <section> + <marker id="configuration_params"></marker> + <title>Configuring the application</title> + <p>The following two directories must exist in the system + to run the agent:</p> + <list type="bulleted"> + <item> + <p>the <em>configuration directory</em> stores all + configuration files used by the agent (refer to the chapter + <seealso marker="snmp_agent_config_files">Definition of Agent Configuration Files</seealso> for more information). </p> + </item> + <item>the <em>database directory</em> stores the internal + database files.</item> + </list> + <p>The following directory must exist in the system + to run the manager:</p> + <list type="bulleted"> + <item> + <p>the <em>configuration directory</em> stores all + configuration files used by the manager (refer to the chapter + <seealso marker="snmp_manager_config_files">Definition of Manager Configuration Files</seealso> for more information). </p> + </item> + <item> + <p>the <em>database directory</em> stores the internal + database files. </p> + </item> + </list> + + <p>The agent and manager uses (application) configuration parameters to + find out where these directories are located. The parameters should be + defined in an Erlang system configuration file. The following + configuration parameters are defined for the SNMP application:</p> + + <!-- Also in snmp_app.xml --> + + <pre> + agent_options() = [agent_option()] + agent_option() = {restart_type, restart_type()} | + {agent_type, agent_type()} | + {agent_verbosity, verbosity()} | + {versions, versions()} | + {discovery, agent_discovery()} | + {priority, priority()} | + {multi_threaded, multi_threaded()} | + {db_dir, db_dir()} | + {db_init_error, db_init_error()} | + {local_db, local_db()} | + {net_if, agent_net_if()} | + {mibs, mibs()} | + {mib_storage, mib_storage()} | + {mib_server, mib_server()} | + {audit_trail_log, audit_trail_log()} | + {error_report_mod, error_report_mod()} | + {note_store, note_store()} | + {symbolic_store, symbolic_store()} | + {target_cache, target_cache()} | + {config, agent_config()} + manager_options() = [manager_option()] + manager_option() = {restart_type, restart_type()} | + {net_if, manager_net_if()} | + {server, server()} | + {note_store, note_store()} | + {config, manager_config()} | + {inform_request_behaviour, manager_irb()} | + {mibs, manager_mibs()} | + {priority, priority()} | + {audit_trail_log, audit_trail_log()} | + {versions, versions()} | + {def_user_mod, def_user_module() | + {def_user_data, def_user_data()} + </pre> + + <p>Agent specific config options and types:</p> + <taglist> + <tag><c><![CDATA[agent_type() = master | sub <optional>]]></c></tag> + <item> + <p>If <c>master</c>, one master agent is + started. Otherwise, no agents are started. </p> + <p>Default is <c>master</c>.</p> + </item> + + <tag><c><![CDATA[agent_discovery() = [agent_discovery_opt()] <optional>]]></c></tag> + <item> + <p><c>agent_discovery_opt() = + {terminating, agent_terminating_discovery_opts()} | + {originating, agent_originating_discovery_opts()}</c></p> + <p>The <c>terminating</c> options effects discovery initiated by + a manager. </p> + <p>The <c>originating</c> options effects discovery initiated + by this agent. </p> + <p>For defaults see the options in <c>agent_discovery_opt()</c>.</p> + </item> + + <tag><c><![CDATA[agent_terminating_discovery_opts() = [agent_terminating_discovery_opt()] <optional>]]></c></tag> + <item> + <p><c>agent_terminating_discovery_opt() = + {enable, boolean()} | + {stage2, discovery | plain} | + {trigger_username, string()}</c></p> + <p>These are options effecting discovery <c>terminating</c> in this + agent (i.e. initiated by a manager). </p> + <p>The default values for the <c>terminating</c> + discovery options are: </p> + <list type="bulleted"> + <item>enable: <c>true</c></item> + <item>stage2: <c>discovery</c></item> + <item>trigger_username: <c>""</c></item> + </list> + </item> + + <tag><c><![CDATA[agent_originating_discovery_opts() = [agent_originating_discovery_opt()] <optional>]]></c></tag> + <item> + <p><c>agent_originating_discovery_opt() = + {enable, boolean()}</c></p> + <p>These are options effecting discovery <c>originating</c> in this + agent. </p> + <p>The default values for the <c>originating</c> + discovery options are: </p> + <list type="bulleted"> + <item>enable: <c>true</c></item> + </list> + </item> + + <tag><c><![CDATA[multi_threaded() = bool() <optional>]]></c></tag> + <item> + <p>If <c>true</c>, the agent is multi-threaded, with one + thread for each get request. </p> + <p>Default is <c>false</c>.</p> + </item> + + <tag><c><![CDATA[db_dir() = string() <mandatory>]]></c></tag> + <item> + <p>Defines where the SNMP agent internal db files are stored.</p> + </item> + + <tag><c><![CDATA[local_db() = [local_db_opt()] <optional>]]></c></tag> + <item> + <p><c>local_db_opt() = {repair, agent_repair()} | {auto_save, agent_auto_save()} | {verbosity, verbosity()}</c></p> + <p>Defines options specific for the SNMP agent local database.</p> + <p>For defaults see the options in <c>local_db_opt()</c>.</p> + </item> + + <tag><c><![CDATA[agent_repair() = false | true | force <optional>]]></c></tag> + <item> + <p>When starting snmpa_local_db it always tries to open an + existing database. If <c>false</c>, and some errors occur, a new + database is created instead. If <c>true</c>, an existing file + will be repaired. If <c>force</c>, the table will be repaired + even if it was properly closed. </p> + <p>Default is <c>true</c>.</p> + </item> + + <tag><c><![CDATA[agent_auto_save() = integer() | infinity <optional>]]></c></tag> + <item> + <p>The auto save interval. The table is flushed to disk + whenever not accessed for this amount of time.</p> + <p>Default is <c>5000</c>.</p> + </item> + + <tag><c><![CDATA[agent_net_if() = [agent_net_if_opt()] <optional>]]></c></tag> + <item> + <p><c>agent_net_if_option() = {module, agent_net_if_module()} | + {verbosity, verbosity()} | + {options, agent_net_if_options()}</c></p> + <p>Defines options specific for the SNMP agent network interface + entity. </p> + <p>For defaults see the options in <c>agent_net_if_opt()</c>.</p> + </item> + + <tag><c><![CDATA[agent_net_if_module() = atom() <optional>]]></c></tag> + <item> + <p>Module which handles the network interface part for the + SNMP agent. Must implement the + <seealso marker="snmpa_network_interface">snmpa_network_interface</seealso> behaviour.</p> + <p>Default is <c>snmpa_net_if</c>.</p> + </item> + + <tag><c><![CDATA[agent_net_if_options() = [agent_net_if_option()] <optional>]]></c></tag> + <item> + <p><c>agent_net_if_option() = {bind_to, bind_to()} | + {sndbuf, sndbuf()} | + {recbuf, recbuf()} | + {no_reuse, no_reuse()} | + {req_limit, req_limit()} | + {filter, agent_net_if_filter_options()}</c></p> + <p>These options are actually specific to the used module. + The ones shown here are applicable to the default + <c>agent_net_if_module()</c>.</p> + <p>For defaults see the options in <c>agent_net_if_option()</c>.</p> + </item> + + <tag><c><![CDATA[agent_net_if_filter_options() = [agent_net_if_filter_option()] <optional>]]></c></tag> + <item> + <p><c><![CDATA[agent_net_if_filter_option() = {module, agent_net_if_filter_module()}]]></c></p> + <p>These options are actually specific to the used module. + The ones shown here are applicable to the default + <c>agent_net_if_filter_module()</c>.</p> + <p>For defaults see the options in <c>agent_net_if_filter_option()</c>.</p> + </item> + + <tag><c><![CDATA[agent_net_if_filter_module() = atom() <optional>]]></c></tag> + <item> + <p>Module which handles the network interface filter part for the + SNMP agent. Must implement the + <seealso marker="snmpa_network_interface_filter">snmpa_network_interface_filter + </seealso> behaviour.</p> + <p>Default is <c>snmpa_net_if_filter</c>.</p> + </item> + + <tag><c><![CDATA[req_limit() = integer() | infinity <optional>]]></c></tag> + <item> + <p>Max number of simultaneous requests handled by the agent.</p> + <p>Default is <c>infinity</c>.</p> + </item> + + <tag><c><![CDATA[agent_mibs() = [string()] <optional>]]></c></tag> + <item> + <p>Specifies a list of MIBs (including path) that defines which MIBs + are initially loaded into the SNMP master agent. </p> + <p>Note that the following will always be loaded:</p> + <list type="bulleted"> + <item>version v1: <c>STANDARD-MIB</c></item> + <item>version v2: <c>SNMPv2</c></item> + <item>version v3: <c>SNMPv2</c>, <c>SNMP-FRAMEWORK-MIB</c> + and <c>SNMP-MPD-MIB</c></item> + </list> + <p>Default is <c>[]</c>.</p> + </item> + + <tag><c><![CDATA[mib_storage() = ets | {ets, Dir} | {ets, Dir, Action} | dets | {dets, Dir} | {dets, Dir, Action} | mnesia | {mnesia, Nodes} | {mnesia, Nodes, Action} <optional>]]></c></tag> + <item> + <p>Specifies how info retrieved from the mibs will be stored.</p> + <p>If <c>mib_storage</c> is <c>{ets, Dir}</c>, the table will also be + stored on file. If <c>Dir</c> is <c>default</c>, then <c>db_dir</c> + will be used.</p> + <p>If <c>mib_storage</c> is <c>dets</c> or if <c>Dir</c> is + <c>default</c>, then <c>db_dir</c> will be used for <c>Dir</c>.</p> + <p>If <c>mib_storage</c> is <c>mnesia</c> then <c>erlang:nodes()</c> + will be used for <c>Nodes</c>.</p> + <p>Default is <c>ets</c>. </p> + <p><c>Dir = default | string()</c>. Dir is the directory where the + files will be stored. If <c>default</c>, then <c>db_dir</c> will be + used.</p> + <p><c>Nodes = visible | connected | [node()]</c>. + <c>Nodes = visible</c> is translated to + <c>erlang:nodes(visible)</c>. + <c>Nodes = connected</c> is translated to + <c>erlang:nodes(connected)</c>. + If <c>Nodes = []</c> then the own node is assumed.</p> + <p><c>Action = clear | keep</c>. Default is <c>keep</c>. + <c>Action</c> is used to specify what shall be done if the + mnesia/dets table already exist.</p> + </item> + + <tag><c><![CDATA[mib_server() = [mib_server_opt()] <optional>]]></c></tag> + <item> + <p><c>mib_server_opt() = {mibentry_override, mibentry_override()} | {trapentry_override, trapentry_override()} | {verbosity, verbosity()} | {cache, mibs_cache()}</c></p> + <p>Defines options specific for the SNMP agent mib server. </p> + <p>For defaults see the options in <c>mib_server_opt()</c>.</p> + </item> + + <tag><c><![CDATA[mibentry_override() = bool() <optional>]]></c></tag> + <item> + <p>If this value is false, then when loading a mib each mib- + entry is checked prior to installation of the mib. + The purpose of the check is to prevent that the same symbolic + mibentry name is used for different oid's.</p> + <p>Default is <c>false</c>.</p> + </item> + + <tag><c><![CDATA[trapentry_override() = bool() <optional>]]></c></tag> + <item> + <p>If this value is false, then when loading a mib each trap + is checked prior to installation of the mib. + The purpose of the check is to prevent that the same symbolic + trap name is used for different trap's.</p> + <p>Default is <c>false</c>.</p> + </item> + + <tag><c><![CDATA[mibs_cache() = bool() | mibs_cache_opts() <optional>]]></c></tag> + <item> + <p>Shall the agent utilize the mib server lookup cache or not.</p> + <p>Default is <c>true</c> (in which case the <c>mibs_cache_opts()</c> + default values apply).</p> + </item> + + <tag><c><![CDATA[mibs_cache_opts() = [mibs_cache_opt()] <optional>]]></c></tag> + <item> + <p><c>mibs_cache_opt() = {autogc, mibs_cache_autogc()} | {gclimit, mibs_cache_gclimit()} | {age, mibs_cache_age()}</c></p> + <p>Defines options specific for the SNMP agent mib server cache. </p> + <p>For defaults see the options in <c>mibs_cache_opt()</c>.</p> + </item> + + <tag><c><![CDATA[mibs_cache_autogc() = bool() <optional>]]></c></tag> + <item> + <p>Defines if the mib server shall perform cache gc automatically or + leave it to the user (see + <seealso marker="snmpa#gc_mibs_cache">gc_mibs_cache/0,1,2,3</seealso>). </p> + <p>Default is <c>false</c>.</p> + </item> + + <tag><c><![CDATA[mibs_cache_age() = integer() > 0 <optional>]]></c></tag> + <item> + <p>Defines how old the entries in the cache will be allowed before + they are GC'ed (assuming GC is performed). Each entry in the + cache is "touched" whenever it is accessed. </p> + <p>The age is defined in milliseconds. </p> + <p>Default is <c>10 timutes</c>.</p> + </item> + + <tag><c><![CDATA[mibs_cache_gclimit() = integer() > 0 | infinity <optional>]]></c></tag> + <item> + <p>When performing a GC, this is the max number of cache entries + that will be deleted from the cache. </p> + <p>The reason for having this limit is that if the cache is + large, the GC can potentially take a long time, during which + the agent is locked. </p> + <p>Default is <c>100</c>.</p> + </item> + + <tag><c><![CDATA[error_report_mod() = atom() <optional>]]></c></tag> + <item> + <p>Defines an error report module, implementing the + <seealso marker="snmpa_error_report">snmpa_error_report</seealso> + behaviour. Two modules are provided with the toolkit: + <c>snmpa_error_logger</c> and <c>snmpa_error_io</c>.</p> + <p>Default is <c>snmpa_error_logger</c>.</p> + </item> + + <tag><c>symbolic_store() = [symbolic_store_opt()]</c></tag> + <item> + <p><c>symbolic_store_opt() = {verbosity, verbosity()}</c></p> + <p>Defines options specific for the SNMP agent symbolic store. </p> + <p>For defaults see the options in <c>symbolic_store_opt()</c>.</p> + </item> + + <tag><c>target_cache() = [target_cache_opt()]</c></tag> + <item> + <p><c>target_cache_opt() = {verbosity, verbosity()}</c></p> + <p>Defines options specific for the SNMP agent target cache. </p> + <p>For defaults see the options in <c>target_cache_opt()</c>.</p> + </item> + <tag><c><![CDATA[agent_config() = [agent_config_opt()] <mandatory>]]></c></tag> + <item> + <p><c>agent_config_opt() = {dir, agent_config_dir()} | {force_load, force_load()} | {verbosity, verbosity()}</c></p> + <p>Defines specific config related options for the SNMP agent. </p> + <p>For defaults see the options in <c>agent_config_opt()</c>.</p> + </item> + + <tag><c><![CDATA[agent_config_dir = dir() <mandatory>]]></c></tag> + <item> + <p>Defines where the SNMP agent configuration files are stored.</p> + </item> + + <tag><c><![CDATA[force_load() = bool() <optional>]]></c></tag> + <item> + <p>If <c>true</c> the configuration files are re-read + during start-up, and the contents of the configuration + database ignored. Thus, if <c>true</c>, changes to + the configuration database are lost upon reboot of the + agent. </p> + <p>Default is <c>false</c>.</p> + </item> + </taglist> + + <p>Manager specific config options and types:</p> + <taglist> + <tag><c><![CDATA[server() = [server_opt()] <optional>]]></c></tag> + <item> + <p><c>server_opt() = {timeout, server_timeout()} | {verbosity, verbosity()}</c></p> + <p>Specifies the options for the manager server process.</p> + <p>Default is <c>silence</c>.</p> + </item> + <tag><c><![CDATA[server_timeout() = integer() <optional>]]></c></tag> + <item> + <p>Asynchroneous request cleanup time. For every requests, + some info is stored internally, in order to be able to + deliver the reply (when it arrives) to the proper destination. + If the reply arrives, this info will be deleted. But if + there is no reply (in time), the info has to be deleted + after the <em>best before</em> time has been passed. + This cleanup will be performed at regular intervals, defined + by the <c>server_timeout()</c> time. + The information will have a <em>best before</em> time, + defined by the <c>Expire</c> time given when calling the + request function (see + <seealso marker="snmpm#async_get">async_get</seealso>, + <seealso marker="snmpm#async_get_next">async_get_next</seealso> and + <seealso marker="snmpm#async_set">async_set</seealso>).</p> + <p>Time in milli-seconds.</p> + <p>Default is <c>30000</c>.</p> + </item> + + <tag><c><![CDATA[manager_config() = [manager_config_opt()] <mandatory>]]></c></tag> + <item> + <p><c>manager_config_opt() = {dir, manager_config_dir()} | {db_dir, manager_db_dir()} | {db_init_error, db_init_error()} | {repair, manager_repair()} | {auto_save, manager_auto_save()} | {verbosity, verbosity()}</c></p> + <p>Defines specific config related options for the SNMP manager. </p> + <p>For defaults see the options in <c>manager_config_opt()</c>.</p> + </item> + + <tag><c><![CDATA[manager_config_dir = dir() <mandatory>]]></c></tag> + <item> + <p>Defines where the SNMP manager configuration files are stored.</p> + </item> + + <tag><c><![CDATA[manager_db_dir = dir() <mandatory>]]></c></tag> + <item> + <p>Defines where the SNMP manager store persistent data.</p> + </item> + + <tag><c><![CDATA[manager_repair() = false | true | force <optional>]]></c></tag> + <item> + <p>Defines the repair option for the persistent database (if + and how the table is repaired when opened). </p> + <p>Default is <c>true</c>.</p> + </item> + + <tag><c><![CDATA[manager_auto_save() = integer() | infinity <optional>]]></c></tag> + <item> + <p>The auto save interval. The table is flushed to disk + whenever not accessed for this amount of time.</p> + <p>Default is <c>5000</c>.</p> + </item> + + <tag><c><![CDATA[manager_irb() = auto | user | {user, integer()} <optional>]]></c></tag> + <item> + <p>This option defines how the manager will handle the sending of + response (acknowledgment) to received inform-requests. </p> + <list type="bulleted"> + <item> + <p><c>auto</c> - The manager will autonomously send response + (acknowledgment> to inform-request messages.</p> + </item> + <item> + <p><c>{user, integer()}</c> - The manager will send response + (acknowledgment) to inform-request messages when the + <seealso marker="snmpm_user#handle_inform">handle_inform</seealso> + function completes. The integer is the time, in milli-seconds, + that the manager will consider the stored inform-request info + valid.</p> + </item> + <item> + <p><c>user</c> - Same as <c>{user, integer()}</c>, except that + the default time, 15000 milli-seconds, is used.</p> + </item> + </list> + <p>See + <seealso marker="snmpm_network_interface">snmpm_network_interface</seealso>, + <seealso marker="snmpm_user">handle_inform</seealso> and + <seealso marker="snmp_manager_netif">definition of the manager net if</seealso> for more info.</p> + <p>Default is <c>auto</c>.</p> + </item> + + <tag><c><![CDATA[manager_mibs() = [string()] <optional>]]></c></tag> + <item> + <p>Specifies a list of MIBs (including path) and defines which MIBs + are initially loaded into the SNMP manager. </p> + <p>Default is <c>[]</c>.</p> + </item> + + <tag><c><![CDATA[manager_net_if() = [manager_net_if_opt()] <optional>]]></c></tag> + <item> + <p><c>manager_net_if_opt() = {module, manager_net_if_module()} | + {verbosity, verbosity()} | + {options, manager_net_if_options()}</c></p> + <p>Defines options specific for the SNMP manager network interface + entity. </p> + <p>For defaults see the options in <c>manager_net_if_opt()</c>.</p> + </item> + + <tag><c><![CDATA[manager_net_if_options() = [manager_net_if_option()] <optional>]]></c></tag> + <item> + <p><c>manager_net_if_option() = {bind_to, bind_to()} | + {sndbuf, sndbuf()} | + {recbuf, recbuf()} | + {no_reuse, no_reuse()} | + {filter, manager_net_if_filter_options()}</c></p> + <p>These options are actually specific to the used module. + The ones shown here are applicable to the default + <c>manager_net_if_module()</c>.</p> + <p>For defaults see the options in <c>manager_net_if_option()</c>.</p> + </item> + + <tag><c><![CDATA[manager_net_if_module() = atom() <optional>]]></c></tag> + <item> + <p>Module which handles the network interface part for the + SNMP manager. Must implement the + <seealso marker="snmpm_network_interface">snmpm_network_interface</seealso> behaviour.</p> + <p>Default is <c>snmpm_net_if</c>.</p> + </item> + + <tag><c><![CDATA[manager_net_if_filter_options() = [manager_net_if_filter_option()] <optional>]]></c></tag> + <item> + <p><c>manager_net_if_filter_option() = {module, manager_net_if_filter_module()}</c></p> + <p>These options are actually specific to the used module. + The ones shown here are applicable to the default + <c><![CDATA[manager_net_if_filter_module()]]></c>.</p> + <p>For defaults see the options in + <c>manager_net_if_filter_option()</c>.</p> + </item> + + <tag><c><![CDATA[manager_net_if_filter_module() = atom() <optional>]]></c></tag> + <item> + <p>Module which handles the network interface filter part for the + SNMP manager. Must implement the + <seealso marker="snmpm_network_interface_filter">snmpm_network_interface_filter</seealso> behaviour.</p> + <p>Default is <c>snmpm_net_if_filter</c>.</p> + </item> + + <tag><c><![CDATA[def_user_module() = atom() <optional>]]></c></tag> + <item> + <p>The module implementing the default user. See the + <seealso marker="snmpm_user">snmpm_user</seealso> behaviour.</p> + <p>Default is <c>snmpm_user_default</c>.</p> + </item> + + <tag><c><![CDATA[def_user_data() = term() <optional>]]></c></tag> + <item> + <p>Data for the default user. Passed to the user when calling + the callback functions.</p> + <p>Default is <c>undefined</c>.</p> + </item> + </taglist> + + <p>Common config types:</p> + <taglist> + <tag><c>restart_type() = permanent | transient | temporary</c></tag> + <item> + <p>See <seealso marker="stdlib:supervisor#child_spec">supervisor</seealso> + documentation for more info.</p> + <p>Default is <c>permanent</c> for the agent and <c>transient</c> + for the manager.</p> + </item> + + <tag><c>db_init_error() = terminate | create</c></tag> + <item> + <p>Defines what to do if the agent is unable to open an + existing database file. <c>terminate</c> means that the + agent/manager will terminate and <c>create</c> means that the + agent/manager will remove the faulty file(s) and create new ones.</p> + <p>Default is <c>terminate</c>.</p> + </item> + + <tag><c><![CDATA[priority() = atom() <optional>]]></c></tag> + <item> + <p>Defines the Erlang priority for all SNMP processes.</p> + <p>Default is <c>normal</c>.</p> + </item> + + <tag><c><![CDATA[versions() = [version()] <optional>]]></c></tag> + <item> + <p><c>version() = v1 | v2 | v3</c></p> + <p>Which SNMP versions shall be accepted/used.</p> + <p>Default is <c>[v1,v2,v3]</c>.</p> + </item> + + <tag><c><![CDATA[verbosity() = silence | info | log | debug | trace <optional>]]></c></tag> + <item> + <p>Verbosity for a SNMP process. This specifies now much debug info + is printed.</p> + <p>Default is <c>silence</c>.</p> + </item> + + <tag><c><![CDATA[bind_to() = bool() <optional>]]></c></tag> + <item> + <p>If <c>true</c>, net_if binds to the IP address. + If <c>false</c>, net_if listens on any IP address on the host + where it is running. </p> + <p>Default is <c>false</c>.</p> + </item> + + <tag><c><![CDATA[no_reuse() = bool() <optional>]]></c></tag> + <item> + <p>If <c>true</c>, net_if does not specify that the IP + and port address should be reusable. If <c>false</c>, + the address is set to reusable. </p> + <p>Default is <c>false</c>.</p> + </item> + + <tag><c><![CDATA[recbuf() = integer() <optional>]]></c></tag> + <item> + <p>Receive buffer size. </p> + <p>Default value is defined by <c>gen_udp</c>.</p> + </item> + <tag><c><![CDATA[sndbuf() = integer() <optional>]]></c></tag> + <item> + <p>Send buffer size. </p> + <p>Default value is defined by <c>gen_udp</c>.</p> + </item> + + <tag><c><![CDATA[note_store() = [note_store_opt()] <optional>]]></c></tag> + <item> + <p><c>note_store_opt() = {timeout, note_store_timeout()} | {verbosity, verbosity()}</c></p> + <p>Specifies the options for the SNMP note store.</p> + <p>For defaults see the options in <c>note_store_opt()</c>.</p> + </item> + + <tag><c><![CDATA[note_store_timeout() = integer() <optional>]]></c></tag> + <item> + <p>Note cleanup time. When storing a note in the note store, + each note is given lifetime. Every <c>timeout</c> the note_store + process performs a GC to remove the expired note's. Time in + milli-seconds.</p> + <p>Default is <c>30000</c>.</p> + </item> + + <tag><c><![CDATA[audit_trail_log() [audit_trail_log_opt()] <optional>]]></c></tag> + <item> + <p><c>audit_trail_log_opt() = {type, atl_type()} | {dir, atl_dir()} | {size, atl_size()} | {repair, atl_repair()}</c></p> + <p>If present, this option specifies the options for the + <em>audit trail logging</em>. The <c>disk_log</c> module is used + to maintain a wrap log. If present, the <c>dir</c> and + <c>size</c> options are mandatory.</p> + <p>If not present, audit trail logging is not used.</p> + </item> + + <tag><c><![CDATA[atl_type() = read | write | read_write <optional>]]></c></tag> + <item> + <p>Specifies what type of an audit trail log should be used. + The effect of the type is actually different for the the agent + and the manager. </p> + <p>For the agent:</p> + <list type="bulleted"> + <item>If <c>write</c> is specified, only set requests are logged. </item> + <item>If <c>read</c> is specified, only get requests are logged. </item> + <item>If <c>read_write</c>, all requests are logged. </item> + </list> + <p>For the manager:</p> + <list type="bulleted"> + <item>If <c>write</c> is specified, only sent messages are logged. </item> + <item>If <c>read</c> is specified, only received messages are logged. </item> + <item>If <c>read_write</c>, both outgoing and incoming messages are + logged. </item> + </list> + <p>Default is <c>read_write</c>.</p> + </item> + + <tag><c><![CDATA[atl_dir = dir() <mandatory>]]></c></tag> + <item> + <p>Specifies where the audit trail log should be stored.</p> + <p>If <c>audit_trail_log</c> specifies that logging should take + place, this parameter <em>must</em> be defined.</p> + </item> + + <tag><c><![CDATA[atl_size() = {integer(), integer()} <mandatory>]]></c></tag> + <item> + <p>Specifies the size of the audit + trail log. This parameter is sent to <c>disk_log</c>. </p> + <p>If <c>audit_trail_log</c> specifies that logging should + take place, this parameter <em>must</em> be defined.</p> + </item> + + <tag><c><![CDATA[atl_repair() = true | false | truncate | snmp_repair <optional>]]></c></tag> + <item> + <p>Specifies if and how the audit trail log shall be repaired + when opened. Unless this parameter has the value <c>snmp_repair</c> + it is sent to <c>disk_log</c>. If, on the other hand, the value is + <c>snmp_repair</c>, snmp attempts to handle certain faults on it's + own. And even if it cannot repair the file, it does not truncate it + directly, but instead <em>moves it aside</em> for later off-line + analysis.</p> + <p>Default is <c>true</c>.</p> + </item> + </taglist> + </section> + + <section> + <title>Modifying the Configuration Files</title> + <p>To to start the application (agent and/or manager), the + configuration files must be modified and there are two ways + of doing this. Either edit the files manually, or run the + configuration tool as follows.</p> + <p>If authentication or encryption is used (SNMPv3 only), start + the <c>crypto</c> application.</p> + <pre> +1> snmp:config(). + +Simple SNMP configuration tool (version 4.0) +------------------------------------------------ +Note: Non-trivial configurations still has to be + done manually. IP addresses may be entered + as dront.ericsson.se (UNIX only) or + 123.12.13.23 +------------------------------------------------ + +Configure an agent (y/n)? [y] + +Agent system config: +-------------------- +1. Agent process priority (low/normal/high) [normal] +2. What SNMP version(s) should be used (1,2,3,1&2,1&2&3,2&3)? [3] 1&2&3 +3. Configuration directory (absolute path)? [/ldisk/snmp] /ldisk/snmp/agent/conf +4. Config verbosity (silence/info/log/debug/trace)? [silence] +5. Database directory (absolute path)? [/ldisk/snmp] /ldisk/snmp/agent/db +6. Mib storage type (ets/dets/mnesia)? [ets] +7. Target cache verbosity (silence/info/log/debug/trace)? [silence] +8. Symbolic store verbosity (silence/info/log/debug/trace)? [silence] +9. Local DB verbosity (silence/info/log/debug/trace)? [silence] +10. Local DB repair (true/false/force)? [true] +11. Local DB auto save (infinity/milli seconds)? [5000] +12. Error report module? [snmpa_error_logger] +13. Agent type (master/sub)? [master] +14. Master-agent verbosity (silence/info/log/debug/trace)? [silence] log +15. Shall the agent re-read the configuration files during startup + (and ignore the configuration database) (true/false)? [true] +16. Multi threaded agent (true/false)? [false] true +17. Check for duplicate mib entries when installing a mib (true/false)? [false] +18. Check for duplicate trap names when installing a mib (true/false)? [false] +19. Mib server verbosity (silence/info/log/debug/trace)? [silence] +20. Mib server cache (true/false)? [true] +21. Note store verbosity (silence/info/log/debug/trace)? [silence] +22. Note store GC timeout? [30000] +23. Shall the agent use an audit trail log (y/n)? [n] y +23b. Audit trail log type (write/read_write)? [read_write] +23c. Where to store the audit trail log? [/ldisk/snmp] /ldisk/snmp/agent/log +23d. Max number of files? [10] +23e. Max size (in bytes) of each file? [10240] +23f. Audit trail log repair (true/false/truncate)? [true] +24. Which network interface module shall be used? [snmpa_net_if] +25. Network interface verbosity (silence/info/log/debug/trace)? [silence] log +25a. Bind the agent IP address (true/false)? [false] +25b. Shall the agents IP address and port be not reusable (true/false)? [false] +25c. Agent request limit (used for flow control) (infinity/pos integer)? [infinity] 32 +25d. Receive buffer size of the agent (in bytes) (default/pos integer)? [default] +25e. Send buffer size of the agent (in bytes) (default/pos integer)? [default] +25f. Do you wish to specify a network interface filter module (or use default) [default] + +Agent snmp config: +------------------ +1. System name (sysName standard variable) [bmk's agent] +2. Engine ID (snmpEngineID standard variable) [bmk's engine] +3. Max message size? [484] +4. The UDP port the agent listens to. (standard 161) [4000] +5. IP address for the agent (only used as id + when sending traps) [127.0.0.1] +6. IP address for the manager (only this manager + will have access to the agent, traps are sent + to this one) [127.0.0.1] +7. To what UDP port at the manager should traps + be sent (standard 162)? [5000] +8. Do you want a none- minimum- or semi-secure configuration? + Note that if you chose v1 or v2, you won't get any security for these + requests (none, minimum, semi_des, semi_aes) [minimum] +making sure crypto server is started... +8b. Give a password of at least length 8. It is used to generate + private keys for the configuration: kalle-anka +9. Current configuration files will now be overwritten. Ok (y/n)? [y] + +- - - - - - - - - - - - - +Info: 1. SecurityName "initial" has noAuthNoPriv read access + and authenticated write access to the "restricted" + subtree. + 2. SecurityName "all-rights" has noAuthNoPriv read/write + access to the "internet" subtree. + 3. Standard traps are sent to the manager. + 4. Community "public" is mapped to security name "initial". + 5. Community "all-rights" is mapped to security name "all-rights". +The following agent files were written: agent.conf, community.conf, +standard.conf, target_addr.conf, target_params.conf, +notify.conf, vacm.conf and usm.conf +- - - - - - - - - - - - - + +Configure a manager (y/n)? [y] + +Manager system config: +---------------------- +1. Manager process priority (low/normal/high) [normal] +2. What SNMP version(s) should be used (1,2,3,1&2,1&2&3,2&3)? [3] 1&2&3 +3. Configuration directory (absolute path)? [/ldisk/snmp] /ldisk/snmp/manager/conf +4. Config verbosity (silence/info/log/debug/trace)? [silence] log +5. Database directory (absolute path)? [/ldisk/snmp] /ldisk/snmp/manager/db +6. Database repair (true/false/force)? [true] +7. Database auto save (infinity/milli seconds)? [5000] +8. Inform request behaviour (auto/user)? [auto] +9. Server verbosity (silence/info/log/debug/trace)? [silence] log +10. Server GC timeout? [30000] +11. Note store verbosity (silence/info/log/debug/trace)? [silence] +12. Note store GC timeout? [30000] +13. Which network interface module shall be used? [snmpm_net_if] +14. Network interface verbosity (silence/info/log/debug/trace)? [silence] log +15. Bind the manager IP address (true/false)? [false] +16. Shall the manager IP address and port be not reusable (true/false)? [false] +17. Receive buffer size of the manager (in bytes) (default/pos integer)? [default] +18. Send buffer size of the manager (in bytes) (default/pos integer)? [default] +19. Shall the manager use an audit trail log (y/n)? [n] y +19b. Where to store the audit trail log? [/ldisk/snmp] /ldisk/snmp/manager/log +19c. Max number of files? [10] +19d. Max size (in bytes) of each file? [10240] +19e. Audit trail log repair (true/false/truncate)? [true] +20. Do you wish to assign a default user [yes] or use + the default settings [no] (y/n)? [n] + +Manager snmp config: +-------------------- +1. Engine ID (snmpEngineID standard variable) [bmk's engine] +2. Max message size? [484] +3. IP address for the manager (only used as id + when sending requests) [127.0.0.1] +4. Port number (standard 162)? [5000] +5. Configure a user of this manager (y/n)? [y] +5b. User id? kalle +5c. User callback module? snmpm_user_default +5d. User (callback) data? [undefined] +5. Configure a user of this manager (y/n)? [y] n +6. Configure an agent handled by this manager (y/n)? [y] +6b. User id? kalle +6c. Target name? [bmk's agent] +6d. Version (1/2/3)? [1] 3 +6e. Community string ? [public] +6f. Engine ID (snmpEngineID standard variable) [bmk's engine] +6g. IP address for the agent [127.0.0.1] +6h. The UDP port the agent listens to. (standard 161) [4000] +6i. Retransmission timeout (infinity/pos integer)? [infinity] +6j. Max message size? [484] +6k. Security model (any/v1/v2c/usm)? [any] usm +6l. Security name? ["initial"] +6m. Security level (noAuthNoPriv/authNoPriv/authPriv)? [noAuthNoPriv] authPriv +6. Configure an agent handled by this manager (y/n)? [y] n +7. Configure an usm user handled by this manager (y/n)? [y] +7a. Engine ID [bmk's engine] +7b. User name? hobbes +7c. Security name? [hobbes] +7d. Authentication protocol (no/sha/md5)? [no] sha +7e Authentication [sha] key (length 0 or 20)? [""] [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] +7d. Priv protocol (no/des/aes)? [no] des +7f Priv [des] key (length 0 or 16)? [""] 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 +7. Configure an usm user handled by this manager (y/n)? [y] n +8. Current configuration files will now be overwritten. Ok (y/n)? [y] + +- - - - - - - - - - - - - +The following manager files were written: manager.conf, agents.conf , users.conf and usm.conf +- - - - - - - - - - - - - + +-------------------- +Configuration directory for system file (absolute path)? [/ldisk/snmp] +ok + </pre> + </section> + + <section> + <title>Starting the application</title> + <p>Start Erlang with the command:</p> + <code type="none"> +erl -config /tmp/snmp/sys + </code> + <p>If authentication or encryption is used (SNMPv3 only), start + the <c>crypto</c> application. If this step is forgotten, the + agent will not start, but report a + <c>{config_error,{unsupported_crypto,_}}</c> error.</p> + <pre> +1> <input>application:start(crypto).</input> +ok + </pre> + <pre> +2> <input>application:start(snmp).</input> +ok + </pre> + </section> + + <section> + <marker id="verbosity"></marker> + <title>Debugging the application</title> + <p>It is possible to debug every (non-supervisor) process of the + application (both agent and manager), possibly with the exception + of the net_if module(s), which could be supplied by a user of the + application). This is done by calling the + <c>snmpa:verbosity/2</c> and <c>snmpm:verbosity/2</c> function(s) + and/or using + <seealso marker="#configuration_params">configuration parameters</seealso>. + The verbosity itself has several <em>levels</em>: <c>silence | info | log | debug | trace</c>. For the lowest verbosity <c>silence</c>, + nothing is printed. The higher the verbosity, the more is printed. + Default value is always <c>silence</c>.</p> + <pre> +3> <input>snmpa:verbosity(master_agent, log).</input> +ok +5> <input>snmpa:verbosity(net_if, log).</input> +ok +6> +%% Example of output from the agent when a get-next-request arrives: +** SNMP NET-IF LOG: + got packet from {147,12,12,12}:5000 + +** SNMP NET-IF MPD LOG: + v1, community: all-rights + +** SNMP NET-IF LOG: + got pdu from {147,12,12,12}:5000 {pdu, 'get-next-request', + 62612569,noError,0, + [{varbind,[1,1],'NULL','NULL',1}]} + +** SNMP MASTER-AGENT LOG: + apply: snmp_generic,variable_func,[get,{sysDescr,persistent}] + +** SNMP MASTER-AGENT LOG: + returned: {value,"Erlang SNMP agent"} + +** SNMP NET-IF LOG: + reply pdu: {pdu,'get-response',62612569,noError,0, + [{varbind,[1,3,6,1,2,1,1,1,0], + 'OCTET STRING', + "Erlang SNMP agent",1}]} + +** SNMP NET-IF INFO: time in agent: 19711 mysec + </pre> + + <p>Other useful function(s) for debugging the agent are: </p> + <taglist> + <tag><c><![CDATA[snmpa:info/0,1]]></c></tag> + <item> + <p><seealso marker="snmpa#info">info</seealso> is used to retrieve a list of miscellaneous agent information.</p> + </item> + + <tag><c><![CDATA[snmpa:which_aliasnames/0]]></c></tag> + <item> + <p><seealso marker="snmpa#which_aliasnames">which_aliasnames</seealso> is used to retrieve a list of all alias-names known to the agent. </p> + </item> + + <tag><c><![CDATA[snmpa:which_tables/0]]></c></tag> + <item> + <p><seealso marker="snmpa#which_tables">which_tables</seealso> is used to retrieve a list of all (MIB) tables known to the agent. </p> + </item> + + <tag><c><![CDATA[snmpa:which_variables/0]]></c></tag> + <item> + <p><seealso marker="snmpa#which_variables">which_variables</seealso> is used to retrieve a list of all (MIB) variables known to the agent. </p> + </item> + + <tag><c><![CDATA[snmpa:which_notifications/0]]></c></tag> + <item> + <p><seealso marker="snmpa#which_notifications">which_notifications</seealso> is used to retrieve a list of all (MIB) notifications/traps known to the agent. </p> + </item> + + <tag><c><![CDATA[snmpa:restart_worker/0,1]]></c></tag> + <item> + <p><seealso marker="snmpa#restart_worker">restart_worker</seealso> is used to restart the worker process of a multi-threaded agent. </p> + </item> + + <tag><c><![CDATA[snmpa:restart_set_worker/0,1]]></c></tag> + <item> + <p><seealso marker="snmpa#restart_set_worker">restart_set_worker</seealso> is used to restart the set-worker process of a multi-threaded agent. </p> + </item> + + <tag><c><![CDATA[snmpa_local_db:print/0,1,2]]></c></tag> + <item> + <p>For example, this function can show the counters + <c>snmpInPkts</c> and <c>snmpOutPkts</c>.</p> + </item> + </taglist> + + <p>Another usefull way to debug the agent is to pretty-print the content of + some of the (MIB-) tables handled directly by the agent. This can be done + for the following tables: </p> + <taglist> + <tag><c><![CDATA[snmpCommunityTable]]></c></tag> + <item> + <p><c><![CDATA[snmp_community_mib:snmpCommunityTable(print).]]></c></p> + </item> + + <tag><c><![CDATA[snmpNotifyTable]]></c></tag> + <item> + <p><c><![CDATA[snmp_notification_mib:snmpNotifyTable(print).]]></c></p> + </item> + + <tag><c><![CDATA[snmpTargetAddrTable]]></c></tag> + <item> + <p><c><![CDATA[snmp_target_mib:snmpTargetAddrTable(print).]]></c></p> + </item> + + <tag><c><![CDATA[snmpTargetParamsTable]]></c></tag> + <item> + <p><c><![CDATA[snmp_target_mib:snmpTargetParamsTable(print).]]></c></p> + </item> + + <tag><c><![CDATA[usmUserTable]]></c></tag> + <item> + <p><c><![CDATA[snmp_user_based_sm_mib:usmUserTable(print).]]></c></p> + </item> + + </taglist> + + </section> +</chapter> + diff --git a/lib/snmp/doc/src/snmp_def_instr_functions.xml b/lib/snmp/doc/src/snmp_def_instr_functions.xml new file mode 100644 index 0000000000..f88469aeae --- /dev/null +++ b/lib/snmp/doc/src/snmp_def_instr_functions.xml @@ -0,0 +1,477 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>1997</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>Definition of Instrumentation Functions</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_def_instr_functions.xml</file> + </header> + <p>The section <em>Definition of Instrumentation Functions</em> describes + the user defined functions, which the agent calls at different times. + </p> + + <section> + <title>Variable Instrumentation</title> + <p>For scalar variables, a function <c>f(Operation, ...)</c> must + be defined. + </p> + <p>The <c>Operation</c> can be <c>new</c>, <c>delete</c>, + <c>get</c>, <c>is_set_ok</c>, <c>set</c>, or <c>undo</c>. + </p> + <p>In case of an error, all instrumentation functions may return + either an SNMPv1 or an SNMPv2 error code. If it returns an SNMPv2 + code, it is converted into an SNMPv1 code before it is sent to a + SNMPv1 manager. It is recommended to use the SNMPv2 error codes + for all instrumentation functions, as these provide more + details. See <seealso marker="snmp_app_a">Appendix A</seealso> for a + description of error code conversions. + </p> + + <section> + <title>f(new [, ExtraArgs])</title> + <p>The function <c>f(new [, ExtraArgs])</c> is called for each + variable in the MIB when the + MIB is loaded into the agent. This makes it possible to perform + necessary initialization. + </p> + <p>This function is optional. The return value is discarded.</p> + </section> + + <section> + <title>f(delete [, ExtraArgs])</title> + <p>The function <c>f(delete [, ExtraArgs])</c> is called + for each object in an MIB when the + MIB is unloaded from the agent. This makes it possible to + perform necessary clean-up. + </p> + <p>This function is optional. The return value is discarded.</p> + </section> + + <section> + <title>f(get [, ExtraArgs])</title> + <p>The function <c>f(get [, ExtraArgs])</c> is called when a + get-request or a get-next + request refers to the variable. + </p> + <p>This function is mandatory. + </p> + + <section> + <title>Valid Return Values</title> + <list type="bulleted"> + <item><c>{value, Value}</c>. The <c>Value</c> must be of + correct type, length and within ranges, otherwise + <c>genErr</c> is returned in the response PDU. If the + object is an enumerated integer, the symbolic enum value + may be used as an atom. If the object is of type BITS, the + return value shall be an integer or a list of bits that + are set. + </item> + <item><c>{noValue, noSuchName}</c>(SNMPv1) + </item> + <item><c>{noValue, noSuchObject | noSuchInstance} </c>(SNMPv2) + </item> + <item><c>genErr</c>. Used if an error occurred. Note, + this should be an internal processing error, e.g. a caused + by a programing fault somewhere. If the variable does not + exist, use <c>{noValue, noSuchName}</c> or + <c>{noValue, noSuchInstance}</c>. + </item> + </list> + </section> + </section> + + <section> + <title>f(is_set_ok, NewValue [, ExtraArgs])</title> + <p>The function <c>f(is_set_ok, NewValue [, ExtraArgs])</c> is + called in phase one of the set-request + processing so that the new value can be checked for + inconsistencies. + </p> + <p><c>NewValue</c> is guaranteed to be of the correct type, + length and within ranges, as specified in the MIB. If the + object is an enumerated integer or of type BITS, the integer + value is used. + </p> + <p>This function is optional. + </p> + <p>If this function is called, it will be called again, either + with <c>undo</c> or with <c>set</c> as first argument. + </p> + + <section> + <title>Valid return values</title> + <list type="bulleted"> + <item><c>noError</c></item> + <item><c>badValue | noSuchName | genErr</c>(SNMPv1) + </item> + <item><c>noAccess | noCreation | inconsistentValue | resourceUnavailable | inconsistentName | genErr</c>(SNMPv2)</item> + </list> + </section> + </section> + + <section> + <title>f(undo, NewValue [, ExtraArgs])</title> + <p>If an error occurred, this function is called after the + <c>is_set_ok</c> function is called. If <c>set</c> is called for + this object, <c>undo</c> is not called. + </p> + <p><c>NewValue</c> is guaranteed to be of the correct type, + length and within ranges, as specified in the MIB. If the + object is an enumerated integer or of type BITS, the integer + value is used. + </p> + <p>This function is optional. + </p> + + <section> + <title>Valid return values</title> + <list type="bulleted"> + <item><c>noError</c></item> + <item><c>genErr</c>(SNMPv1) + </item> + <item><c>undoFailed | genErr</c>(SNMPv2)</item> + </list> + </section> + </section> + + <section> + <title>f(set, NewValue [, ExtraArgs])</title> + <p>This function is called to perform the set in phase two of + the set-request processing. It is only called if the + corresponding <c>is_set_ok</c> function is present and returns + <c>noError</c>. + </p> + <p><c>NewValue</c> is guaranteed to be of the correct type, + length and within ranges, as specified in the MIB. If the + object is an enumerated integer or of type BITS, the integer + value is used. + </p> + <p>This function is mandatory. + </p> + + <section> + <title>Valid return values</title> + <list type="bulleted"> + <item><c>noError</c></item> + <item><c>genErr</c>(SNMPv1) + </item> + <item><c>commitFailed | undoFailed | genErr</c>(SNMPv2)</item> + </list> + </section> + </section> + </section> + + <section> + <title>Table Instrumentation</title> + <p>For tables, a <c>f(Operation, ...)</c> function should be + defined (the function shown is exemplified with <c>f</c>). + </p> + <p>The <c>Operation</c> can be <c>new</c>, <c>delete</c>, + <c>get</c>, <c>next</c>, <c>is_set_ok</c>, <c>undo</c> or + <c>set</c>. + </p> + <p>In case of an error, all instrumentation functions may return + either an SNMPv1 or an SNMPv2 error code. If it returns an SNMPv2 + code, it is converted into an SNMPv1 code before it is sent to a + SNMPv1 manager. It is recommended to use the SNMPv2 error codes + for all instrumentation functions, as these provide more + details. See <seealso marker="snmp_app_a">Appendix A</seealso> for a + description of error code conversions.</p> + + <section> + <title>f(new [, ExtraArgs])</title> + <p>The function <c>f(new [, ExtraArgs])</c> is called for each object in an MIB when the + MIB is loaded into the agent. This makes it possible to perform + the necessary initialization. + </p> + <p>This function is optional. The return value is discarded.</p> + </section> + + <section> + <title>f(delete [, ExtraArgs])</title> + <p>The function <c>f(delete [, ExtraArgs])</c> is called for each object in an MIB when the + MIB is unloaded from the agent. This makes it possible to + perform any necessary clean-up. + </p> + <p>This function is optional. The return value is discarded.</p> + </section> + + <section> + <title>f(get, RowIndex, Cols [, ExtraArgs])</title> + <p>The function <c>f(get, RowIndex, Cols [, ExtraArgs])</c> is + called when a get-request refers to a table. + </p> + <p>This function is mandatory. + </p> + + <section> + <title>Arguments</title> + <list type="bulleted"> + <item><c>RowIndex</c> is a list of integers which define the + key values for the row. The <c>RowIndex</c> is the list + representation (list of integers) which follow the + <c>Cols</c> integer in the OBJECT IDENTIFIER. + </item> + <item><c>Cols</c> is a list of integers which represent the + column numbers. The <c>Cols</c> are sorted by increasing + value and are guaranteed to be valid column numbers.</item> + </list> + </section> + + <section> + <title>Valid Return Values</title> + <list type="bulleted"> + <item> + <p>A list with as many elements as the <c>Cols</c> list, + where each element is the value of the corresponding + column. Each element can be:</p> + <list type="bulleted"> + <item><c>{value, Value}</c>. The <c>Value</c> must be of + correct type, length and within ranges, otherwise + <c>genErr</c> is returned in the response PDU. If the + object is an enumerated integer, the symbolic enum + value may be used (as an atom). If the object is of + type BITS, the return value shall be an integer or a + list of bits that are set. + </item> + <item><c>{noValue, noSuchName}</c>(SNMPv1) + </item> + <item><c>{noValue, noSuchObject | noSuchInstance}</c>(SNMPv2) + </item> + </list> + </item> + <item><c>{noValue, Error}</c>. If the row does not exist, + because all columns have <c>{noValue, Error}</c>), the + single tuple <c>{noValue, Error}</c> can be returned. + This is a shorthand for a list with all elements + <c>{noValue, Error}</c>. + </item> + <item><c>genErr</c>. Used if an error occurred. Note that + this should be an internal processing error, e.g. a caused + by a programing fault somewhere. If some column does not + exist, use <c>{noValue, noSuchName}</c> or + <c>{noValue, noSuchInstance}</c>. + </item> + </list> + </section> + </section> + + <section> + <title>f(get_next, RowIndex, Cols [, ExtraArgs])</title> + <p>The function <c>f(get_next, RowIndex, Cols [, ExtraArgs])</c> is + called when a get-next- or a + get-bulk-request refers to the table. + </p> + <p>The <c>RowIndex</c> argument may refer to an existing row or a + non-existing row, or it may be unspecified. The <c>Cols</c> list + may refer to inaccessible columns or non-existing columns. For + each column in the <c>Cols</c> list, the corresponding next + instance is determined, and the last part of its OBJECT + IDENTIFIER and its value is returned. + </p> + <p>This function is mandatory. + </p> + + <section> + <title>Arguments</title> + <list type="bulleted"> + <item><c>RowIndex</c> is a list of integers (possibly empty) + that defines the key values for a row. The <c>RowIndex</c> + is the list representation (list of integers), which follow + the <c>Cols</c> integer in the OBJECT IDENTIFIER. + </item> + <item><c>Cols</c> is a list of integers, greater than or + equal to zero, which represents the column numbers.</item> + </list> + </section> + + <section> + <title>Valid Return Values</title> + <list type="bulleted"> + <item> + <p>A list with as many elements as the <c>Cols</c> list + Each element can be:</p> + <list type="bulleted"> + <item><c>{NextOid, NextValue}</c>, where <c>NextOid</c> + is the lexicographic next OBJECT IDENTIFIER for the + corresponding column. This should be specified as the + OBJECT IDENTIFER part following the table entry. This + means that the first integer is the column number and + the rest is a specification of the keys. + <c>NextValue</c> is the value of this element. + </item> + <item><c>endOfTable</c> if there are no accessible + elements after this one. + </item> + </list> + </item> + <item><c>{genErr, Column}</c> where <c>Column</c> denotes + the column that caused the error. <c>Column</c> must be + one of the columns in the <c>Cols</c> list. Note that + this should be an internal processing error, e.g. a caused + by a programing fault somewhere. If some column does not + exist, you must return the next accessible element (or + <c>endOfTable</c>). + </item> + </list> + </section> + </section> + + <section> + <title>f(is_set_ok, RowIndex, Cols [, ExtraArgs])</title> + <p>The function <c>f(is_set_ok, RowIndex, Cols [, ExtraArgs])</c> + is called in phase one of the set-request + processing so that new values can be checked for + inconsistencies. + </p> + <p>If the function is called, it will be called again with + <c>undo</c>, or with <c>set</c> as first argument. + </p> + <p>This function is optional. + </p> + + <section> + <title>Arguments</title> + <list type="bulleted"> + <item><c>RowIndex</c> is a list of integers which define the + key values for the row. The <c>RowIndex</c> is the list + representation (list of integers) which follow the + <c>Cols</c> integer in the OBJECT IDENTIFIER. + </item> + <item><c>Cols</c> is a list of <c>{Column, NewValue}</c>, + where <c>Column</c> is an integer, and <c>NewValue</c> is + guaranteed to be of the correct type, length and within + ranges, as specified in the MIB. If the object is an + enumerated integer or of type BITS, the integer value is + used. The list is sorted by <c>Column</c> (increasing) and + each <c>Column</c> is guaranteed to be a valid column + number.</item> + </list> + </section> + + <section> + <title>Valid Return Values</title> + <list type="bulleted"> + <item><c>{noError, 0}</c></item> + <item><c>{Error, Column}</c>, where <c>Error</c> is the same + as for <c>is_set_ok</c> for variables, and <c>Column</c> + denotes the faulty column. <c>Column</c> must be one of the + columns in the <c>Cols</c> list.</item> + </list> + </section> + </section> + + <section> + <title>f(undo, RowIndex, Cols [, ExtraArgs])</title> + <p>If an error occurs, The function + <c>f(undo, RowIndex, Cols [, ExtraArgs])</c> is called after the + <c>is_set_ok</c> function. If <c>set</c> is called for this + object, <c>undo</c> is not called. + </p> + <p>This function is optional. + </p> + + <section> + <title>Arguments</title> + <list type="bulleted"> + <item><c>RowIndex</c> is a list of integers which define the + key values for the row. The <c>RowIndex</c> is the list + representation (list of integers) which follow the + <c>Cols</c> integer in the OBJECT IDENTIFIER. + </item> + <item><c>Cols</c> is a list of <c>{Column, NewValue}</c>, + where <c>Column</c> is an integer, and <c>NewValue</c> is + guaranteed to be of the correct type, length and within + ranges, as specified in the MIB. If the object is an + enumerated integer or of type BITS, the integer value is + used. The list is sorted by <c>Column</c> (increasing) and + each <c>Column</c> is guaranteed to be a valid column + number. + </item> + </list> + </section> + + <section> + <title>Valid Return Values</title> + <list type="bulleted"> + <item><c>{noError, 0}</c></item> + <item><c>{Error, Column}</c> where <c>Error</c> is the same + as for <c>undo</c> for variables, and <c>Column</c> denotes + the faulty column. <c>Column</c> must be one of the columns + in the <c>Cols</c> list. + </item> + </list> + </section> + </section> + + <section> + <title>f(set, RowIndex, Cols [, ExtraArgs])</title> + <p>The function <c>f(set, RowIndex, Cols [, ExtraArgs])</c> is + called to perform the set in phase two of + the set-request processing. It is only called if the + corresponding <c>is_set_ok</c> function did not exist, or + returned <c>{noError, 0}</c>. + </p> + <p>This function is mandatory. + </p> + + <section> + <title>Arguments</title> + <list type="bulleted"> + <item><c>RowIndex</c> is a list of integers that define the + key values for the row. The <c>RowIndex</c> is the list + representation (list of integers) which follow the + <c>Cols</c> integer in the OBJECT IDENTIFIER. + </item> + <item><c>Cols</c> is a list of <c>{Column, NewValue}</c>, + where <c>Column</c> is an integer, and <c>NewValue</c> is + guaranteed to be of the correct type, length and within + ranges, as specified in the MIB. If the object is an + enumerated integer or of type BITS, the integer value is + used. The list is sorted by <c>Column</c> (increasing) and + each <c>Column</c> is guaranteed to be a valid column + number. + </item> + </list> + </section> + + <section> + <title>Valid Return Values</title> + <list type="bulleted"> + <item><c>{noError, 0}</c></item> + <item><c>{Error, Column}</c> where <c>Error</c> is the same + as <c>set</c> for variables, and <c>Column</c> denotes + the faulty column. <c>Column</c> must be one of the columns + in the <c>Cols</c> list.</item> + </list> + </section> + </section> + </section> +</chapter> + diff --git a/lib/snmp/doc/src/snmp_framework_mib.xml b/lib/snmp/doc/src/snmp_framework_mib.xml new file mode 100644 index 0000000000..38fb531d3e --- /dev/null +++ b/lib/snmp/doc/src/snmp_framework_mib.xml @@ -0,0 +1,119 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>1999</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmp_framework_mib</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_framework_mib.xml</file> + </header> + <module>snmp_framework_mib</module> + <modulesummary>Instrumentation Functions for SNMP-FRAMEWORK-MIB</modulesummary> + <description> + <p>The module <c>snmp_framework_mib</c> implements instrumentation + functions for the + SNMP-FRAMEWORK-MIB, and functions for initializing and configuring the + database. + </p> + <p>The configuration files are described in the SNMP User's Manual.</p> + </description> + <funcs> + <func> + <name>configure(ConfDir) -> void()</name> + <fsummary>Configure the SNMP-FRAMEWORK-MIB</fsummary> + <type> + <v>ConfDir = string()</v> + </type> + <desc> + <p>This function is called from the supervisor at system + start-up. + </p> + <p>Inserts all data in the configuration files into the + database and destroys all old data. + </p> + <p>Thus, the data in the SNMP-FRAMEWORK-MIB, after this + function has been called, is from the configuration + files. + </p> + <p>All <c>snmp</c> counters are set to zero. + </p> + <p>If an error is found in the configuration file, it is + reported using the function <c>config_err/2</c> of the error + report module, and the function fails with reason + <c>configuration_error</c>. + </p> + <p><c>ConfDir</c> is a string which points to the directory + where the configuration files are found. + </p> + <p>The configuration file read is: <c>context.conf</c>. + </p> + </desc> + </func> + <func> + <name>init() -> void()</name> + <fsummary>Initialize the SNMP-FRAMEWORK-MIB</fsummary> + <desc> + <p>This function is called from the supervisor at system + start-up. + </p> + <p>Creates the necessary objects in the database if they do not + exist. It does not destroy any old values. + <marker id="add_context"></marker> +</p> + </desc> + </func> + <func> + <name>add_context(Ctx) -> Ret</name> + <fsummary>Added one context</fsummary> + <type> + <v>Ctx = string()</v> + <v>Ret = {ok, Key} | {error, Reason}</v> + <v>Key = term()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Adds a context to the agent config. + Equivalent to one line in the <c>context.conf</c> file.</p> + <marker id="delete_context"></marker> + </desc> + </func> + <func> + <name>delete_context(Key) -> Ret</name> + <fsummary>Delete one context</fsummary> + <type> + <v>Key = term()</v> + <v>Ret = ok | {error, Reason}</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Delete a context from the agent config.</p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmp_generic.xml b/lib/snmp/doc/src/snmp_generic.xml new file mode 100644 index 0000000000..77f3cefaa2 --- /dev/null +++ b/lib/snmp/doc/src/snmp_generic.xml @@ -0,0 +1,345 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>1996</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmp_generic</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_generic.xml</file> + </header> + <module>snmp_generic</module> + <modulesummary>Generic Functions for Implementing SNMP Objects in a Database</modulesummary> + <description> + <p>The module <c>snmp_generic</c> contains generic functions for implementing tables + (and variables) using the SNMP built-in database or Mnesia. These + default functions are used if no instrumentation function is + provided for a managed object in a MIB. Sometimes, it might be + necessary to customize the behaviour of the default functions. For + example, in some situations a trap should be sent if a row is + deleted or modified, or some hardware is to be informed, when + information is changed. + </p> + <p>The overall structure is shown in the following figure:</p> + <pre> + +---------------+ + | SNMP Agent | + +- - - - - - - -+ + | MIB | + +---------------+ + | + Association file (associates a MIB object with + | snmp_generic:table_funct + | snmp_generic:variable_func) ++--------------------------------------+ +| snmp_generic | Support for get-next, +| | RowStatus operations ++----------------------+---------------+ +| snmpa_local_db | Mnesia | Database ++--------------+-------+---------------+ +| dets | ets | +| (persistent) | | ++--------------+-------+ </pre> + <p>Each function takes the argument <c>NameDb</c>, which is a + tuple <c>{Name, Db}</c>, to identify which database the + functions should use. <c>Name</c> is the symbolic name of the + managed object as defined in the MIB, and <c>Db</c> is either + <c>volatile</c>, <c>persistent</c>, or <c>mnesia</c>. If it is + <c>mnesia</c>, all variables are stored in the Mnesia table + <c>snmp_variables</c> which must be a table with two attributes + (not a Mnesia SNMP table). The SNMP tables are stored in Mnesia + tables with the same names as the SNMP tables. All functions + assume that a Mnesia table exists with the correct name and + attributes. It is the programmer's responsibility to ensure + this. Specifically, if variables are stored in Mnesia, the table + <c>snmp_variables</c> must be created by the programmer. The + record definition for this table is defined in the file + <c>snmp/include/snmp_types.hrl</c>. + </p> + <p>If an instrumentation function in the association file for a + variable <c>myVar</c> does not have a name when compiling an + MIB, the compiler generates an entry. + </p> + <pre> +{myVar, {snmp_generic, variable_func, [{myVar, Db]}}. + </pre> + <p>And for a table:</p> + <pre> +{myTable, {snmp_generic, table_func, [{myTable, Db]}}. + </pre> + </description> + + <section> + <title>DATA TYPES</title> + <p>In the functions defined below, the following types are used:</p> + <code type="none"> +name_db() = {name(), db()} +name() = atom() +db() = volatile | persistent | mnesia +row_index() = [int()] +columns() = [column()] | [{column(), value()}] +column() = int() +value() = term() + </code> + <taglist> + <tag><c>row_index()</c></tag> + <item> + <p>Denotes the last part of the OID which specifies the + index of the row in the table (see RFC1212, 4.1.6 for + more information about INDEX). </p> + </item> + <tag><c>columns()</c></tag> + <item> + <p>Is a list of column numbers in the case of a <c>get</c> + operation, and a list of column numbers and values in the + case of a <c>set</c> operation. </p> + </item> + </taglist> + </section> + <funcs> + <func> + <name>get_status_col(Name, Cols)</name> + <name>get_status_col(NameDb, Cols) -> {ok, StatusVal} | false</name> + <fsummary>Get the value of the status column from <c>Cols</c></fsummary> + <type> + <v>Name = name()</v> + <v>NameDb = name_db()</v> + <v>Cols = columns()</v> + <v>StatusVal = term()</v> + </type> + <desc> + <p>Gets the value of the status column from <c>Cols</c>. + </p> + <p>This function can be used in instrumentation functions for + <c>is_set_ok</c>, <c>undo</c> or <c>set</c> to check if the + status column of a table is modified.</p> + </desc> + </func> + <func> + <name>get_index_types(Name)</name> + <fsummary>Get the index types of <c>Name</c></fsummary> + <type> + <v>Name = name()</v> + </type> + <desc> + <p>Gets the index types of <c>Name</c></p> + <p>This function can be used in instrumentation functions to + retrieve the index types part of the table info.</p> + </desc> + </func> + <func> + <name>table_func(Op1, NameDb)</name> + <name>table_func(Op2, RowIndex, Cols, NameDb) -> Ret</name> + <fsummary>Default instrumentation function for tables</fsummary> + <type> + <v>Op1 = new | delete </v> + <v>Op2 = get | next | is_set_ok | set | undo</v> + <v>NameDb = name_db()</v> + <v>RowIndex = row_index()</v> + <v>Cols = columns()</v> + <v>Ret = term()</v> + </type> + <desc> + <p>This is the default instrumentation function for tables. + </p> + <list type="bulleted"> + <item>The <c>new</c> function creates the table if it does + not exist, but only if the database is the SNMP internal db.</item> + <item>The <c>delete</c> function does not delete the table + from the database since unloading an MIB does not + necessarily mean that the table should be destroyed.</item> + <item>The <c>is_set_ok</c> function checks that a row which + is to be modified or deleted exists, and that a row which + is to be created does not exist.</item> + <item>The <c>undo</c> function does nothing.</item> + <item>The <c>set</c> function checks if it has enough + information to make the row change its status from + <c>notReady</c> to <c>notInService</c> (when a row has + been been set to <c>createAndWait</c>). If a row is set to + <c>createAndWait</c>, columns without a value are set to + <c>noinit</c>. If Mnesia is used, the set functionality is + handled within a transaction.</item> + </list> + <p>If it is possible for a manager to create or delete rows in + the table, there must be a <c>RowStatus</c> column for + <c>is_set_ok</c>, <c>set</c> and <c>undo</c> to work properly. + </p> + <p>The function returns according to the specification of an + instrumentation function. + </p> + </desc> + </func> + <func> + <name>table_get_elements(NameDb, RowIndex, Cols) -> Values</name> + <fsummary>Get elements in a table row</fsummary> + <type> + <v>NameDb = name_db()</v> + <v>RowIndex = row_index()</v> + <v>Cols = columns()</v> + <v>Values = [value() | noinit]</v> + </type> + <desc> + <p>Returns a list with values for all columns in <c>Cols</c>. + If a column is undefined, its value is <c>noinit</c>.</p> + </desc> + </func> + <func> + <name>table_next(NameDb, RestOid) -> RowIndex | endOfTable</name> + <fsummary>Find the next row in the table</fsummary> + <type> + <v>NameDb = name_db()</v> + <v>RestOid = [int()]</v> + <v>RowIndex = row_index()</v> + </type> + <desc> + <p>Finds the indices of the next row in the table. <c>RestOid</c> + does not have to specify an existing row.</p> + </desc> + </func> + <func> + <name>table_row_exists(NameDb, RowIndex) -> bool()</name> + <fsummary>Check if a row in a table exists</fsummary> + <type> + <v>NameDb = name_db()</v> + <v>RowIndex = row_index()</v> + </type> + <desc> + <p>Checks if a row in a table exists.</p> + </desc> + </func> + <func> + <name>table_set_elements(NameDb, RowIndex, Cols) -> bool()</name> + <fsummary>Set elements in a table row</fsummary> + <type> + <v>NameDb = name_db()</v> + <v>RowIndex = row_index()</v> + <v>Cols = columns()</v> + </type> + <desc> + <p>Sets the elements in <c>Cols</c> to the row specified by + <c>RowIndex</c>. No checks are performed on the new values. + </p> + <p>If the Mnesia database is used, this function calls + <c>mnesia:write</c> to store the values. This means that + this function must be called from within a transaction + (<c>mnesia:transaction/1</c> or <c>mnesia:dirty/1</c>).</p> + </desc> + </func> + <func> + <name>variable_func(Op1, NameDb)</name> + <name>variable_func(Op2, Val, NameDb) -> Ret</name> + <fsummary>Default instrumentation function for tables</fsummary> + <type> + <v>Op1 = new | delete | get</v> + <v>Op2 = is_set_ok | set | undo</v> + <v>NameDb = name_db()</v> + <v>Val = value()</v> + <v>Ret = term()</v> + </type> + <desc> + <p>This is the default instrumentation function for variables.</p> + <p>The <c>new</c> function creates a new variable in the + database with a default value as defined in the MIB, or a zero + value (depending on the type). </p> + <p>The <c>delete</c> function does not delete the variable from + the database. </p> + <p>The function returns according to the specification of an + instrumentation function. </p> + </desc> + </func> + <func> + <name>variable_get(NameDb) -> {value, Value} | undefined</name> + <fsummary>Get the value of a variable</fsummary> + <type> + <v>NameDb = name_db()</v> + <v>Value = value()</v> + </type> + <desc> + <p>Gets the value of a variable.</p> + </desc> + </func> + <func> + <name>variable_set(NameDb, NewVal) -> true | false</name> + <fsummary>Set a value for a variable</fsummary> + <type> + <v>NameDb = name_db()</v> + <v>NewVal = value()</v> + </type> + <desc> + <p>Sets a new value to a variable. The variable is created if + it does not exist. No checks are made on the type of the + new value. </p> + <p>Returns <c>false</c> if the <c>NameDb</c> argument + is incorrectly specified, otherwise <c>true</c>.</p> + </desc> + </func> + </funcs> + + <section> + <title>Example</title> + <p>The following example shows an implementation of a table which is + stored in Mnesia, but with some checks performed at set-request + operations. + </p> + <pre> +myTable_func(new, NameDb) -> % pass unchanged + snmp_generic:table_func(new, NameDb). + +myTable_func(delete, NameDb) -> % pass unchanged + snmp_generic:table_func(delete, NameDb). + +%% change row +myTable_func(is_set_ok, RowIndex, Cols, NameDb) -> + case snmp_generic:table_func(is_set_ok, RowIndex, + Cols, NameDb) of + {noError, 0} -> + myApplication:is_set_ok(RowIndex, Cols); + Err -> + Err + end; + +myTable_func(set, RowIndex, Cols, NameDb) -> + case snmp_generic:table_func(set, RowIndex, Cols, + NameDb), + {noError, 0} -> + % Now the row is updated, tell the application + myApplication:update(RowIndex, Cols); + Err -> + Err + end; + +myTable_func(Op, RowIndex, Cols, NameDb) -> % pass unchanged + snmp_generic:table_func(Op, RowIndex, Cols, NameDb). + </pre> + <p>The <c>.funcs</c> file would look like: + </p> + <pre> +{myTable, {myModule, myTable_func, [{myTable, mnesia}]}}. + </pre> + </section> + +</erlref> + diff --git a/lib/snmp/doc/src/snmp_impl_example_agent.xml b/lib/snmp/doc/src/snmp_impl_example_agent.xml new file mode 100644 index 0000000000..3bba6467ed --- /dev/null +++ b/lib/snmp/doc/src/snmp_impl_example_agent.xml @@ -0,0 +1,510 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>1997</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>Agent Implementation Example</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_impl_example_agent.xml</file> + </header> + <p>This <em>Implementation Example</em> section describes how an + MIB can be implemented with the SNMP Development Toolkit. </p> + <p>The example shown can be found in the toolkit distribution. </p> + <p>The agent is configured with the configuration tool, using + default suggestions for everything but the manager node. </p> + + <section> + <title>MIB</title> + <p>The MIB used in this example is called EX1-MIB. It contains two + objects, a variable with a name and a table with friends. + </p> + <code type="none"> +EX1-MIB DEFINITIONS ::= BEGIN + + IMPORTS + RowStatus FROM STANDARD-MIB + DisplayString FROM RFC1213-MIB + OBJECT-TYPE FROM RFC-1212 + ; + + example1 OBJECT IDENTIFIER ::= { experimental 7 } + + myName OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..255)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "My own name" + ::= { example1 1 } + + friendsTable OBJECT-TYPE + SYNTAX SEQUENCE OF FriendsEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A list of friends." + ::= { example1 4 } + + friendsEntry OBJECT-TYPE + SYNTAX FriendsEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "" + INDEX { fIndex } + ::= { friendsTable 1 } + + FriendsEntry ::= + SEQUENCE { + fIndex + INTEGER, + fName + DisplayString, + fAddress + DisplayString, + fStatus + RowStatus } + + fIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "number of friend" + ::= { friendsEntry 1 } + + fName OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..255)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Name of friend" + ::= { friendsEntry 2 } + fAddress OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..255)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Address of friend" + ::= { friendsEntry 3 } + fStatus OBJECT-TYPE + SYNTAX RowStatus + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The status of this conceptual row." + ::= { friendsEntry 4 } + fTrap TRAP-TYPE + ENTERPRISE example1 + VARIABLES { myName, fIndex } + DESCRIPTION + "This trap is sent when something happens to + the friend specified by fIndex." + ::= 1 +END + </code> + </section> + + <section> + <title>Default Implementation</title> + <p>Without writing any instrumentation functions, we can compile + the MIB and use the default implementation of it. Recall that MIBs + imported by "EX1-MIB.mib" must be present and compiled in the + current directory ("./STANDARD-MIB.bin","./RFC1213-MIB.bin") when + compiling. + </p> + <pre> +unix> <input>erl -config ./sys</input> +1> <input>application:start(snmp).</input> +ok +2> <input>snmpc:compile("EX1-MIB").</input> +No accessfunction for 'friendsTable', using default. +No accessfunction for 'myName', using default. +{ok, "EX1-MIB.bin"} +3> <input>snmpa:load_mibs(snmp_master_agent, ["EX1-MIB"]).</input> +ok + </pre> + <p>This MIB is now loaded into the agent, and a manager can ask + questions. As an example of this, we start another Erlang system + and the simple Erlang manager in the toolkit: + </p> + <pre> +1> <input>snmp_test_mgr:start_link([{agent,"dront.ericsson.se"},{community,"all-rights"},</input> + %% making it understand symbolic names: {mibs,["EX1-MIB","STANDARD-MIB"]}]). +{ok, <0.89.0>} +%% a get-next request with one OID. +2> <input>snmp_test_mgr:gn([[1,3,6,1,3,7]]).</input> +ok +* Got PDU: +[myName,0] = [] +%% A set-request (now using symbolic names for convenience) +3> <input>snmp_test_mgr:s([{[myName,0], "Martin"}]).</input> +ok +* Got PDU: +[myName,0] = "Martin" +%% Try the same get-next request again +4> <input>snmp_test_mgr:gn([[1,3,6,1,3,7]]).</input> +ok +* Got PDU: +[myName,0] = "Martin" +%% ... and we got the new value. +%% you can event do row operations. How to add a row: +5> <input>snmp_test_mgr:s([{[fName,0], "Martin"}, {[fAddress,0],"home"}, {[fStatus,0],4}]).</input> + %% createAndGo +ok +* Got PDU: +[fName,0] = "Martin" +[fAddress,0] = "home" +[fStatus,0] = 4 +6> <input>snmp_test_mgr:gn([[myName,0]]).</input> +ok +* Got PDU: +[fName,0] = "Martin" +7> <input>snmp_test_mgr:gn().</input> +ok +* Got PDU: +[fAddress,0] = "home" +8> <input>snmp_test_mgr:gn().</input> +ok +* Got PDU: +[fStatus,0] = 1 +9> + </pre> + </section> + + <section> + <title>Manual Implementation</title> + <p>The following example shows a "manual" implementation of the + EX1-MIB in Erlang. In this example, the values of the objects are + stored in an Erlang server. The server has a 2-tuple as loop + data, where the first element is the value of variable + <c>myName</c>, and the second is a sorted list of rows in the + table <c>friendsTable</c>. Each row is a 4-tuple. + </p> + <note> + <p>There are more efficient ways to create tables manually, i.e. + to use the module <c>snmp_index</c>.</p> + </note> + + <section> + <title>Code</title> + <code type="none"><![CDATA[ +-module(ex1). +-author('[email protected]'). +%% External exports +-export([start/0, my_name/1, my_name/2, friends_table/3]). +%% Internal exports +-export([init/0]). +-define(status_col, 4). +-define(active, 1). +-define(notInService, 2). +-define(notReady, 3). +-define(createAndGo, 4). % Action; written, not read +-define(createAndWait, 5). % Action; written, not read +-define(destroy, 6). % Action; written, not read +start() -> + spawn(ex1, init, []). +%%---------------------------------------------------------------- +%% Instrumentation function for variable myName. +%% Returns: (get) {value, Name} +%% (set) noError +%%---------------------------------------------------------------- +my_name(get) -> + ex1_server ! {self(), get_my_name}, + Name = wait_answer(), + {value, Name}. +my_name(set, NewName) -> + ex1_server ! {self(), {set_my_name, NewName}}, + noError. +%%---------------------------------------------------------------- +%% Instrumentation function for table friendsTable. +%%---------------------------------------------------------------- +friends_table(get, RowIndex, Cols) -> + case get_row(RowIndex) of + {ok, Row} -> + get_cols(Cols, Row); + _ -> + {noValue, noSuchInstance} + end; +friends_table(get_next, RowIndex, Cols) -> + case get_next_row(RowIndex) of + {ok, Row} -> + get_next_cols(Cols, Row); + _ -> + case get_next_row([]) of + {ok, Row} -> + % Get next cols from first row. + NewCols = add_one_to_cols(Cols), + get_next_cols(NewCols, Row); + _ -> + end_of_table(Cols) + end + end; +%%---------------------------------------------------------------- +%% If RowStatus is set, then: +%% *) If set to destroy, check that row does exist +%% *) If set to createAndGo, check that row does not exist AND +%% that all columns are given values. +%% *) Otherwise, error (for simplicity). +%% Otherwise, row is modified; check that row exists. +%%---------------------------------------------------------------- +friends_table(is_set_ok, RowIndex, Cols) -> + RowExists = + case get_row(RowIndex) of + {ok, _Row} -> true; + _ -> false + end, + case is_row_status_col_changed(Cols) of + {true, ?destroy} when RowExists == true -> + {noError, 0}; + {true, ?createAndGo} when RowExists == false, + length(Cols) == 3 -> + {noError, 0}; + {true, _} -> + {inconsistentValue, ?status_col}; + false when RowExists == true -> + {noError, 0}; + _ -> + [{Col, _NewVal} | _Cols] = Cols, + {inconsistentName, Col} + end; +friends_table(set, RowIndex, Cols) -> + case is_row_status_col_changed(Cols) of + {true, ?destroy} -> + ex1_server ! {self(), {delete_row, RowIndex}}; + {true, ?createAndGo} -> + NewRow = make_row(RowIndex, Cols), + ex1_server ! {self(), {add_row, NewRow}}; + false -> + {ok, Row} = get_row(RowIndex), + NewRow = merge_rows(Row, Cols), + ex1_server ! {self(), {delete_row, RowIndex}}, + ex1_server ! {self(), {add_row, NewRow}} + end, + {noError, 0}. + +%%---------------------------------------------------------------- +%% Make a list of {value, Val} of the Row and Cols list. +%%---------------------------------------------------------------- +get_cols([Col | Cols], Row) -> + [{value, element(Col, Row)} | get_cols(Cols, Row)]; +get_cols([], _Row) -> + []. +%%---------------------------------------------------------------- +%% As get_cols, but the Cols list may contain invalid column +%% numbers. If it does, we must find the next valid column, +%% or return endOfTable. +%%---------------------------------------------------------------- +get_next_cols([Col | Cols], Row) when Col < 2 -> + [{[2, element(1, Row)], element(2, Row)} | + get_next_cols(Cols, Row)]; +get_next_cols([Col | Cols], Row) when Col > 4 -> + [endOfTable | + get_next_cols(Cols, Row)]; +get_next_cols([Col | Cols], Row) -> + [{[Col, element(1, Row)], element(Col, Row)} | + get_next_cols(Cols, Row)]; +get_next_cols([], _Row) -> + []. +%%---------------------------------------------------------------- +%% Make a list of endOfTable with as many elems as Cols list. +%%---------------------------------------------------------------- +end_of_table([Col | Cols]) -> + [endOfTable | end_of_table(Cols)]; +end_of_table([]) -> + []. +add_one_to_cols([Col | Cols]) -> + [Col + 1 | add_one_to_cols(Cols)]; +add_one_to_cols([]) -> + []. +is_row_status_col_changed(Cols) -> + case lists:keysearch(?status_col, 1, Cols) of + {value, {?status_col, StatusVal}} -> + {true, StatusVal}; + _ -> false + end. +get_row(RowIndex) -> + ex1_server ! {self(), {get_row, RowIndex}}, + wait_answer(). +get_next_row(RowIndex) -> + ex1_server ! {self(), {get_next_row, RowIndex}}, + wait_answer(). +wait_answer() -> + receive + {ex1_server, Answer} -> + Answer + end. +%%%--------------------------------------------------------------- +%%% Server code follows +%%%--------------------------------------------------------------- +init() -> + register(ex1_server, self()), + loop("", []). + +loop(MyName, Table) -> + receive + {From, get_my_name} -> + From ! {ex1_server, MyName}, + loop(MyName, Table); + {From, {set_my_name, NewName}} -> + loop(NewName, Table); + {From, {get_row, RowIndex}} -> + Res = table_get_row(Table, RowIndex), + From ! {ex1_server, Res}, + loop(MyName, Table); + {From, {get_next_row, RowIndex}} -> + Res = table_get_next_row(Table, RowIndex), + From ! {ex1_server, Res}, + loop(MyName, Table); + {From, {delete_row, RowIndex}} -> + NewTable = table_delete_row(Table, RowIndex), + loop(MyName, NewTable); + {From, {add_row, NewRow}} -> + NewTable = table_add_row(Table, NewRow), + loop(MyName, NewTable) + end. +%%%--------------------------------------------------------------- +%%% Functions for table operations. The table is represented as +%%% a list of rows. +%%%--------------------------------------------------------------- +table_get_row([{Index, Name, Address, Status} | _], [Index]) -> + {ok, {Index, Name, Address, Status}}; +table_get_row([H | T], RowIndex) -> + table_get_row(T, RowIndex); +table_get_row([], _RowIndex) -> + no_such_row. +table_get_next_row([Row | T], []) -> + {ok, Row}; +table_get_next_row([Row | T], [Index | _]) +when element(1, Row) > Index -> + {ok, Row}; +table_get_next_row([Row | T], RowIndex) -> + table_get_next_row(T, RowIndex); +table_get_next_row([], RowIndex) -> + endOfTable. +table_delete_row([{Index, _, _, _} | T], [Index]) -> + T; +table_delete_row([H | T], RowIndex) -> + [H | table_delete_row(T, RowIndex)]; +table_delete_row([], _RowIndex) -> + []. +table_add_row([Row | T], NewRow) + when element(1, Row) > element(1, NewRow) -> + [NewRow, Row | T]; +table_add_row([H | T], NewRow) -> + [H | table_add_row(T, NewRow)]; +table_add_row([], NewRow) -> + [NewRow]. +make_row([Index], [{2, Name}, {3, Address} | _]) -> + {Index, Name, Address, ?active}. +merge_rows(Row, [{Col, NewVal} | T]) -> + merge_rows(setelement(Col, Row, NewVal), T); +merge_rows(Row, []) -> + Row. + ]]></code> + </section> + + <section> + <title>Association File</title> + <p>The association file <c>EX1-MIB.funcs</c> for the real + implementation looks as follows: + </p> + <code type="none"> +{myName, {ex1, my_name, []}}. +{friendsTable, {ex1, friends_table, []}}. + </code> + </section> + + <section> + <title>Transcript</title> + <p>To use the real implementation, we must recompile the MIB and + load it into the agent. + </p> + <pre> +1> <input>application:start(snmp).</input> +ok +2> <input>snmpc:compile("EX1-MIB").</input> +{ok,"EX1-MIB.bin"} +3> <input>snmpa:load_mibs(snmp_master_agent, ["EX1-MIB"]).</input> +ok +4> <input>ex1:start().</input> +<0.115.0> +%% Now all requests operates on this "real" implementation. +%% The output from the manager requests will *look* exactly the +%% same as for the default implementation. + </pre> + </section> + + <section> + <title>Trap Sending</title> + <p>How to send a trap by sending the + <c>fTrap</c> from the master agent is shown in this section. + The master agent has the MIB <c>EX1-MIB</c> loaded, where the + trap is defined. This trap specifies that two variables should + be sent along with the trap, <c>myName</c> and <c>fIndex</c>. + <c>fIndex</c> is a table column, so we must provide its value + and the index for the row in the call to <c>snmpa:send_trap/4</c>. + In the example below, we assume that the row in question is + indexed by 2 (the row with <c>fIndex</c> 2). + </p> + <p>we use a simple Erlang SNMP manager, which can receive traps. + </p> + <pre> +[MANAGER] +1> <input>snmp_test_mgr:start_link([{agent,"dront.ericsson.se"},{community,"public"}</input> + %% does not have write-access +1><input>{mibs,["EX1-MIB","STANDARD-MIB"]}]).</input> +{ok, <0.100.0>} +2> <input>snmp_test_mgr:s([{[myName,0], "Klas"}]).</input> +ok +* Got PDU: +Received a trap: + Generic: 4 %% authenticationFailure + Enterprise: [iso,2,3] + Specific: 0 + Agent addr: [123,12,12,21] + TimeStamp: 42993 +2> +[AGENT] +3> <input>snmpa:send_trap(snmp_master_agent, fTrap,"standard trap", [{fIndex,[2],2}]).</input> +[MANAGER] +2> +* Got PDU: +Received a trap: + Generic: 6 + Enterprise: [example1] + Specific: 1 + Agent addr: [123,12,12,21] + TimeStamp: 69649 +[myName,0] = "Martin" +[fIndex,2] = 2 +2> + </pre> + </section> + </section> +</chapter> + diff --git a/lib/snmp/doc/src/snmp_impl_example_manager.xml b/lib/snmp/doc/src/snmp_impl_example_manager.xml new file mode 100644 index 0000000000..edc1f3998e --- /dev/null +++ b/lib/snmp/doc/src/snmp_impl_example_manager.xml @@ -0,0 +1,94 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>2006</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>Manager Implementation Example</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_impl_example_manager.xml</file> + </header> + <p>This <em>Implementation Example</em> section describes + how a simple manager can be implemented with the + SNMP Development Toolkit. </p> + <p>The example shown, <em>ex2</em>, can be found in the toolkit + distribution. </p> + <p>This example has two functions: </p> + <list type="bulleted"> + <item> + <p>A simple example of how to use the manager component of + the SNMP Development Toolkit.</p> + </item> + <item> + <p>A simple example of how to write agent test cases, using the new + manager.</p> + </item> + </list> + + <section> + <title>The example manager</title> + <p>The example manager, <c>snmp_ex2_manager</c>, is a simple example of + how to implement an snmp manager using the manager component of the + SNMP Development Toolkit.</p> + <p>The module exports the following functions:</p> + <list type="bulleted"> + <item> + <p>start_link/0, start_link/1</p> + </item> + <item> + <p>stop/0</p> + </item> + <item> + <p>agent/2, agent/3</p> + </item> + <item> + <p>sync_get/2, sync_get/3</p> + </item> + <item> + <p>sync_get_next/2, sync_get_next/3</p> + </item> + <item> + <p>sync_get_bulk/4, sync_get_bulk/5</p> + </item> + <item> + <p>sync_set/2, sync_set/3</p> + </item> + <item> + <p>oid_to_name/1</p> + </item> + </list> + <p>This module is also used by the test module described in the + next section.</p> + </section> + + <section> + <title>A simple standard test</title> + <p>This simple standard test, <c>snmp_ex2_simple_standard_test</c>, + a module which, using the <c>snmp_ex2_manager</c> described in the + previous section, implements a simple agent test utility. </p> + </section> +</chapter> + diff --git a/lib/snmp/doc/src/snmp_index.xml b/lib/snmp/doc/src/snmp_index.xml new file mode 100644 index 0000000000..cd241820e8 --- /dev/null +++ b/lib/snmp/doc/src/snmp_index.xml @@ -0,0 +1,266 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>1997</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmp_index</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_index.xml</file> + </header> + <module>snmp_index</module> + <modulesummary>Abstract Data Type for SNMP Indexing</modulesummary> + <description> + <p>The module <c>snmp_index</c> implements an Abstract + Data Type (ADT) for an SNMP + index structure for SNMP tables. It is implemented as an ets + table of the ordered_set data-type, which means that all operations are + O(log n). In the table, the key is an ASN.1 OBJECT + IDENTIFIER. + </p> + <p>This index is used to separate the implementation of the SNMP + ordering from the actual implementation of the table. The SNMP + ordering, that is implementation of GET NEXT, is implemented in this + module. + </p> + <p>For example, suppose there is an SNMP table, which is best + implemented in Erlang as one process per SNMP table row. Suppose + further that the INDEX in the SNMP table is an OCTET STRING. The + index structure would be created as follows: + </p> + <code type="none"> +snmp_index:new(string) + </code> + <p>For each new process we create, we insert an item in an + <c>snmp_index</c> structure: + </p> + <code type="none"><![CDATA[ +new_process(Name, SnmpIndex) -> + Pid = start_process(), + NewSnmpIndex = + snmp_index:insert(SnmpIndex, Name, Pid), + <...> + ]]></code> + <p>With this structure, we can now map an OBJECT IDENTIFIER in + e.g. a GET NEXT request, to the correct process: + </p> + <code type="none"> +get_next_pid(Oid, SnmpIndex) -> + {ok, {_, Pid}} = snmp_index:get_next(SnmpIndex, Oid), + Pid. + </code> + </description> + + <section> + <title>Common data types</title> + <p>The following data types are used in the functions below: + </p> + <list type="bulleted"> + <item> + <p><c>index()</c></p> + </item> + <item> + <p><c>oid() = [byte()]</c></p> + </item> + <item> + <p><c>key_types = type_spec() | {type_spec(), type_spec(), ...}</c></p> + </item> + <item> + <p><c>type_spec() = fix_string | string | integer</c></p> + </item> + <item> + <p><c>key() = key_spec() | {key_spec(), key_spec(), ...}</c></p> + </item> + <item> + <p><c>key_spec() = string() | integer()</c></p> + </item> + </list> + <p>The <c>index()</c> type denotes an snmp index structure. + </p> + <p>The <c>oid()</c> type is used to represent an ASN.1 OBJECT + IDENTIFIER. + </p> + <p>The <c>key_types()</c> type is used when creating the + index structure, and the <c>key()</c> type is used when inserting + and deleting items from the structure. + </p> + <p>The <c>key_types()</c> type defines the types of the SNMP INDEX + columns for the table. If the table has one single INDEX column, + this type should be a single atom, but if the table has multiple + INDEX columns, it should be a tuple with atoms. + </p> + <p>If the INDEX column is of type INTEGER, or derived from + INTEGER, the corresponding type should be <c>integer</c>. If it + is a variable length type (e.g. OBJECT IDENTIFIER, OCTET STRING), + the corresponding type should be <c>string</c>. Finally, if the + type is of variable length, but with a fixed size restriction + (e.g. IpAddress), the corresponding type should be + <c>fix_string</c>. + </p> + <p>For example, if the SNMP table has two INDEX columns, the first + one an OCTET STRING with size 2, and the second one an OBJECT + IDENTIFER, the corresponding <c>key_types</c> parameter would be + <c>{fix_string, string}</c>. + </p> + <p>The <c>key()</c> type correlates to the <c>key_types()</c> + type. If the <c>key_types()</c> is a single atom, the + corresponding <c>key()</c> is a single type as well, but if the + <c>key_types()</c> is a tuple, <c>key</c> must be a tuple of the + same size. + </p> + <p>In the example above, valid <c>keys</c> could be <c>{"hi", "mom"}</c> and <c>{"no", "thanks"}</c>, whereas <c>"hi"</c>, + <c>{"hi", 42}</c> and <c>{"hello", "there"}</c> would be invalid.</p> + <warning> + <marker id="1"></marker> + <p>All API functions that update the index return a <c>NewIndex</c> + term. This is for backward compatibility with a previous + implementation that used a B+ tree written purely in Erlang for + the index. The <c>NewIndex</c> return value can now be ignored. + The return value is now the unchanged table identifier for the + ets table.</p> + <p>The implementation using ets tables introduces a semantic + incompatibility with older implementations. In those older + implementations, using pure Erlang terms, the index was garbage + collected like any other Erlang term and did not have to be + deleted when discarded. An ets table is deleted only when the + process creating it explicitly deletes it or when the creating + process terminates.</p> + <p>A new interface <c>delete/1</c> is now added to + handle the case when a process wants to discard an index table + (i.e. to build a completely new). Any application using + transient snmp indexes has to be modified to handle this.</p> + <p>As an snmp adaption usually keeps the index for the whole of the + systems lifetime, this is rarely a problem.</p> + </warning> + </section> + <funcs> + <func> + <name>delete(Index) -> true</name> + <fsummary>Delete an index table</fsummary> + <type> + <v>Index = NewIndex = index()</v> + <v>Key = key()</v> + </type> + <desc> + <p>Deletes a complete index structure (i.e. the ets table + holding the index). The index can no longer be referenced + after this call. See the <seealso marker="#1">warning note</seealso> + above.</p> + </desc> + </func> + <func> + <name>delete(Index, Key) -> NewIndex</name> + <fsummary>Delete an item from the index</fsummary> + <type> + <v>Index = NewIndex = index()</v> + <v>Key = key()</v> + </type> + <desc> + <p>Deletes a key and its value from the index structure. + Returns a new structure.</p> + </desc> + </func> + <func> + <name>get(Index, KeyOid) -> {ok, {KeyOid, Value}} | undefined</name> + <fsummary>Get the item with <c>KeyOid</c></fsummary> + <type> + <v>Index = index()</v> + <v>KeyOid = oid()</v> + <v>Value = term()</v> + </type> + <desc> + <p>Gets the item with key <c>KeyOid</c>. Could be used from + within an SNMP instrumentation function.</p> + </desc> + </func> + <func> + <name>get_last(Index) -> {ok, {KeyOid, Value}} | undefined</name> + <fsummary>Get the last item in the index structure</fsummary> + <type> + <v>Index = index()</v> + <v>KeyOid = oid()</v> + <v>Value = term()</v> + </type> + <desc> + <p>Gets the last item in the index structure.</p> + </desc> + </func> + <func> + <name>get_next(Index, KeyOid) -> {ok, {NextKeyOid, Value}} | undefined</name> + <fsummary>Get the next item</fsummary> + <type> + <v>Index = index()</v> + <v>KeyOid = NextKeyOid = oid()</v> + <v>Value = term()</v> + </type> + <desc> + <p>Gets the next item in the SNMP lexicographic ordering, + after <c>KeyOid</c> in the index structure. <c>KeyOid</c> + does not have to refer to an existing item in the index.</p> + </desc> + </func> + <func> + <name>insert(Index, Key, Value) -> NewIndex</name> + <fsummary>Insert an item into the index</fsummary> + <type> + <v>Index = NewIndex = index()</v> + <v>Key = key()</v> + <v>Value = term()</v> + </type> + <desc> + <p>Inserts a new key value tuple into the index structure. If + an item with the same key already exists, the new <c>Value</c> + overwrites the old value.</p> + </desc> + </func> + <func> + <name>key_to_oid(Index, Key) -> KeyOid</name> + <fsummary>Convert a key to an OBJECT IDENTIFIER</fsummary> + <type> + <v>Index = index()</v> + <v>Key = key()</v> + <v>KeyOid = NextKeyOid = oid()</v> + </type> + <desc> + <p>Converts <c>Key</c> to an OBJECT IDENTIFIER.</p> + </desc> + </func> + <func> + <name>new(KeyTypes) -> Index</name> + <fsummary>Create a new snmp index structure</fsummary> + <type> + <v>KeyTypes = key_types()</v> + <v>Index = index()</v> + </type> + <desc> + <p>Creates a new snmp index structure. The <c>key_types()</c> + type is described above.</p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmp_instr_functions.xml b/lib/snmp/doc/src/snmp_instr_functions.xml new file mode 100644 index 0000000000..32a1844554 --- /dev/null +++ b/lib/snmp/doc/src/snmp_instr_functions.xml @@ -0,0 +1,456 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>1997</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>Instrumentation Functions</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_instr_functions.xml</file> + </header> + <p>A user-defined instrumentation function for each object attaches + the managed objects to real resources. This function is called by + the agent on a <c>get</c> or <c>set</c> operation. The function + could read some hardware register, perform a calculation, or + whatever is necessary to implement the semantics associated with the + conceptual variable. These functions must be written both for scalar + variables and for tables. They are specified in the association + file, which is a text file. In this file, the <c>OBJECT IDENTIFIER</c>, or symbolic name for each managed object, is + associated with an Erlang tuple <c>{Module,</c><c>Function</c>, + <c>ListOfExtraArguments}</c>. + </p> + <p>When a managed object is referenced in an SNMP operation, the + associated <c>{Module, Function, ListOfExtraArguments}</c> is + called. The function is applied to some standard arguments (for + example, the operation type) and the extra arguments supplied by the + user. + </p> + <p>Instrumentation functions must be written for <c>get</c> and + <c>set</c> for scalar variables and tables, and for <c>get-next</c> + for tables only. The <c>get-bulk</c> operation is translated into a + series of calls to <c>get-next</c>. + </p> + + <section> + <title>Instrumentation Functions</title> + <p>The following sections describe how the instrumentation + functions should be defined in Erlang for the different + operations. In the following, <c>RowIndex</c> is a list of key + values for the table, and <c>Column</c> is a column number. + </p> + <p>These functions are described in detail in + <seealso marker="snmp_def_instr_functions">Definition of Instrumentation Functions</seealso>. + </p> + + <section> + <title>New / Delete Operations</title> + <p>For scalar variables: + </p> + <code type="none"> +variable_access(new [, ExtraArg1, ...]) +variable_access(delete [, ExtraArg1, ...]) + </code> + <p>For tables: + </p> + <code type="none"> +table_access(new [, ExtraArg1, ...]) +table_access(delete [, ExtraArg1, ...]) + </code> + <p>These functions are called for each object in an MIB when the + MIB is unloaded or loaded, respectively.</p> + </section> + + <section> + <title>Get Operation</title> + <p>For scalar variables: + </p> + <code type="none"> +variable_access(get [, ExtraArg1, ...]) + </code> + <p>For tables: + </p> + <code type="none"> +table_access(get,RowIndex,Cols [,ExtraArg1, ...]) + </code> + <p><c>Cols</c> is a list of <c>Column</c>. The agent will sort + incoming variables so that all operations on one row (same + index) will be supplied at the same time. The reason for this is + that a database normally retrieves information row by row. + </p> + <p>These functions must return the current values of the + associated variables.</p> + </section> + + <section> + <title>Set Operation</title> + <p>For scalar variables: + </p> + <code type="none"> +variable_access(set, NewValue [, ExtraArg1, ...]) + </code> + <p>For tables: + </p> + <code type="none"> +table_access(set, RowIndex, Cols [, ExtraArg1,..]) + </code> + <p><c>Cols</c> is a list of tuples <c>{Column, NewValue}</c>. + </p> + <p>These functions returns <c>noError</c> if the assignment was + successful, otherwise an error code.</p> + </section> + + <section> + <title>Is-set-ok Operation</title> + <p>As a complement to the <c>set</c> operation, it is possible + to specify a test function. This function has the same syntax as + the set operation above, except that the first argument is + <c>is_set_ok</c> instead of <c>set</c>. This function is called + before the variable is set. Its purpose is to ensure that it is + permissible to set the variable to the new value.</p> + <code type="none"> +variable_access(is_set_ok, NewValue [, ExtraArg1, ...]) + </code> + <p>For tables: + </p> + <code type="none"> +table_access(set, RowIndex, Cols [, ExtraArg1,..]) + </code> + <p><c>Cols</c> is a list of tuples <c>{Column, NewValue}</c>. + </p> + </section> + + <section> + <title>Undo Operation</title> + <p>A function which has been called with <c>is_set_ok</c> will + be called again, either with <c>set</c> if there was no error, + or with <c>undo</c>, if an error occurred. In this way, + resources can be reserved in the <c>is_set_ok</c> operation, + released in the <c>undo</c> operation, or made permanent in the + <c>set</c> operation.</p> + <code type="none"> +variable_access(undo, NewValue [, ExtraArg1, ...]) + </code> + <p>For tables: + </p> + <code type="none"> +table_access(set, RowIndex, Cols [, ExtraArg1,..]) + </code> + <p><c>Cols</c> is a list of tuples <c>{Column, NewValue}</c>. + </p> + </section> + + <section> + <title>GetNext Operation</title> + <p>The GetNext Operation operation should only be defined for + tables since the + agent can find the next instance of plain variables in the MIB + and call the instrumentation with the <c>get</c> operation. + </p> + <code type="none"> +table_access(get_next, RowIndex, Cols [, ExtraArg1, ...]) + </code> + <p><c>Cols</c> is a list of integers, all greater than or equal + to zero. This indicates that the instrumentation should find the + next accessible instance. This function returns the tuple + <c>{NextOid, NextValue}</c>, or + <c>endOfTable</c>. <c>NextOid</c> should be the + lexicographically next accessible instance of a managed object + in the table. It should be a list of integers, where the first + integer is the column, and the rest of the list is the indices + for the next row. If <c>endOfTable</c> is returned, the agent + continues to search for the next instance among the other + variables and tables. + </p> + <p><c>RowIndex</c> may be an empty list, an incompletely + specified row index, or the index for an unspecified row. + </p> + <p>This operation is best described with an example. + </p> + + <section> + <title>GetNext Example</title> + <p>A table called <c>myTable</c> has five columns. The first + two are keys (not accessible), and the table has three + rows. The instrumentation function for this table is called + <c>my_table</c>.</p> + <marker id="getnext1"></marker> + <image file="getnext1.gif"> + <icaption>Contents of my_table</icaption> + </image> + <note> + <p>N/A means not accessible.</p> + </note> + <p>The manager issues the following <c>getNext</c> request: + </p> + <code type="none"> +getNext{ myTable.myTableEntry.3.1.1, + myTable.myTableEntry.5.1.1 } + </code> + <p>Since both operations involve the 1.1 index, this is + transformed into one call to <c>my_table</c>: + </p> + <code type="none"> +my_table(get_next, [1, 1], [3, 5]) + </code> + <p>In this call, <c>[1, 1]</c> is the <c>RowIndex</c>, where + key 1 has value 1, and key 2 has value 1, and <c>[3, 5]</c> is + the list of requested columns. The function should now return + the lexicographically next elements: + </p> + <code type="none"> +[{[3, 1, 2], d}, {[5, 1, 2], f}] + </code> + <p>This is illustrated in the following table: + </p> + <p></p> + <marker id="getnext2"></marker> + <image file="getnext2.gif"> + <icaption>GetNext from [3,1,1] and [5,1,1].</icaption> + </image> + <p>The manager now issues the following <c>getNext</c> request: + </p> + <code type="none"> +getNext{ myTable.myTableEntry.3.2.1, + myTable.myTableEntry.5.2.1 } + </code> + <p>This is transformed into one call to <c>my_table</c>: + </p> + <code type="none"> +my_table(get_next, [2, 1], [3, 5]) + </code> + <p>The function should now return: + </p> + <code type="none"> +[{[4, 1, 1], b}, endOfTable] + </code> + <p>This is illustrated in the following table: + </p> + <p></p> + <marker id="getnext3"></marker> + <image file="getnext3.gif"> + <icaption>GetNext from [3,2,1] and [5,2,1].</icaption> + </image> + <p>The manager now issues the following <c>getNext</c> request: + </p> + <code type="none"> +getNext{ myTable.myTableEntry.3.1.2, + myTable.myTableEntry.4.1.2 } + </code> + <p>This will be transform into one call to <c>my_table</c>: + </p> + <code type="none"> +my_table(get_next, [1, 2], [3, 4]) + </code> + <p>The function should now return: + </p> + <code type="none"> +[{[3, 2, 1], g}, {[5, 1, 1], c}] + </code> + <p>This is illustrated in the following table: + </p> + <p></p> + <marker id="getnext4"></marker> + <image file="getnext4.gif"> + <icaption>GetNext from [3,1,2] and [4,1,2].</icaption> + </image> + <p>The manager now issues the following <c>getNext</c> request: + </p> + <code type="none"> +getNext{ myTable.myTableEntry, + myTable.myTableEntry.1.3.2 } + </code> + <p>This will be transform into two calls to <c>my_table</c>: + </p> + <code type="none"> +my_table(get_next, [], [0]) and +my_table(get_next, [3, 2], [1]) + </code> + <p>The function should now return: + </p> + <code type="none"> +[{[3, 1, 1], a}] and +[{[3, 1, 1], a}] + </code> + <p>In both cases, the first accessible element in the table + should be returned. As the key columns are not accessible, + this means that the third column is the first row.</p> + <note> + <p>Normally, the functions described above behave exactly as + shown, but they are free to perform other actions. For + example, a get-request may have side effects such as setting + some other variable, perhaps a global <c>lastAccessed</c> + variable.</p> + </note> + </section> + </section> + </section> + + <section> + <title>Using the ExtraArgument</title> + <p>The <c>ListOfExtraArguments</c> can be used to write generic + functions. This list is appended to the standard arguments for + each function. Consider two read-only variables for a device, + <c>ipAdr</c> and <c>name</c> with object identifiers 1.1.23.4 and + 1.1.7 respectively. To access these variables, one could implement + the two Erlang functions <c>ip_access</c> and <c>name_access</c>, + which will be in the MIB. The functions could be specified in a + text file as follows: + </p> + <p></p> + <code type="none"> +{ipAdr, {my_module, ip_access, []}}. +% Or using the oid syntax for 'name' +{[1,1,7], {my_module, name_access, []}}. + </code> + <p>The <c>ExtraArgument</c> parameter is the empty list. For + example, when the agent receives a get-request for the + <c>ipAdr</c> variable, a call will be made to + <c>ip_access(get)</c>. The value returned by this function is the + answer to the get-request. + </p> + <p>If <c>ip_access</c> and <c>name_access</c> are implemented + similarly, we could write a <c>generic_access</c> function using + the <c>ListOfExtraArguments</c>: + </p> + <code type="none"> +{ipAdr, {my_module, generic_access, ['IPADR']}}. +% The mnemonic 'name' is more convenient than 1.1.7 +{name, {my_module, generic_access, ['NAME']}}. + </code> + <p>When the agent receives the same get-request as above, a call + will be made to <c>generic_access(get, </c>'<c>IPADR')</c>. + </p> + <p>Yet another possibility, closer to the hardware, could be: + </p> + <code type="none"> +{ipAdr, {my_module, generic_access, [16#2543]}}. +{name, {my_module, generic_access, [16#A2B3]}}. + </code> + </section> + + <section> + <title>Default Instrumentation</title> + <marker id="snmp_3"></marker> + <p>When the MIB definition work is finished, there are two major + issues left. + </p> + <list type="bulleted"> + <item>Implementing the MIB + </item> + <item>Implementing a Manager Application.</item> + </list> + <p>Implementing an MIB can be a tedious task. Most probably, there + is a need to test the agent before all tables and variables are + implemented. In this case, the default instrumentation functions + are useful. The toolkit can generate default instrumentation + functions for variables as well as for tables. Consequently, a + running prototype agent, which can handle <c>set</c>, <c>get</c>, + <c>get-next</c> and table operations, is generated without any + programming. + </p> + <p>The agent stores the values in an internal volatile database, + which is based on the standard module <c>ets</c>. However, it is + possible to let the MIB compiler generate functions which use an + internal, persistent database, or the Mnesia DBMS. Refer to the + Mnesia User Guide and the Reference Manual, section SNMP, module + <c>snmp_generic</c> for more information. + </p> + <p>When parts of the MIB are implemented, you recompile it and + continue on by using default functions. With this approach, the + SNMP agent can be developed incrementally. + </p> + <p>The default instrumentation allows the application on the + manager side to be developed and tested simultaneously with the + agent. As soon as the ASN.1 file is completed, let the MIB + compiler generate a default implementation and develop the + management application from this. + </p> + + <section> + <title>Table Operations</title> + <p>The generation of default functions for tables works for + tables which use the <c>RowStatus</c> textual convention from + SNMPv2, defined in STANDARD-MIB and SNMPv2-TC. + </p> + <note> + <p>We strongly encourage the use of the <c>RowStatus</c> + convention for every table that can be modified from the + manager, even for newly designed SNMPv1 MIBs. In SNMPv1, + everybody has invented their own scheme for emulating table + operations, which has led to numerous inconsistencies. The + convention in SNMPv2 is flexible and powerful and has been + tested successfully. If the table is read only, no RowStatus + column should be used. + </p> + </note> + </section> + </section> + + <section> + <title>Atomic Set</title> + <p>In SNMP, the <c>set</c> operation is atomic. Either all + variables which are specified in a <c>set</c> operation are + changed, or none are changed. Therefore, the <c>set</c> operation + is divided into two phases. In the first phase, the new value of + each variable is checked against the definition of the variable in + the MIB. The following definitions are checked: + </p> + <list type="bulleted"> + <item>the type</item> + <item>the length</item> + <item>the range</item> + <item>the variable is writable and within the MIB view. + </item> + </list> + <p>At + the end of phase one, the user defined <c>is_set_ok</c> functions + are called for each scalar variable, and for each group of table + operations. + </p> + <p>If no error occurs, the second phase is performed. This phase + calls the user defined <c>set</c> function for all variables. + </p> + <p>If an error occurs, either in the <c>is_set_ok</c> phase, or in + the <c>set</c> phase, all functions which were called with + <c>is_set_ok</c> but not <c>set</c>, are called with <c>undo</c>. + </p> + <p>There are limitations with this transaction mechanism. If + complex dependencies exist between variables, for example between + <c>month</c> and <c>day</c>, another mechanism is needed. Setting + the date to 'Feb 31' can be avoided by a somewhat more generic + transaction mechanism. You can continue and find more and more + complex situations and construct an N-phase set-mechanism. This + toolkit only contains a trivial mechanism. + </p> + <p>The most common application of transaction mechanisms is to + keep row operations together. Since our agent sorts row + operations, the mechanism implemented in combination with the + RowStatus (particularly 'createAndWait' value) solve most + problems elegantly. + </p> + </section> +</chapter> + diff --git a/lib/snmp/doc/src/snmp_intro.xml b/lib/snmp/doc/src/snmp_intro.xml new file mode 100644 index 0000000000..b01bfdd88f --- /dev/null +++ b/lib/snmp/doc/src/snmp_intro.xml @@ -0,0 +1,258 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>1997</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>SNMP Introduction</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_intro.xml</file> + </header> + <p>The SNMP development toolkit contains the following parts: + </p> + <list type="bulleted"> + <item>An Extensible multi-lingual SNMP agent, which understands SNMPv1 + (RFC1157), SNMPv2c (RFC1901, 1905, 1906 and 1907), SNMPv3 + (RFC2271, 2272, 2273, 2274 and 2275), or any combination of + these protocols. + </item> + <item>A multi-lingual SNMP manager. + </item> + <item>A MIB compiler, which understands SMIv1 (RFC1155, 1212, and + 1215) and SMIv2 (RFC1902, 1903, and 1904). + </item> + </list> + <p>The SNMP development tool provides an environment for + rapid agent/manager prototyping and construction. With the + following information provided, this tool is used to set up a + running multi-lingual SNMP agent/manager: + </p> + <list type="bulleted"> + <item>a description of a Management Information Base (MIB) in + Abstract Syntax Notation One (ASN.1) + </item> + <item>instrumentation functions for the managed objects in the MIB, + written in Erlang. + </item> + </list> + <p>The advantage of using an extensible (agent/manager) toolkit is to + remove details such as type-checking, access rights, Protocol Data Unit + (PDU), encoding, decoding, and trap distribution from the + programmer, who only has to write the instrumentation functions, + which implement the MIBs. The <c>get-next</c> function only + has to be implemented for tables, and not for every variable in + the global naming tree. This information can be deduced from the + ASN.1 file. + </p> + + <section> + <title>Scope and Purpose</title> + <p>This manual describes the SNMP development tool, + as a component of the Erlang/Open Telecom Platform development + environment. It is assumed that the reader is familiar with the + Erlang Development Environment, which is described in a separate + User's Guide.</p> + </section> + + <section> + <title>Prerequisites</title> + <p>The following prerequisites + is required for understanding the material in the SNMP + User's Guide: + </p> + <list type="bulleted"> + <item>the basics of the Simple Network Management Protocol + version 1 (SNMPv1) + </item> + <item>the basics of the community-based Simple Network + Management Protocol version 2 (SNMPv2c) + </item> + <item>the basics of the Simple Network Management Protocol + version 3 (SNMPv3) + </item> + <item>the knowledge of defining MIBs using SMIv1 and SMIv2 + </item> + <item>familiarity with the Erlang system and Erlang programming + </item> + </list> + <p>The tool requires Erlang release 4.7 or later. + </p> + </section> + + <section> + <title>Definitions</title> + <p>The following definitions are used in the SNMP User's Guide. + </p> + <taglist> + <tag>MIB</tag> + <item>The conceptual repository for management information is + called the Management Information Base (MIB). It does not + hold any data, merely a definition of what + data can be accessed. A definition of an MIB is a + description of a collection of managed objects. + </item> + <tag>SMI</tag> + <item>The MIB is specified in an adapted subset of the Abstract + Syntax Notation One (ASN.1) language. This adapted subset is + called the Structure of Management Information (SMI). + </item> + <tag>ASN.1</tag> + <item>ASN.1 is used in two different ways in SNMP. The SMI is + based on ASN.1, and the messages in the protocol are defined by + using ASN.1. + </item> + <tag>Managed object</tag> + <item> + <p>A resource to be managed is represented by a managed + object, which resides in the MIB. In an SNMP MIB, the managed + objects are either:</p> + <list type="bulleted"> + <item><em>scalar variables</em>, which have only one instance + per context. They have single values, not multiple values like + vectors or structures. + </item> + <item><em>tables</em>, which can grow dynamically. + </item> + <item>a <em>table element</em>, which is a special type of + scalar variable.</item> + </list> + </item> + <tag>Operations</tag> + <item>SNMP relies on the three basic operations: get (object), + set (object, value) and get-next (object). + </item> + <tag>Instrumentation function</tag> + <item>An instrumentation function is associated with each + managed object. This is the function, which actually implements + the operations and will be called by the agent when it receives + a request from the management station.</item> + <tag>Manager</tag> + <item>A manager generates commands and receives notifications + from agents. There usually are only a few managers in a system.</item> + <tag>Agent</tag> + <item>An agent responds to commands from the manager, and sends + notification to the manager. There are potentially many agents + in a system.</item> + </taglist> + </section> + + <section> + <title>About This Manual</title> + <p>In addition to this introductory chapter, the SNMP User's Guide + contains the following chapters: + </p> + <list type="bulleted"> + <item>Chapter 2: "Functional Description" describes the features + and operation of the SNMP development toolkit. It includes + topics on Sub-agents and MIB loading, Internal MIBs, and Traps. + </item> + <item>Chapter 3: "The MIB Compiler" describes the features and the + operation of the MIB compiler. + </item> + <item>Chapter 4: "Running the application" describes how to start and + configure the application. Topics on how to debug the application + are also included. + </item> + <item>Chapter 5: "Definition of Agent Configuration Files" is a + reference chapter, which contains more detailed information about + the agent configuration files. + </item> + <item>Chapter 6: "Definition of Manager Configuration Files" is a + reference chapter, which contains more detailed information about + the manager configuration files. + </item> + <item>Chapter 7: "Agent Implementation Example" describes how an MIB + can be implemented with the SNMP Development Toolkit. + Implementation examples are included. + </item> + <item>Chapter 8: "Instrumentation Functions" describes how + instrumentation functions should be defined in Erlang for the + different operations. + </item> + <item>Chapter 9: "Definition of Instrumentation Functions" is a + reference chapter which contains more detailed information + about the instrumentation functions. + </item> + <item>Chapter 10: "Definition of Agent Net if" is a reference chapter, + which describes the Agent Net if function in detail. + </item> + <item>Chapter 11: "Definition of Manager Net if" is a reference chapter, + which describes the Manager Net if function in detail. + </item> + <item>Chapter 12: "Advanced Agent Topics" describes sub-agents, agent + semantics, audit trail logging, and the consideration of + distributed tables. + </item> + <item>Appendix A describes the conversion of SNMPv2 to SNMPv1 + error messages. + </item> + <item>Appendix B contains the RFC1903 text on <c>RowStatus</c>. + </item> + </list> + </section> + + <section> + <title>Where to Find More Information</title> + <p>Refer to the following documentation for more information about + SNMP and about the Erlang/OTP development system: + </p> + <list type="bulleted"> + <item>Marshall T. Rose (1991), "The Simple Book - An + Introduction to Internet Management", Prentice-Hall + </item> + <item>Evan McGinnis and David Perkins (1997), "Understanding SNMP + MIBs", Prentice-Hall + </item> + <item>RFC1155, 1157, 1212 and 1215 (SNMPv1) + </item> + <item>RFC1901-1907 (SNMPv2c) + </item> + <item>RFC1908, 2089 (coexistence between SNMPv1 and SNMPv2) + </item> + <item>RFC2271, RFC2273 (SNMP std MIBs) + </item> + <item>the Mnesia User's Guide + </item> + <item>the Erlang 4.4 Extensions User's Guide + </item> + <item>the Reference Manual + </item> + <item>the Erlang Embedded Systems User's Guide + </item> + <item>the System Architecture Support Libraries (SASL) User's + Guide + </item> + <item>the Installation Guide + </item> + <item>the Asn1 User's Guide + </item> + <item>Concurrent Programming in Erlang, 2nd Edition (1996), + Prentice-Hall, ISBN 0-13-508301-X. + </item> + </list> + </section> +</chapter> + diff --git a/lib/snmp/doc/src/snmp_manager_config_files.xml b/lib/snmp/doc/src/snmp_manager_config_files.xml new file mode 100644 index 0000000000..c2ef3cd2c7 --- /dev/null +++ b/lib/snmp/doc/src/snmp_manager_config_files.xml @@ -0,0 +1,249 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>2004</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>Definition of Manager Configuration Files</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_manager_config_files.xml</file> + </header> + <p>Configuration data may be included in configuration files + that is located in the configuration directory. The name of this + directory is given in the <c>config_dir</c> configuration + parameter. These files are read at start-up. + </p> + <p>The directory where the configuration files are found is given as + a parameter to the manager. + </p> + <p>The entry format in all files are Erlang terms, separated by a + '<em>.</em>' and a <em>newline</em>. In the following sections, the + formats of these terms are described. Comments may be specified as + ordinary Erlang comments. + </p> + <p>If syntax errors are discovered in these files they are reported with the + function <c>config_err/2</c> of the + <seealso marker="snmpa_error_report">error report module</seealso> + at start-up. + </p> + + <section> + <marker id="manager"></marker> + <marker id="manager_information"></marker> + <title>Manager Information</title> + <p>The manager information should be stored in a file called + <c>manager.conf</c>. + </p> + <p>Each entry is a tuple of size two: + </p> + <p><c>{Variable, Value}.</c></p> + <list type="bulleted"> + <item> + <p><c>Variable</c> is one of the following:</p> + <list type="bulleted"> + <item> + <p><c>address</c> - which defines the IP address of the + manager. Default is local host.</p> + </item> + <item> + <p><c>port</c> - which defines which UDP port the manager uses + for communicating with agents. <em>Mandatory</em>.</p> + </item> + <item> + <p><c>engine_id</c> - The <c>SnmpEngineID</c> as defined in + SNMP-FRAMEWORK-MIB. <em>Mandatory</em>.</p> + </item> + <item> + <p><c>max_message_size</c> - The <c>snmpEngineMaxMessageSize</c> as + defined in SNMP-FRAMEWORK-MIB. <em>Mandatory</em>.</p> + </item> + </list> + </item> + <item> + <p><c>Value</c> is the value for the variable. + </p> + </item> + </list> + <p>The following example shows a <c>manager.conf</c> file: + </p> + <pre> +{address, [141,213,11,24]}. +{port, 5000}. +{engine_id, "mgrEngine"}. +{max_message_size, 484}. + </pre> + <p>The value of <c>engine_id</c> is a string, which should have a + very specific structure. See RFC 2271/2571 for details. + </p> + </section> + + <section> + <marker id="users"></marker> + <title>Users</title> + <p>For each <em>manager user</em>, the manager needs some information. + This information is either added in the <c>users.conf</c> config + file or by calling the + <seealso marker="snmpm#register_user">register_user</seealso> + function in run-time. + </p> + <p>Each row defines a <em>manager user</em> of the manager. + </p> + <p>Each entry is a tuple of size four: + </p> + <!-- <p><c>{UserId, UserMod, UserData}.</c></p> --> + <p><c>{UserId, UserMod, UserData, DefaultAgentConfig}.</c></p> + <list type="bulleted"> + <item> + <p><c>UserId</c> is any term (used to uniquely identify the user).</p> + </item> + <item> + <p><c>UserMod</c> is the user callback module (atom).</p> + </item> + <item> + <p><c>UserData</c> is any term (passed on to the user when calling the + <c>UserMod</c>. + </p> + </item> + <item> + <p><c>DefaultAgentConfig</c> is a list of default agent config's. + These values are used as default values when this user registers + agents. + </p> + </item> + </list> + </section> + + <section> + <marker id="agents"></marker> + <title>Agents</title> + <p>The information needed to handle agents should be stored in a + file called <c>agents.conf</c>. It is also possible to add agents + in run-time by calling the + <seealso marker="snmpm#register_agent">register_agent</seealso>. + </p> + <p>Each entry is a tuple: + </p> + <p><c>{UserId, TargetName, Comm, Ip, Port, EngineID, Timeout, MaxMessageSize, Version, SecModel, SecName, SecLevel}.</c></p> + <list type="bulleted"> + <item> + <p><c>UserId</c> is the identity of the <em>manager user</em> + responsible for this agent (term). + </p> + </item> + <item> + <p><c>TargetName</c> is a <em>unique</em> <em>non-empty</em> string.</p> + </item> + <item> + <p><c>Comm</c> is the community string (string).</p> + </item> + <item> + <p><c>Ip</c> is the ip address of the agent (a list of four integers).</p> + </item> + <item> + <p><c>Port</c> is the port number of the agent (integer).</p> + </item> + <item> + <p><c>EngineID</c> is the engine-id of the agent (string).</p> + </item> + <item> + <p><c>Timeout</c> is re-transmission timeout + (<c>infinity</c> | integer).</p> + </item> + <item> + <p><c>MaxMessageSize</c> is the max message size for outgoing messages + to this agent (integer).</p> + </item> + <item> + <p><c>Version</c> is the version (v1 | v2 | v3).</p> + </item> + <item> + <p><c>SecModel</c> is the security model (any | v1 | v2c | usm).</p> + </item> + <item> + <p><c>SecName</c> is the security name (string).</p> + </item> + <item> + <p><c>SecLevel</c> is security level (noAuthNoPriv | authNoPriv | + authPriv).</p> + </item> + </list> + </section> + + <section> + <marker id="usm"></marker> + <marker id="usm_user"></marker> + <title>Security data for USM</title> + <p>The information about Security data for USM should be stored in a + file called <c>usm.conf</c>, which must be present if the manager + wishes to use SNMPv3 when communicating with agents. It is also + possible to add usm data in run-time by calling the + <seealso marker="snmpm#register_usm_user">register_usm_user</seealso>. + </p> + <p>The corresponding table is <c>usmUserTable</c> in the + SNMP-USER-BASED-SM-MIB. + </p> + <p>Each entry is a term: + </p> + <p><c>{EngineID, UserName, AuthP, AuthKey, PrivP, PrivKey}.</c> <br></br> +<c>{EngineID, UserName, SecName, AuthP, AuthKey, PrivP, PrivKey}.</c></p> + <p>The first case is when we have the identity-function + (<c>SecName</c> = <c>UserName</c>). + </p> + <list type="bulleted"> + <item> + <p><c>EngineID</c> is a string.</p> + </item> + <item> + <p><c>UserName</c> is a string.</p> + </item> + <item> + <p><c>SecName</c> is a string.</p> + </item> + <item> + <p><c>AuthP</c> is a <c>usmNoAuthProtocol</c>, + <c>usmHMACMD5AuthProtocol</c> or <c>usmHMACSHAAuthProtocol</c>.</p> + </item> + <item> + <p><c>AuthKey</c> is a list (of integer). This is the User's + secret localized authentication key. It is not visible in the MIB. + The length of this key needs to be 16 if + <c>usmHMACMD5AuthProtocol</c> is used and 20 if + <c>usmHMACSHAAuthProtocol</c> is used.</p> + </item> + <item> + <p><c>PrivP</c> is a <c>usmNoPrivProtocol</c>, + <c>usmDESPrivProtocol</c> or <c>usmAesCfb128Protocol</c>.</p> + </item> + <item> + <p><c>PrivKey</c> is a list (of integer). This is the User's secret + localized encryption key. It is not visible in the MIB. The length + of this key needs to be 16 if <c>usmDESPrivProtocol</c> + or <c>usmAesCfb128Protocol</c> is used.</p> + </item> + </list> + </section> +</chapter> + diff --git a/lib/snmp/doc/src/snmp_manager_funct_descr.xml b/lib/snmp/doc/src/snmp_manager_funct_descr.xml new file mode 100644 index 0000000000..db4ab9bf15 --- /dev/null +++ b/lib/snmp/doc/src/snmp_manager_funct_descr.xml @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>2004</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>Manager Functional Description</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_manager_funct_descr.xml</file> + </header> + + <section> + <title>Features</title> + <marker id="features"></marker> + <p>The manager provided with the tool is a lightweight manager + that basically provides a means to communicate with agents.</p> + <p>It does not really implement any management capabilities by + itself. That is up to the <em>user</em>. + </p> + <p>A <em>user</em> in this context is basically a module implementing + the <seealso marker="snmpm_user">snmpm_user</seealso> behaviour. + A <em>user</em> can issue snmp requests and receive + notification/traps.</p> + <p>Agents to be accessed by the manager needs to be registered by + a user. Once registered, they can be accessed by all registered + users.</p> + <p>Notifications/traps from an agent is delivered to the user that + did the registration.</p> + <p>Any message from an agent that is not registered is delivered to + the <em>default user</em>.</p> + <p>By default, the <em>default user</em> is set to the + <c>snmpm_user_default</c> module, which simply sends an info message + to the error_logger. It is however highly recommended that this + module be replaced by another that does something useful + (see <seealso marker="snmp_config#configuration_params">configuration params</seealso> for more info).</p> + <p>When using version 3, then (at least one) <em>usm user</em> has to + be registered.</p> + <p>Requests can be issued in two different ways. Synchronous (see + <seealso marker="snmpm#sync_set">sync_set</seealso>, + <seealso marker="snmpm#sync_get">sync_get</seealso>, + <seealso marker="snmpm#sync_get_next">sync_get_next</seealso> and + <seealso marker="snmpm#sync_get_bulk">sync_get_bulk</seealso>) + and asynchronous (see + <seealso marker="snmpm#async_set">async_set</seealso>, + <seealso marker="snmpm#async_get">async_get</seealso>, + <seealso marker="snmpm#async_get_next">async_get_next</seealso> and + <seealso marker="snmpm#async_get_bulk">async_get_bulk</seealso>). + With synchronous + the snmp reply is returned by the function. With asynchronous, + the reply will instead be delivered through a call to one of the + <c>handle_pdu</c> callback function defined by the + <seealso marker="snmpm_user#handle_pdu">handle_pdu</seealso> + behaviour.</p> + </section> + + <section> + <title>Operation</title> + <marker id="operation"></marker> + <p>The following steps are needed to get the manager running:</p> + <list type="ordered"> + <item> + <p>[optional] Implement the default user.</p> + </item> + <item> + <p>Implement the user(s).</p> + </item> + <item> + <p>Configure the application (manager).</p> + </item> + <item> + <p>Start the application (manager).</p> + </item> + <item> + <p>Register the user(s).</p> + </item> + <item> + <p>The user(s) register their agents.</p> + </item> + </list> + </section> + + <section> + <title>MIB loading</title> + <marker id="mib_loading"></marker> + <p>It is possible to load mibs into the manager, but this is not + necessary for normal operation, and not recommended.</p> + </section> +</chapter> + diff --git a/lib/snmp/doc/src/snmp_manager_netif.xml b/lib/snmp/doc/src/snmp_manager_netif.xml new file mode 100644 index 0000000000..2738ca76c1 --- /dev/null +++ b/lib/snmp/doc/src/snmp_manager_netif.xml @@ -0,0 +1,174 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>2004</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>Definition of Manager Net if</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_manager_netif.xml</file> + </header> + <p></p> + <image file="snmp_manager_netif_1.gif"> + <icaption>The Purpose of Manager Net if</icaption> + </image> + <p>The Network Interface (Net if) process delivers SNMP PDUs to the + manager server, and receives SNMP PDUs from the manager server. + The most common behaviour of a Net if process is that is receives + request PDU from the manager server, encodes the PDU into bytes + and transmits the bytes onto the network to an agent. When the + reply from the agent is received by the Net if process, which it + decodes into an SNMP PDU, which it sends to the manager server. + </p> + <p>However, that simple behaviour can be modified in numerous + ways. For example, the Net if process can apply some kind of + encrypting/decrypting scheme on the bytes. + </p> + <p>It is also possible to write your own Net if process. The default + Net if process is implemented in the module <c>snmpm_net_if</c> and + it uses UDP as the transport protocol. + </p> + <p>This section describes how to write a Net if process. + </p> + + <section> + <marker id="mandatory_functions"></marker> + <title>Mandatory Functions</title> + <p>A Net if process must implement the SNMP manager + <seealso marker="snmpm_network_interface">network interface behaviour</seealso>. + </p> + </section> + + <section> + <title>Messages</title> + <p>The section <em>Messages</em> describes mandatory messages, which + Net if must send to the manager server process. + </p> + <p>Net if must send the following message when it receives an + SNMP PDU from the network that is aimed for the MasterAgent: + </p> + <pre> +Server ! {snmp_pdu, Pdu, Addr, Port} + </pre> + <list type="bulleted"> + <item> + <p><c>Pdu</c> is an SNMP PDU record, as defined in + <c>snmp_types.hrl</c>, with the SNMP request.</p> + </item> + <item> + <p><c>Addr</c> is the source address. </p> + </item> + <item> + <p><c>Port</c> is port number of the sender.</p> + </item> + </list> + <pre> +Server ! {snmp_trap, Trap, Addr, Port} + </pre> + <list type="bulleted"> + <item> + <p><c>Trap</c> is either an SNMP pdu record or an trappdu record, + as defined in <c>snmp_types.hrl</c>, with the SNMP request.</p> + </item> + <item> + <p><c>Addr</c> is the source address. </p> + </item> + <item> + <p><c>Port</c> is port number of the sender.</p> + </item> + </list> + <pre> +Server ! {snmp_inform, Ref, Pdu, PduMS, Addr, Port} + </pre> + <list type="bulleted"> + <item> + <p><c>Ref</c> is either the atom <c>ignore</c> or something + that can be used to identify the inform-request (e.g. request-id). + <c>ignore</c> is used if the response (acknowledgment) to the + inform-request has already been sent (this means that the server + will not make the call to the + <seealso marker="snmpm_network_interface#inform_response">inform_response</seealso> + function). See the + <seealso marker="snmp_app">inform request behaviour</seealso> + configuration option for more info.</p> + </item> + <item> + <p><c>Pdu</c> is an SNMP PDU record, as defined in + <c>snmp_types.hrl</c>, with the SNMP request.</p> + </item> + <item> + <p><c>Addr</c> is the source address. </p> + </item> + <item> + <p><c>Port</c> is port number of the sender.</p> + </item> + </list> + <pre> +Server ! {snmp_report, Data, Addr, Port} + </pre> + <list type="bulleted"> + <item> + <p><c>Data</c> is either <c>{ok, Pdu}</c> or + <c>{error, ReqId, ReasonInfo, Pdu}</c>. Which one is used depends + on the return value from the MPD + <seealso marker="snmpm_mpd#process_msg">process_msg</seealso> function. If the MsgData is <c>ok</c>, + the first is used, and if it is <c>{error, ReqId, Reason}</c> + the latter is used.</p> + </item> + <item> + <p><c>Pdu</c> is an SNMP PDU record, as defined in + <c>snmp_types.hrl</c>, with the SNMP request.</p> + </item> + <item> + <p><c>ReqId</c> is an integer.</p> + </item> + <item> + <p><c>ReasonInfo</c> is a term().</p> + </item> + <item> + <p><c>Addr</c> is the source address. </p> + </item> + <item> + <p><c>Port</c> is port number of the sender.</p> + </item> + </list> + + <section> + <title>Notes</title> + <p>Since the Net if process is responsible for encoding and + decoding of SNMP messages, it must also update the relevant + counters in the SNMP group in MIB-II. It can use the functions + in the module <c>snmpm_mpd</c> for this purpose (refer to the + Reference Manual, section <c>snmp</c>, module <c>snmpm_mpd</c> + for more details). + </p> + <p>There are also some useful functions for encoding and + decoding of SNMP messages in the module <c>snmp_pdus</c>. + </p> + </section> + </section> +</chapter> + diff --git a/lib/snmp/doc/src/snmp_manager_netif_1.gif b/lib/snmp/doc/src/snmp_manager_netif_1.gif Binary files differnew file mode 100644 index 0000000000..a1f7a6a0c5 --- /dev/null +++ b/lib/snmp/doc/src/snmp_manager_netif_1.gif diff --git a/lib/snmp/doc/src/snmp_manager_netif_1.ps b/lib/snmp/doc/src/snmp_manager_netif_1.ps new file mode 100644 index 0000000000..913997d0bd --- /dev/null +++ b/lib/snmp/doc/src/snmp_manager_netif_1.ps @@ -0,0 +1,305 @@ +%!PS-Adobe-3.0 +%%Creator: GIMP PostScript file plugin V 1.16 by Peter Kirchgessner +%%Title: /usr/local/ccase/vws/bmk/bmk_app_dev_snap/clearcase/otp/libraries/snmp/doc/src/snmp_manager_netif_1.ps +%%CreationDate: Mon Jul 19 16:24:48 2004 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 453 74 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228346456694 14.173228346456694 translate +% Translate to begin of first scanline +0 59 translate +438 -59 scale +% Image geometry +438 59 8 +% Transformation matrix +[ 438 0 0 59 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 438 string def +/gstr 438 string def +/bstr 438 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 13832 ASCII Bytes +colorimage +Jc:6"Jc>WIoDm\GJ,~> +Jc:6"Jc>WIoDm\GJ,~> +Jc:6"Jc>WIoDm\GJ,~> +Jc:6"L&UlJo`"XdjSjZ~> +Jc:6"L&UlJo`"XdjSjZ~> +Jc:6"L&UlJo`"XdjSjZ~> +Jc<Iap],mEdf04GjSo,YkPfu~> +Jc<Iap],mEdf04GjSo,YkPfu~> +Jc<Iap],mEdf04GjSo,YkPfu~> +Jc<[gqZ-EjquD<Ig&D!OhZ!NTl2H2~> +Jc<[gqZ-EjquD<Ig&D!OhZ!NTl2H2~> +Jc<[gqZ-EjquD<Ig&D!OhZ!NTl2H2~> +Jc<airrDHcrr@WLhZ!KSgA_'Om/DM~> +Jc<airrDHcrr@WLhZ!KSgA_'Om/DM~> +Jc<airrDHcrr@WLhZ!KSgA_'Om/DM~> +mf*1cJc=U,rrD<_rr@WLir8rXeGfIJmf%_~> +mf*1cJc=U,rrD<_rr@WLir8rXeGfIJmf%_~> +mf*1cJc=U,rrD<_rr@WLir8rXeGfIJmf%_~> +nc&Lfrr2lsJc=d1rrD0[rr@WLjo,5[d/O%FnG[q~> +nc&Lfrr2lsJc=d1rrD0[rr@WLjo,5[d/O%FnG[q~> +nc&Lfrr2lsJc=d1rrD0[rr@WLjo,5[d/O%FnG[q~> +o)8Uhq#:9nJc=p5rrD$Wrr@WLl2L\_c2I\Cnc"%~> +o)8Uhq#:9nJc=p5rrD$Wrr@WLl2L\_c2I\Cnc"%~> +o)8Uhq#:9nJc=p5rrD$Wrr@WLl2L\_c2I\Cnc"%~> +oDS^ip&=skJc>$8!!(jSrr@WLm/?tbb5VD@oDX7~> +oDS^ip&=skJc>$8!!(jSrr@WLm/?tbb5VD@oDX7~> +oDS^ip&=skJc>$8!!(jSrr@WLm/?tbb5VD@oDX7~> +o_ngjo)8UhnG`=cK`1rOgAV'PJc>*:!!((=!!)ZjJ,~> +o_ngjo)8UhnG`=cK`1rOgAV'PJc>*:!!((=!!)ZjJ,~> +o_ngjo)8UhnG`=cK`1rOgAV'PJc>*:!!((=!!)ZjJ,~> +o_ngjnbrLgoD\air;Q]rM#RDSf_tjNJc>3=rrC%;rrDclJ,~> +o_ngjnbrLgoD\air;Q]rM#RDSf_tjNJc>3=rrC%;rrDclJ,~> +o_ngjnbrLgoD\air;Q]rM#RDSf_tjNJc>3=rrC%;rrDclJ,~> +p&4pkn,<:ep&4pkq#:9nMuE\Vec,RKJc><@!!'k7!!)cmJ,~> +p&4pkn,<:ep&4pkq#:9nMuE\Vec,RKJc><@!!'k7!!)cmJ,~> +p&4pkn,<:ep&4pkq#:9nMuE\Vec,RKJc><@!!'k7!!)cmJ,~> +p&4pkmf!1dpAP$lpAP$lNW&nXdf'4HJc>BB!!'e5!!)fnJ,~> +p&4pkmf!1dpAP$lpAP$lNW&nXdf'4HJc>BB!!'e5!!)fnJ,~> +p&4pkmf!1dpAP$lpAP$lNW&nXdf'4HJc>BB!!'e5!!)fnJ,~> +pAP$lm/?tbq#16no_ngjO8]+Zd/F"FJc>EC!!'b4!!)ioJ,~> +pAP$lm/?tbq#16no_ngjO8]+Zd/F"FJc>EC!!'b4!!)ioJ,~> +pAP$lm/?tbq#16no_ngjO8]+Zd/F"FJc>EC!!'b4!!)ioJ,~> +pAP$lli$kaqYgHpo)8UhOT#4[d/F"FJc>HD!!'_3!!)ioJ,~> +pAP$lli$kaqYgHpo)8UhOT#4[d/F"FJc>HD!!'_3!!)ioJ,~> +pAP$lli$kaqYgHpo)8UhOT#4[d/F"FJc>HD!!'_3!!)ioJ,~> +rVlcrrVccslM^b`rVlfsnGWCfP5YF]cMdeDJc>NF!!'Y1!!)lpJ,~> +rVlcrrVccslM^b`rVlfsnGWCfP5YF]cMdeDJc>NF!!'Y1!!)lpJ,~> +rVlcrrVccslM^b`rVlfsnGWCfP5YF]cMdeDJc>NF!!'Y1!!)lpJ,~> +s8N#urr2cplMg_^mJ[(cq>UBoh>RZ=>6&GS>;DuLrW2"He,B=IcMdeDJc>QG!!'S/!!)oqJ,~> +s8N#urr2cplMg_^mJ[(cq>UBoh>RZ=>6&GS>;DuLrW2"He,B=IcMdeDJc>QG!!'S/!!)oqJ,~> +s8N#urr2cplMg_^mJ[(cq>UBoh>RZ=>6&GS>;DuLrW2"He,B=IcMdeDJc>QG!!'S/!!)oqJ,~> +s8DuuqYpKpd/Nh@s8N#uhYmQ)!<2ruUC?tt!TFO;rVurBrVur\rW-4'rG)Boqu-V#'BK,t10[sW +!*`Y_bPhJA\GcI.r;M3~> +s8DuuqYpKpd/Nh@s8N#uhYmQ)!<2ruUC?tt!TFO;rVurBrVur\rW-4'rG)Boqu-V#'BK,t10[sW +!*`Y_bPhJA\GcI.r;M3~> +s8DuuqYpKpd/Nh@s8N#uhYmQ)!<2ruUC?tt!TFO;rVurBrVur\rW-4'rG)Boqu-V#'BK,t10[sW +!*`Y_bPhJA\GcI.r;M3~> +s8Duu]D_d1hu3Z*!<2s9N%=lX)h\,o1<`r&COQ3A>AJ"Qir6enFA6l;rVurBrVur\rW1IJrVce4 +qu-WU'BK,t;uZdF!<2srbl.SB\,H@-r;M3~> +s8Duu]D_d1hu3Z*!<2s9N%=lX)h\,o1<`r&COQ3A>AJ"Qir6enFA6l;rVurBrVur\rW1IJrVce4 +qu-WU'BK,t;uZdF!<2srbl.SB\,H@-r;M3~> +s8Duu]D_d1hu3Z*!<2s9N%=lX)h\,o1<`r&COQ3A>AJ"Qir6enFA6l;rVurBrVur\rW1IJrVce4 +qu-WU'BK,t;uZdF!<2srbl.SB\,H@-r;M3~> +!WE)0rVurVrXdNYCNMs"lMeX#lMcaZrnS7erX16grr/?Ir]7[jr^>iH!!(1@!!)3]!Rh&JrWuO& +r]1^O3\02'rr*XbFDF:Frr+qlN'nnkrr0M[@WVTcN;EMSdfB@G)rb(;CK'4R'9"t&r]1^O6mK'k +6mK)<_GbPNFR&i*!4De+!<)nI~> +!WE)0rVurVrXdNYCNMs"lMeX#lMcaZrnS7erX16grr/?Ir]7[jr^>iH!!(1@!!)3]!Rh&JrWuO& +r]1^O3\02'rr*XbFDF:Frr+qlN'nnkrr0M[@WVTcN;EMSdfB@G)rb(;CK'4R'9"t&r]1^O6mK'k +6mK)<_GbPNFR&i*!4De+!<)nI~> +!WE)0rVurVrXdNYCNMs"lMeX#lMcaZrnS7erX16grr/?Ir]7[jr^>iH!!(1@!!)3]!Rh&JrWuO& +r]1^O3\02'rr*XbFDF:Frr+qlN'nnkrr0M[@WVTcN;EMSdfB@G)rb(;CK'4R'9"t&r]1^O6mK'k +6mK)<_GbPNFR&i*!4De+!<)nI~> +!WE)/rVurWrW1IJrr*dN3r]+HKDngKrnS"^rmLj_CNO#HrerUrbiA[&!6Y9@!9a=kdf<<N;_n@O +iW.4%:#Zi`rXd:(rr1mW_Z$nerr*S<rhC/%rW1IJrVd`d]Dheu3oU.`r_<CO!5e`B%)W"N/,hTA +rr,=NrVur+rVursrdX~> +!WE)/rVurWrW1IJrr*dN3r]+HKDngKrnS"^rmLj_CNO#HrerUrbiA[&!6Y9@!9a=kdf<<N;_n@O +iW.4%:#Zi`rXd:(rr1mW_Z$nerr*S<rhC/%rW1IJrVd`d]Dheu3oU.`r_<CO!5e`B%)W"N/,hTA +rr,=NrVur+rVursrdX~> +!WE)/rVurWrW1IJrr*dN3r]+HKDngKrnS"^rmLj_CNO#HrerUrbiA[&!6Y9@!9a=kdf<<N;_n@O +iW.4%:#Zi`rXd:(rr1mW_Z$nerr*S<rhC/%rW1IJrVd`d]Dheu3oU.`r_<CO!5e`B%)W"N/,hTA +rr,=NrVur+rVursrdX~> +!WE)/rVurWrW1IJrr*J@!;$3,)o@7,ro+@crmLl4qu-]WRQ=C.rVur?rVur^rW1IJrr*%Qrr1mc +rr)rX'E7tE]3A`K'E8!j%0$7^'E6G\oD[2Iq#1<C!<2s'df=0!FCI;j%/p/8iXGhch$j;^h%TdH +/!J3ArVur+rVursrdX~> +!WE)/rVurWrW1IJrr*J@!;$3,)o@7,ro+@crmLl4qu-]WRQ=C.rVur?rVur^rW1IJrr*%Qrr1mc +rr)rX'E7tE]3A`K'E8!j%0$7^'E6G\oD[2Iq#1<C!<2s'df=0!FCI;j%/p/8iXGhch$j;^h%TdH +/!J3ArVur+rVursrdX~> +!WE)/rVurWrW1IJrr*J@!;$3,)o@7,ro+@crmLl4qu-]WRQ=C.rVur?rVur^rW1IJrr*%Qrr1mc +rr)rX'E7tE]3A`K'E8!j%0$7^'E6G\oD[2Iq#1<C!<2s'df=0!FCI;j%/p/8iXGhch$j;^h%TdH +/!J3ArVur+rVursrdX~> +!WE).rVurdrVurlrW1IJrr)qW)ufgO3[<Y`rospk3rUXurr1A@r^?bbdi8#[rrDWh!!(+>!!)6^ +!Rh&GrW2!lrr*bo'E8!r!7Ur,'E8!j'E8!e%0"]UlMfTJq#1<C!<2s!dfA\3rW2!lrVd>e'E8!e% +0$7^%0$7cUH2?>rVur)rVurtrdX~> +!WE).rVurdrVurlrW1IJrr)qW)ufgO3[<Y`rospk3rUXurr1A@r^?bbdi8#[rrDWh!!(+>!!)6^ +!Rh&GrW2!lrr*bo'E8!r!7Ur,'E8!j'E8!e%0"]UlMfTJq#1<C!<2s!dfA\3rW2!lrVd>e'E8!e% +0$7^%0$7cUH2?>rVur)rVurtrdX~> +!WE).rVurdrVurlrW1IJrr)qW)ufgO3[<Y`rospk3rUXurr1A@r^?bbdi8#[rrDWh!!(+>!!)6^ +!Rh&GrW2!lrr*bo'E8!r!7Ur,'E8!j'E8!e%0"]UlMfTJq#1<C!<2s!dfA\3rW2!lrVd>e'E8!e% +0$7^%0$7cUH2?>rVur)rVurtrdX~> +!WE).rVurfrr)olrWhFe!,H@S7*PZ0!P;;/rXV_4N;hg8@WYi>rcCkM9rn!erW)Qh!!)]k!c&Hb +rr)t7)f,9K!THNErW1J/rr*"8@WZ)QrVurdrVurrrW1IJrVcn7ro+UjrYXW.rr1mWir6e.rr1mj +rr1mcrr*SCrhBnsrW1IJrVd$PRf<<8:#ZibrX\!%rr1mcrr1^er_<CkbT$KZrrDWh!!'A)!!*#t +J,~> +!WE).rVurfrr)olrWhFe!,H@S7*PZ0!P;;/rXV_4N;hg8@WYi>rcCkM9rn!erW)Qh!!)]k!c&Hb +rr)t7)f,9K!THNErW1J/rr*"8@WZ)QrVurdrVurrrW1IJrVcn7ro+UjrYXW.rr1mWir6e.rr1mj +rr1mcrr*SCrhBnsrW1IJrVd$PRf<<8:#ZibrX\!%rr1mcrr1^er_<CkbT$KZrrDWh!!'A)!!*#t +J,~> +!WE).rVurfrr)olrWhFe!,H@S7*PZ0!P;;/rXV_4N;hg8@WYi>rcCkM9rn!erW)Qh!!)]k!c&Hb +rr)t7)f,9K!THNErW1J/rr*"8@WZ)QrVurdrVurrrW1IJrVcn7ro+UjrYXW.rr1mWir6e.rr1mj +rr1mcrr*SCrhBnsrW1IJrVd$PRf<<8:#ZibrX\!%rr1mcrr1^er_<CkbT$KZrrDWh!!'A)!!*#t +J,~> +!WE).rVurgrqui`rW/4iir8iUp&4pko_nnQ%&<h$!)<7f!TFOarWM'Vrosp`rVurfrr)oqrW,pt +rG*K9raH:Oh>UjlC\.OX12C>-IK![aFT,JQFT/m&@Y5?irW?q?!6kHA)rae*FBe$>!,LEiraH:X +r`]eQraH:OFA6OFX8Mtr!;$0i!;6<mCD0,6rW7]PCWcVV!<2tJ~> +!WE).rVurgrqui`rW/4iir8iUp&4pko_nnQ%&<h$!)<7f!TFOarWM'Vrosp`rVurfrr)oqrW,pt +rG*K9raH:Oh>UjlC\.OX12C>-IK![aFT,JQFT/m&@Y5?irW?q?!6kHA)rae*FBe$>!,LEiraH:X +r`]eQraH:OFA6OFX8Mtr!;$0i!;6<mCD0,6rW7]PCWcVV!<2tJ~> +!WE).rVurgrqui`rW/4iir8iUp&4pko_nnQ%&<h$!)<7f!TFOarWM'Vrosp`rVurfrr)oqrW,pt +rG*K9raH:Oh>UjlC\.OX12C>-IK![aFT,JQFT/m&@Y5?irW?q?!6kHA)rae*FBe$>!,LEiraH:X +r`]eQraH:OFA6OFX8Mtr!;$0i!;6<mCD0,6rW7]PCWcVV!<2tJ~> +!WE)nrW6jKC]=;7CE%'brW2"HkPbKd'Cbu$!;$3e!:Kgf.q2uHrqc]hrVurjrY%*\_M7/m2F +>AJ"Qiq$@SCOQ0\#@\AGraH:ON:d)L!:p-f!8RPWl2^,K]2R,VquHEh!!)Zj!]gb,rr)ua1'#Gq +!!*#tJ,~> +!WE)nrW6jKC]=;7CE%'brW2"HkPbKd'Cbu$!;$3e!:Kgf.q2uHrqc]hrVurjrY%*\_M7/m2F +>AJ"Qiq$@SCOQ0\#@\AGraH:ON:d)L!:p-f!8RPWl2^,K]2R,VquHEh!!)Zj!]gb,rr)ua1'#Gq +!!*#tJ,~> +!WE)nrW6jKC]=;7CE%'brW2"HkPbKd'Cbu$!;$3e!:Kgf.q2uHrqc]hrVurjrY%*\_M7/m2F +>AJ"Qiq$@SCOQ0\#@\AGraH:ON:d)L!:p-f!8RPWl2^,K]2R,VquHEh!!)Zj!]gb,rr)ua1'#Gq +!!*#tJ,~> +!WE)mrW5+hU]15m:&+\giXG#L!TFd^rVurjrqZW<rqQQirVurirXi*.K-T[\:&b,B]Dheu3r\+P +qu-cY)ufir'Cu,&!;-9f!8IMQ3WaD=lI#V.!;HHm!;$0k7"$iirX`kG!<2tMFDF:Fr]1^O6mJc3 +rY^?1CIG6&rjs[iF9$*8ro.-tCK'4R'9"t&oDSdkrr.E~> +!WE)mrW5+hU]15m:&+\giXG#L!TFd^rVurjrqZW<rqQQirVurirXi*.K-T[\:&b,B]Dheu3r\+P +qu-cY)ufir'Cu,&!;-9f!8IMQ3WaD=lI#V.!;HHm!;$0k7"$iirX`kG!<2tMFDF:Fr]1^O6mJc3 +rY^?1CIG6&rjs[iF9$*8ro.-tCK'4R'9"t&oDSdkrr.E~> +!WE)mrW5+hU]15m:&+\giXG#L!TFd^rVurjrqZW<rqQQirVurirXi*.K-T[\:&b,B]Dheu3r\+P +qu-cY)ufir'Cu,&!;-9f!8IMQ3WaD=lI#V.!;HHm!;$0k7"$iirX`kG!<2tMFDF:Fr]1^O6mJc3 +rY^?1CIG6&rjs[iF9$*8ro.-tCK'4R'9"t&oDSdkrr.E~> +!WE)mr\@3T%*\_M7/m2F>AJ"Qiq$@SCOK+pN;fS-ro-=?rr1nUCMRDN3YRH5/,nNArr,;@PP+nT +!;?E&!;cZp!;$0r:&b,j:&[Q[dfBA_"CaFkh$j2["mQd#ro+U^rVurkrqZVlrqQQirVurirWl6` +'=@bfCXW:]rWp^uro*pprj3pIrWp^urr*S<rhC/+rX(0frr/?IiW.4%:%S>c!<2tJ~> +!WE)mr\@3T%*\_M7/m2F>AJ"Qiq$@SCOK+pN;fS-ro-=?rr1nUCMRDN3YRH5/,nNArr,;@PP+nT +!;?E&!;cZp!;$0r:&b,j:&[Q[dfBA_"CaFkh$j2["mQd#ro+U^rVurkrqZVlrqQQirVurirWl6` +'=@bfCXW:]rWp^uro*pprj3pIrWp^urr*S<rhC/+rX(0frr/?IiW.4%:%S>c!<2tJ~> +!WE)mr\@3T%*\_M7/m2F>AJ"Qiq$@SCOK+pN;fS-ro-=?rr1nUCMRDN3YRH5/,nNArr,;@PP+nT +!;?E&!;cZp!;$0r:&b,j:&[Q[dfBA_"CaFkh$j2["mQd#ro+U^rVurkrqZVlrqQQirVurirWl6` +'=@bfCXW:]rWp^uro*pprj3pIrWp^urr*S<rhC/+rX(0frr/?IiW.4%:%S>c!<2tJ~> +!!)]k0N7t',O58&rr+F[rr/?Iro+UjrppQXr`]f[raPKur[Y&KrdA#1!6kF:ro+UjX((]"!!)Zj +q>e_<q#L6i!!)Wi$<-s'o.,5WrmLl4r;H`V%/^#-iZ%mriY1n^!!)cmPQ:RZ!!)Wi(.A.S/,ic< +dfBCH]3A`K'E6u"rr1^err*\F>@LeMrmLl=rmM;TrmLj_CNO#HiXG>U!W`6!J,~> +!!)]k0N7t',O58&rr+F[rr/?Iro+UjrppQXr`]f[raPKur[Y&KrdA#1!6kF:ro+UjX((]"!!)Zj +q>e_<q#L6i!!)Wi$<-s'o.,5WrmLl4r;H`V%/^#-iZ%mriY1n^!!)cmPQ:RZ!!)Wi(.A.S/,ic< +dfBCH]3A`K'E6u"rr1^err*\F>@LeMrmLl=rmM;TrmLj_CNO#HiXG>U!W`6!J,~> +!!)]k0N7t',O58&rr+F[rr/?Iro+UjrppQXr`]f[raPKur[Y&KrdA#1!6kF:ro+UjX((]"!!)Zj +q>e_<q#L6i!!)Wi$<-s'o.,5WrmLl4r;H`V%/^#-iZ%mriY1n^!!)cmPQ:RZ!!)Wi(.A.S/,ic< +dfBCH]3A`K'E6u"rr1^err*\F>@LeMrmLl=rmM;TrmLj_CNO#HiXG>U!W`6!J,~> +!!)]k#u1Eu;bd6ZrmLlHCBS*-rnS"^rXr.nl>'=Ho4%^udfA\4rk]*'%/p/.iY-_?iq*-L!;$3e +!6bB=!;?Bl!;-6j:&b,&h%M=<r[XH:rmOU@l4!YQrVcuc'E8!j'Cu,&!;6?f!2fbk!;ZTo!;$1> +:&a_t@X\7)!<26`e,J>?ro+UjrnS"^rosL4ro+UjdfA\4h$j;^dfA\3rW2!lnGWIhrr.E~> +!!)]k#u1Eu;bd6ZrmLlHCBS*-rnS"^rXr.nl>'=Ho4%^udfA\4rk]*'%/p/.iY-_?iq*-L!;$3e +!6bB=!;?Bl!;-6j:&b,&h%M=<r[XH:rmOU@l4!YQrVcuc'E8!j'Cu,&!;6?f!2fbk!;ZTo!;$1> +:&a_t@X\7)!<26`e,J>?ro+UjrnS"^rosL4ro+UjdfA\4h$j;^dfA\3rW2!lnGWIhrr.E~> +!!)]k#u1Eu;bd6ZrmLlHCBS*-rnS"^rXr.nl>'=Ho4%^udfA\4rk]*'%/p/.iY-_?iq*-L!;$3e +!6bB=!;?Bl!;-6j:&b,&h%M=<r[XH:rmOU@l4!YQrVcuc'E8!j'Cu,&!;6?f!2fbk!;ZTo!;$1> +:&a_t@X\7)!<26`e,J>?ro+UjrnS"^rosL4ro+UjdfA\4h$j;^dfA\3rW2!lnGWIhrr.E~> +!!)]k$<-s'o.,5WrmLl4r;H`V%0$5=X#cHVX!=[Grr1@HlMge"%,qs!rWM3\_G`5^rVurfrqui? +rqlchrVurkrW6j[C]=;C]-I=Si_s<.>O)4e9k'([rWcm@C\)!8CVocD!!)WiqZ*MmqZ-Bi!!)Wi +,t.b3N#VBfdfBC,!94!p'E6u)rr1mcrr1mWir6e.rr*SCrhBo$rWasBrr1A@iY1h\!W`6!J,~> +!!)]k$<-s'o.,5WrmLl4r;H`V%0$5=X#cHVX!=[Grr1@HlMge"%,qs!rWM3\_G`5^rVurfrqui? +rqlchrVurkrW6j[C]=;C]-I=Si_s<.>O)4e9k'([rWcm@C\)!8CVocD!!)WiqZ*MmqZ-Bi!!)Wi +,t.b3N#VBfdfBC,!94!p'E6u)rr1mcrr1mWir6e.rr*SCrhBo$rWasBrr1A@iY1h\!W`6!J,~> +!!)]k$<-s'o.,5WrmLl4r;H`V%0$5=X#cHVX!=[Grr1@HlMge"%,qs!rWM3\_G`5^rVurfrqui? +rqlchrVurkrW6j[C]=;C]-I=Si_s<.>O)4e9k'([rWcm@C\)!8CVocD!!)WiqZ*MmqZ-Bi!!)Wi +,t.b3N#VBfdfBC,!94!p'E6u)rr1mcrr1mWir6e.rr*SCrhBo$rWasBrr1A@iY1h\!W`6!J,~> +!!)]k!)<Il(u5iUrr+F:rr1A@rospk3r\^Z7/lck1@tME#:lkSrdA#1'E.n6iY2=_13E3g!!)Ke +rW(.@rW)Qh!!(+>!!)Qgr;`_oquHEh!!)]k!c&a'rVdnU>6&I<K/.4O!/"JaFT,JQFT28l12C>- +IK$i/@Y5?nrX%R_@WYi>@K:3"oDS^irr.E~> +!!)]k!)<Il(u5iUrr+F:rr1A@rospk3r\^Z7/lck1@tME#:lkSrdA#1'E.n6iY2=_13E3g!!)Ke +rW(.@rW)Qh!!(+>!!)Qgr;`_oquHEh!!)]k!c&a'rVdnU>6&I<K/.4O!/"JaFT,JQFT28l12C>- +IK$i/@Y5?nrX%R_@WYi>@K:3"oDS^irr.E~> +!!)]k!)<Il(u5iUrr+F:rr1A@rospk3r\^Z7/lck1@tME#:lkSrdA#1'E.n6iY2=_13E3g!!)Ke +rW(.@rW)Qh!!(+>!!)Qgr;`_oquHEh!!)]k!c&a'rVdnU>6&I<K/.4O!/"JaFT,JQFT28l12C>- +IK$i/@Y5?nrX%R_@WYi>@K:3"oDS^irr.E~> +!!)`l!c'#rrr*\F,Q@]%;dsiQlMgcW@Z:<c;euC3@T37)'AZT&CLZm>$u=\uraH:Xr_if+oCr4a +!:Bac!6bBA!:p*h!6G->!:^!e!2fbp!;$0i!7^uOl2^,K]2Rkk!!*#tJ,~> +!!)`l!c'#rrr*\F,Q@]%;dsiQlMgcW@Z:<c;euC3@T37)'AZT&CLZm>$u=\uraH:Xr_if+oCr4a +!:Bac!6bBA!:p*h!6G->!:^!e!2fbp!;$0i!7^uOl2^,K]2Rkk!!*#tJ,~> +!!)`l!c'#rrr*\F,Q@]%;dsiQlMgcW@Z:<c;euC3@T37)'AZT&CLZm>$u=\uraH:Xr_if+oCr4a +!:Bac!6bBA!:p*h!6G->!:^!e!2fbp!;$0i!7^uOl2^,K]2Rkk!!*#tJ,~> +!!'M-!!&ho!!(.?!!)Hd!!&nqrrDWh!!(LIs#L4'@d<+T!!*#tJ,~> +!!'M-!!&ho!!(.?!!)Hd!!&nqrrDWh!!(LIs#L4'@d<+T!!*#tJ,~> +!!'M-!!&ho!!(.?!!)Hd!!&nqrrDWh!!(LIs#L4'@d<+T!!*#tJ,~> +!WE)/rVuqorVur@rVuqLrW2uuZi0q)rr.E~> +!WE)/rVuqorVur@rVuqLrW2uuZi0q)rr.E~> +!WE)/rVuqorVur@rVuqLrW2uuZi0q)rr.E~> +s8Duu\c)R/V#C>ob5MA@Jc>]K!!'G+!!)usJ,~> +s8Duu\c)R/V#C>ob5MA@Jc>]K!!'G+!!)usJ,~> +s8Duu\c)R/V#C>ob5MA@Jc>]K!!'G+!!)usJ,~> +rr2ot]D_d1U](5nbl.SBJc>ZJ!!'G+!!)usJ,~> +rr2ot]D_d1U](5nbl.SBJc>ZJ!!'G+!!)usJ,~> +rr2ot]D_d1U](5nbl.SBJc>ZJ!!'G+!!)usJ,~> +r;QZq^]"35UAb,mbl.SBJc>ZJ!!'G+!!)usJ,~> +r;QZq^]"35UAb,mbl.SBJc>ZJ!!'G+!!)usJ,~> +r;QZq^]"35UAb,mbl.SBJc>ZJ!!'G+!!)usJ,~> +q>L?o_#=<6U&G#lcMdeDJc>TH!!'M-!!)rrJ,~> +q>L?o_#=<6U&G#lcMdeDJc>TH!!'M-!!)rrJ,~> +q>L?o_#=<6U&G#lcMdeDJc>TH!!'M-!!)rrJ,~> +q>L?o_>XE7T`+okcMdeDJc>QG!!'P.!!)rrJ,~> +q>L?o_>XE7T`+okcMdeDJc>QG!!'P.!!)rrJ,~> +q>L?o_>XE7T`+okcMdeDJc>QG!!'P.!!)rrJ,~> +q#16n`;]c:T)J]id/F"FJc>NF!!'S/!!)oqJ,~> +q#16n`;]c:T)J]id/F"FJc>NF!!'S/!!)oqJ,~> +q#16n`;]c:T)J]id/F"FJc>NF!!'S/!!)oqJ,~> +q#16nbPq><SGiKgd/F"FJc>KE!!'Y1!!)lpJ,~> +q#16nbPq><SGiKgd/F"FJc>KE!!'Y1!!)lpJ,~> +q#16nbPq><SGiKgd/F"FJc>KE!!'Y1!!)lpJ,~> +p\k-mc2I\CPl:X_df'4HJc>EC!!'_3!!)ioJ,~> +p\k-mc2I\CPl:X_df'4HJc>EC!!'_3!!)ioJ,~> +p\k-mc2I\CPl:X_df'4HJc>EC!!'_3!!)ioJ,~> +p\k-mc2I\CPPtO^ec,RKJc>?A!!'b4!!)ioJ,~> +p\k-mc2I\CPPtO^ec,RKJc>?A!!'b4!!)ioJ,~> +p\k-mc2I\CPPtO^ec,RKJc>?A!!'b4!!)ioJ,~> +p\k-mcMdeDOo>=\fDYaMJc>9?!!'e5!!)fnJ,~> +p\k-mcMdeDOo>=\fDYaMJc>9?!!'e5!!)fnJ,~> +p\k-mcMdeDOo>=\fDYaMJc>9?!!'e5!!)fnJ,~> +pAP$ld/F"FO8f.ZgAV'PJc>3=!!'k7!!)cmJ,~> +pAP$ld/F"FO8f.ZgAV'PJc>3=!!'k7!!)cmJ,~> +pAP$ld/F"FO8f.ZgAV'PJc>3=!!'k7!!)cmJ,~> +pAP$ld/F"FNW&nXh>[ESJc>-;!!'t:rrDclJ,~> +pAP$ld/F"FNW&nXh>[ESJc>-;!!'t:rrDclJ,~> +pAP$ld/F"FNW&nXh>[ESJc>-;!!'t:rrDclJ,~> +pAP$lkl1;Vo_ngjMuN_Vi;N]VJc>$8rrC+=!!)ZjJ,~> +pAP$lkl1;Vo_ngjMuN_Vi;N]VJc>$8rrC+=!!)ZjJ,~> +pAP$lkl1;Vo_ngjMuN_Vi;N]VJc>$8rrC+=!!)ZjJ,~> +p&4pkli-nap\t!hrVlfsM#RDSjSo/ZJc=p5!!(1@rrDZiJ,~> +p&4pkli-nap\t!hrVlfsM#RDSjSo/ZJc=p5!!(1@rrDZiJ,~> +p&4pkli-nap\t!hrVlfsM#RDSjSo/ZJc=p5!!(1@rrDZiJ,~> +o_ngjmf*4dmf*.bK`:uOkl1S^Jc=g2!!(7B!!)QgJ,~> +o_ngjmf*4dmf*.bK`:uOkl1S^Jc=g2!!(7B!!)QgJ,~> +o_ngjmf*4dmf*.bK`:uOkl1S^Jc=g2!!(7B!!)QgJ,~> +oD\ainbrLgJc=p5rrDEbrr@WLj8T&Yd/O%FnG[q~> +oD\ainbrLgJc=p5rrDEbrr@WLj8T&Yd/O%FnG[q~> +oD\ainbrLgJc=p5rrDEbrr@WLj8T&Yd/O%FnG[q~> +nc&IepAP$lJc=g2qZ-EjqZ)3Hhu<WUeGfIJmf%_~> +nc&IepAP$lJc=g2qZ-EjqZ)3Hhu<WUeGfIJmf%_~> +nc&IepAP$lJc=g2qZ-EjqZ)3Hhu<WUeGfIJmf%_~> +mJd%ar;Q]rJc=R+p],mEfDbaLgA_'Om/DM~> +mJd%ar;Q]rJc=R+p],mEfDbaLgA_'Om/DM~> +mJd%ar;Q]rJc=R+p],mEfDbaLgA_'Om/DM~> +l2LS\Jc:6"VuH\rhZ!NTl2H2~> +l2LS\Jc:6"VuH\rhZ!NTl2H2~> +l2LS\Jc:6"VuH\rhZ!NTl2H2~> +Jc:6"M#RARjSo,YkPfu~> +Jc:6"M#RARjSo,YkPfu~> +Jc:6"M#RARjSo,YkPfu~> +Jc:6"L&UlJo`"XdjSjZ~> +Jc:6"L&UlJo`"XdjSjZ~> +Jc:6"L&UlJo`"XdjSjZ~> +Jc:6"Jc>WIoDm\GJ,~> +Jc:6"Jc>WIoDm\GJ,~> +Jc:6"Jc>WIoDm\GJ,~> +Jc:6"Jc<jlJ,~> +Jc:6"Jc<jlJ,~> +Jc:6"Jc<jlJ,~> +Jc:6"Jc<jlJ,~> +Jc:6"Jc<jlJ,~> +Jc:6"Jc<jlJ,~> +%%EndData +showpage +%%Trailer +end +%%EOF diff --git a/lib/snmp/doc/src/snmp_mib_compiler.xml b/lib/snmp/doc/src/snmp_mib_compiler.xml new file mode 100644 index 0000000000..63af19f479 --- /dev/null +++ b/lib/snmp/doc/src/snmp_mib_compiler.xml @@ -0,0 +1,252 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE chapter SYSTEM "chapter.dtd"> + +<chapter> + <header> + <copyright> + <year>1997</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>The MIB Compiler</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_mib_compiler.xml</file> + </header> + <p>The chapter <em>The MIB Compiler</em> describes the MIB compiler + and contains the following topics: + </p> + <list type="bulleted"> + <item>Operation</item> + <item>Import</item> + <item>Consistency checking between MIBs</item> + <item>.hrl file generation</item> + <item>Emacs integration</item> + <item>Deviations from the standard + </item> + </list> + <note> + <p>When importing MIBs, ensure that the imported MIBs as well as the + importing MIB are compiled using the same version of the + SNMP-compiler.</p> + </note> + + <section> + <title>Operation</title> + <p>The MIB must be written as a text file in SMIv1 or SMIv2 using + an ASN.1 notation before + it will be compiled. This text file must have the same name as the MIB, + but with the suffix <c>.mib</c>. This is necessary for handling + the <c>IMPORT</c> statement. + </p> + <p>The association file, which contains the names of + instrumentation functions for the MIB, should have the suffix + <c>.funcs</c>. If the compiler does not find the association file, + it gives a warning message and uses default instrumentation + functions. (See <seealso marker="snmp_instr_functions#snmp_3">Default Instrumentation</seealso> for more details). + </p> + <p>The MIB compiler is started with a call to + <c><![CDATA[snmpc:compile(<mibname>).]]></c> For example: + </p> + <code type="none"> +snmpc:compile("RFC1213-MIB"). + </code> + <p>The output is a new file which is called <c><![CDATA[<mibname>.bin]]></c>. + </p> + <p>The MIB compiler understands both SMIv1 and SMIv2 MIBs. It + uses the MODULE-IDENTITY statement to determinate if the MIB is + written in SMI version 1 or 2. + </p> + </section> + + <section> + <title>Importing MIBs</title> + <p>The compiler handles the <c>IMPORT</c> statement. It is important to + import the compiled file and not the ASN.1 (source) file. A MIB must + be recompiled to make changes visible to other MIBs importing it. + </p> + <p>The compiled files of the imported MIBs must be present in the + current directory, or a directory in the current path. The path is + supplied with the <c>{i, Path}</c> option, for example: + </p> + <code type="none"> +snmpc:compile("MY-MIB", + [{i, ["friend_mibs/", "../standard_mibs/"]}]). + </code> + <p>It is also possible to import MIBs from OTP applications in an + <c>"include_lib"</c> like fashion with the <c>il</c> + option. Example: + </p> + <code type="none"> +snmpc:compile("MY-MIB", + [{il, ["snmp/priv/mibs/", "myapp/priv/mibs/"]}]). + </code> + <p>finds the latest version of the <c>snmp</c> and <c>myapp</c> + applications in the OTP system and uses the expanded paths as + include paths. + </p> + <p>Note that an SMIv2 MIB can import an SMIv1 MIB and vice versa. + </p> + <p>The following MIBs are built-ins of the Erlang SNMP compiler: + SNMPv2-SMI, RFC-1215, RFC-1212, SNMPv2-TC, SNMPv2-CONF, and + RFC1155-SMI. They cannot therefore be compiled separately. + </p> + </section> + + <section> + <title>MIB Consistency Checking</title> + <p>When an MIB is compiled, the compiler detects if several + managed objects use the same <c>OBJECT IDENTIFIER</c>. If that is + the case, it issues an error message. However, the compiler cannot + detect Oid conflicts between different MIBs. These kinds of + conflicts generate an error at load time. To avoid this, the + following function can be used to do consistency checking between + MIBs: + </p> + <pre> + +erl><input>snmpc:is_consistent(ListOfMibNames).</input> + </pre> + <p><c>ListOfMibNames</c> is a list of compiled MIBs, for example + <c>["RFC1213-MIB", "MY-MIB"]</c>. The function also performs + consistency checking of trap definitions.</p> + </section> + + <section> + <title>.hrl File Generation</title> + <p>It is possible to generate an <c>.hrl</c> file which contains + definitions of Erlang constants from a compiled MIB file. This + file can then be included in Erlang source code. The file will + contain constants for: + </p> + <list type="bulleted"> + <item>object Identifiers for tables, table entries and variables</item> + <item>column numbers</item> + <item>enumerated values</item> + <item>default values for variables and table columns. + </item> + </list> + <p>Use the following command to generate a .hrl file from an MIB: + </p> + <pre> +erl><input>snmpc:mib_to_hrl(MibName).</input> + </pre> + </section> + + <section> + <title>Emacs Integration</title> + <p>With the Emacs editor, the <c>next-error</c> (<c>C-X `</c>) + function can be used indicate where a compilation error occurred, + provided the error message is described by a line number. + </p> + <p>Use <c>M-x compile</c> to compile an MIB from inside Emacs, and + enter: + </p> + <pre> + <input>erl -s snmpc compile <MibName> -noshell</input> + </pre> + <p>An example of <c><![CDATA[<MibName>]]></c> is <c>RFC1213-MIB</c>. + </p> + </section> + + <section> + <title>Compiling from a Shell or a Makefile</title> + <p>The <c>erlc</c> commands can be used to compile SNMP MIBs. Example: + </p> + <pre> + <input>erlc MY-MIB.mib</input> + </pre> + <p>All the standard <c>erlc</c> flags are supported, e.g. + </p> + <pre> + <input>erlc -I mymibs -o mymibs -W MY-MIB.mib</input> + </pre> + <p>The flags specific to the MIB compiler can be specified by + using the <c>+</c> syntax: + </p> + <pre> + <input>erlc +'{group_check,false}' MY-MIB.mib</input> + </pre> + </section> + + <section> + <title>Deviations from the Standard</title> + <p>In some aspects the Erlang MIB compiler does not follow or + implement the SMI fully. Here are the differences: + </p> + <list type="bulleted"> + <item> + <p>Tables must be written in the following order: + <c>tableObject</c>, <c>entryObject</c>, <c>column1</c>, ..., + <c>columnN</c> (in order).</p> + </item> + <item> + <p>Integer values, for example in the <c>SIZE</c> expression + must be entered in decimal syntax, not in hex or bit syntax.</p> + </item> + <item> + <p>Symbolic names must be unique within a MIB and within a + system.</p> + </item> + <item> + <p>Hyphens are allowed in SMIv2 (a pragmatic approach). The + reason for this is that according to SMIv2, hyphens are allowed + for objects converted from SMIv1, but not for others. This is + impossible to check for the compiler.</p> + </item> + <item> + <p>If a word is a keyword in any of SMIv1 or SMIv2, it is a + keyword in the compiler (deviates from SMIv1 only).</p> + </item> + <item> + <p>Indexes in a table must be objects, not types (deviates + from SMIv1 only).</p> + </item> + <item> + <p>A subset of all semantic checks on types are + implemented. For example, strictly the <c>TimeTicks</c> may not + be sub-classed but the compiler allows this (standard MIBs must + pass through the compiler) (deviates from SMIv2 only).</p> + </item> + <item> + <p>The <c>MIB.Object</c> syntax is not implemented (since all + objects must be unique anyway).</p> + </item> + <item> + <p>Two different names cannot define the same OBJECT IDENTIFIER.</p> + </item> + <item> + <p>The type checking in the SEQUENCE construct is non-strict + (i.e. subtypes may be specified). The reason for this is + that some standard MIBs use this.</p> + </item> + <item>A definition has normally a status field. When the status field + has the value deprecated, then the MIB-compiler will ignore this + definition. With the MIB-compiler option <c>{deprecated,true}</c> + the MIB-compiler does not ignore the deprecated definitions.</item> + <item>An object has a DESCRIPTIONS field. The descriptions-field will + not be included in the compiled mib by default. In order to get + the description, the mib must be compiled with the option + <c>description</c>.</item> + </list> + </section> +</chapter> + diff --git a/lib/snmp/doc/src/snmp_notification_mib.xml b/lib/snmp/doc/src/snmp_notification_mib.xml new file mode 100644 index 0000000000..d1d83570d1 --- /dev/null +++ b/lib/snmp/doc/src/snmp_notification_mib.xml @@ -0,0 +1,131 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>1998</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmp_notification_mib</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_notification_mib.xml</file> + </header> + <module>snmp_notification_mib</module> + <modulesummary>Instrumentation Functions for SNMP-NOTIFICATION-MIB</modulesummary> + <description> + <p>The module <c>snmp_notification_mib</c> implements the + instrumentation functions for the + SNMP-NOTIFICATION-MIB, and functions for configuring the database. + </p> + <p>The configuration files are described in the SNMP User's Manual.</p> + </description> + <funcs> + <func> + <name>configure(ConfDir) -> void()</name> + <fsummary>Configure the SNMP-NOTIFICATION-MIB</fsummary> + <type> + <v>ConfDir = string()</v> + </type> + <desc> + <p>This function is called from the supervisor at system + start-up. + </p> + <p>Inserts all data in the configuration files into the + database and destroys all old rows with StorageType + <c>volatile</c>. The rows created from the configuration file + will have StorageType <c>nonVolatile</c>. + </p> + <p>If an error is found in the configuration file, it is + reported using the function <c>config_err/2</c> of the + error report module, + and the function fails with reason <c>configuration_error</c>. + </p> + <p><c>ConfDir</c> is a string which points to the directory + where the configuration files are found. + </p> + <p>The configuration file read is: <c>notify.conf</c>. + </p> + </desc> + </func> + <func> + <name>reconfigure(ConfDir) -> void()</name> + <fsummary>Configure the SNMP-NOTIFICATION-MIB</fsummary> + <type> + <v>ConfDir = string()</v> + </type> + <desc> + <p>Inserts all data in the configuration files into the + database and destroys all old data, including the rows with + StorageType <c>nonVolatile</c>. The rows created from the + configuration file will have StorageType <c>nonVolatile</c>. + </p> + <p>Thus, the data in the SNMP-NOTIFICATION-MIB, after this + function has been called, is from the configuration files. + </p> + <p>If an error is found in the configuration file, it is + reported using the function <c>config_err/2</c> of the + error report module, + and the function fails with reason <c>configuration_error</c>. + </p> + <p><c>ConfDir</c> is a string which points to the directory + where the configuration files are found. + </p> + <p>The configuration file read is: <c>notify.conf</c>. + <marker id="add_notify"></marker> +</p> + </desc> + </func> + <func> + <name>add_notify(Name, Tag, Type) -> Ret</name> + <fsummary>Added one notify definition</fsummary> + <type> + <v>Name = string()</v> + <v>Tag = string()</v> + <v>Type = trap | inform</v> + <v>Ret = {ok, Key} | {error, Reason}</v> + <v>Key = term()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Adds a notify definition to the agent config. + Equivalent to one line in the <c>notify.conf</c> file.</p> + <marker id="delete_notify"></marker> + </desc> + </func> + <func> + <name>delete_notify(Key) -> Ret</name> + <fsummary>Delete one notify definition</fsummary> + <type> + <v>Key = term()</v> + <v>Ret = ok | {error, Reason}</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Delete a notify definition from the agent config.</p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmp_pdus.xml b/lib/snmp/doc/src/snmp_pdus.xml new file mode 100644 index 0000000000..6c323c3ad9 --- /dev/null +++ b/lib/snmp/doc/src/snmp_pdus.xml @@ -0,0 +1,204 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>1996</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmp_pdus</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_pdus.xml</file> + </header> + <module>snmp_pdus</module> + <modulesummary>Encode and Decode Functions for SNMP PDUs</modulesummary> + <description> + <p>RFC1157, RFC1905 and/or RFC2272 should be studied carefully + before using this module, <c>snmp_pdus</c>. + </p> + <p>The module <c>snmp_pdus</c> contains functions for encoding + and decoding of + SNMP protocol data units (PDUs). In short, this module converts a + list of bytes to Erlang record representations and vice versa. + The record definitions can be found in the file + <c>snmp/include/snmp_types.hrl</c>. If snmpv3 is used, the module + that includes <c>snmp_types.hrl</c> must define the constant + <c>SNMP_USE_V3</c> before the header file is included. Example:</p> + <pre> +-define(SNMP_USE_V3, true). +-include_lib("snmp/include/snmp_types.hrl"). </pre> + <p>Encoding and decoding must be done explicitly when writing your + own Net if process. + </p> + </description> + <funcs> + <func> + <name>dec_message([byte()]) -> Message</name> + <fsummary>Decode an SNMP Message</fsummary> + <type> + <v>Message = #message</v> + </type> + <desc> + <p>Decodes a list of bytes into an SNMP Message. Note, if there + is a v3 message, the <c>msgSecurityParameters</c> are not + decoded. They must be explicitly decoded by a call to a + security model specific decoding function, + e.g. <c>dec_usm_security_parameters/1</c>. Also note, if + the <c>scopedPDU</c> is encrypted, the OCTET STRING encoded + <c>encryptedPDU</c> will be present in the <c>data</c> field.</p> + </desc> + </func> + <func> + <name>dec_message_only([byte()]) -> Message</name> + <fsummary>Decode an SNMP Message, but not the data part</fsummary> + <type> + <v>Message = #message</v> + </type> + <desc> + <p>Decodes a list of bytes into an SNMP Message, but does not + decode the data part of the Message. That means, data is still + a list of bytes, normally an encoded <c>PDU</c> (v1 and V2) or an + encoded and possibly encrypted <c>scopedPDU</c> (v3).</p> + </desc> + </func> + <func> + <name>dec_pdu([byte()]) -> Pdu</name> + <fsummary>Decode an SNMP Pdu</fsummary> + <type> + <v>Pdu = #pdu</v> + </type> + <desc> + <p>Decodes a list of bytes into an SNMP Pdu.</p> + </desc> + </func> + <func> + <name>dec_scoped_pdu([byte()]) -> ScopedPdu</name> + <fsummary>Decode an SNMP ScopedPdu</fsummary> + <type> + <v>ScopedPdu = #scoped_pdu</v> + </type> + <desc> + <p>Decodes a list of bytes into an SNMP ScopedPdu.</p> + </desc> + </func> + <func> + <name>dec_scoped_pdu_data([byte()]) -> ScopedPduData</name> + <fsummary>Decode an SNMP ScopedPduData</fsummary> + <type> + <v>ScopedPduData = #scoped_pdu | EncryptedPDU</v> + <v>EncryptedPDU = [byte()]</v> + </type> + <desc> + <p>Decodes a list of bytes into either a scoped pdu record, or + - if the scoped pdu was encrypted - to a list of bytes.</p> + </desc> + </func> + <func> + <name>dec_usm_security_parameters([byte()]) -> UsmSecParams</name> + <fsummary>Decode SNMP UsmSecurityParameters</fsummary> + <type> + <v>UsmSecParams = #usmSecurityParameters</v> + </type> + <desc> + <p>Decodes a list of bytes into an SNMP UsmSecurityParameters</p> + </desc> + </func> + <func> + <name>enc_encrypted_scoped_pdu(EncryptedScopedPdu) -> [byte()]</name> + <fsummary>Encode an encrypted SNMP scopedPDU</fsummary> + <type> + <v>EncryptedScopedPdu = [byte()]</v> + </type> + <desc> + <p>Encodes an encrypted SNMP ScopedPdu into an OCTET STRING + that can be used as the <c>data</c> field in a + <c>message</c> record, that later can be encoded with a call + to <c>enc_message_only/1</c>. + </p> + <p>This function should be used whenever the <c>ScopedPDU</c> + is encrypted.</p> + </desc> + </func> + <func> + <name>enc_message(Message) -> [byte()]</name> + <fsummary>Encode an SNMP Message</fsummary> + <type> + <v>Message = #message</v> + </type> + <desc> + <p>Encodes a message record to a list of bytes.</p> + </desc> + </func> + <func> + <name>enc_message_only(Message) -> [byte()]</name> + <fsummary>Encode an SNMP Message, but not the data part</fsummary> + <type> + <v>Message = #message</v> + </type> + <desc> + <p><c>Message</c> is a record where the <c>data</c> field is + assumed to be encoded (a list of bytes). If there is a v1 or v2 + message, the <c>data</c> field is an encoded <c>PDU</c>, and if + there is a v3 message, <c>data</c> is an encoded and possibly + encrypted <c>scopedPDU</c>.</p> + </desc> + </func> + <func> + <name>enc_pdu(Pd) -> [byte()]</name> + <fsummary>Encode an SNMP Pdu</fsummary> + <type> + <v>Pdu = #pdu</v> + </type> + <desc> + <p>Encodes an SNMP Pdu into a list of bytes.</p> + </desc> + </func> + <func> + <name>enc_scoped_pdu(ScopedPdu) -> [byte()]</name> + <fsummary>Encode an SNMP scopedPDU</fsummary> + <type> + <v>ScopedPdu = #scoped_pdu</v> + </type> + <desc> + <p>Encodes an SNMP ScopedPdu into a list of bytes, which can be + encrypted, and after encryption, encoded with + a call to <c>enc_encrypted_scoped_pdu/1</c>; or it can be + used as the <c>data</c> field in a <c>message</c> record, which + then can be encoded with <c>enc_message_only/1</c>.</p> + </desc> + </func> + <func> + <name>enc_usm_security_parameters(UsmSecParams) -> [byte()]</name> + <fsummary>Encode SNMP UsmSecurityParameters</fsummary> + <type> + <v>UsmSecParams = #usmSecurityParameters</v> + </type> + <desc> + <p>Encodes SNMP UsmSecurityParameters into a list of bytes.</p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmp_standard_mib.xml b/lib/snmp/doc/src/snmp_standard_mib.xml new file mode 100644 index 0000000000..e8dea46f32 --- /dev/null +++ b/lib/snmp/doc/src/snmp_standard_mib.xml @@ -0,0 +1,135 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>1996</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmp_standard_mib</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_standard_mib.xml</file> + </header> + <module>snmp_standard_mib</module> + <modulesummary>Instrumentation Functions for STANDARD-MIB and SNMPv2-MIB</modulesummary> + <description> + <p>The module <c>snmp_standard_mib</c> implements the instrumentation functions for the + STANDARD-MIB and SNMPv2-MIB, and functions for configuring the database. + </p> + <p>The configuration files are described in the SNMP User's Manual.</p> + </description> + <funcs> + <func> + <name>configure(ConfDir) -> void()</name> + <fsummary>Configure the STANDARD-MIB and SNMPv2-MIB</fsummary> + <type> + <v>ConfDir = string()</v> + </type> + <desc> + <p>This function is called from the supervisor at system + start-up. + </p> + <p>Inserts all data in the configuration files into the + database and destroys all old rows with StorageType + <c>volatile</c>. The rows created from the configuration file + will have StorageType <c>nonVolatile</c>. + </p> + <p>All <c>snmp</c> counters are set to zero. + </p> + <p>If an error is found in the configuration file, it is + reported using the function <c>config_err/2</c> of the error + report module, and the function fails with the reason + <c>configuration_error</c>. + </p> + <p><c>ConfDir</c> is a string which points to the directory + where the configuration files are found. + </p> + <p>The configuration file read is: <c>standard.conf</c>. + </p> + </desc> + </func> + <func> + <name>inc(Name) -> void()</name> + <name>inc(Name, N) -> void()</name> + <fsummary>Increment a variable in the MIB</fsummary> + <type> + <v>Name = atom()</v> + <v>N = integer()</v> + </type> + <desc> + <p>Increments a variable in the MIB with <c>N</c>, or one if + <c>N</c> is not specified.</p> + </desc> + </func> + <func> + <name>reconfigure(ConfDir) -> void()</name> + <fsummary>Configure the STANDARD-MIB and SNMPv2-MIB</fsummary> + <type> + <v>ConfDir = string()</v> + </type> + <desc> + <p>Inserts all data in the configuration files into the + database and destroys all old data, including the rows with + StorageType <c>nonVolatile</c>. The rows created from the + configuration file will have StorageType <c>nonVolatile</c>. + </p> + <p>Thus, the data in the SNMP-STANDARD-MIB and SNMPv2-MIB, + after this function has been called, is from the + configuration files. + </p> + <p>All <c>snmp</c> counters are set to zero. + </p> + <p>If an error is found in the configuration file, it is + reported using the function <c>config_err/2</c> of the error + report module, and the function fails with the reason + <c>configuration_error</c>. + </p> + <p><c>ConfDir</c> is a string which points to the directory + where the configuration files are found. + </p> + <p>The configuration file read is: <c>standard.conf</c>. + </p> + </desc> + </func> + <func> + <name>reset() -> void()</name> + <fsummary>Reset all <c>snmp</c>counters to 0</fsummary> + <desc> + <p>Resets all <c>snmp</c> counters to 0.</p> + </desc> + </func> + <func> + <name>sys_up_time() -> Time</name> + <fsummary>Get the system up time</fsummary> + <type> + <v>Time = int()</v> + </type> + <desc> + <p>Gets the system up time in hundredth of a second.</p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmp_target_mib.xml b/lib/snmp/doc/src/snmp_target_mib.xml new file mode 100644 index 0000000000..4a36be19a3 --- /dev/null +++ b/lib/snmp/doc/src/snmp_target_mib.xml @@ -0,0 +1,195 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>1998</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmp_target_mib</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_target_mib.xml</file> + </header> + <module>snmp_target_mib</module> + <modulesummary>Instrumentation Functions for SNMP-TARGET-MIB</modulesummary> + <description> + <p>The module <c>snmp_target_mib</c> implements the instrumentation + functions for the SNMP-TARGET-MIB, + and functions for configuring the database. </p> + <p>The configuration files are described in the SNMP User's Manual.</p> + + <marker id="configure"></marker> + </description> + + <funcs> + <func> + <name>configure(ConfDir) -> void()</name> + <fsummary>Configure the SNMP-TARGET-MIB</fsummary> + <type> + <v>ConfDir = string()</v> + </type> + <desc> + <p>This function is called from the supervisor at system + start-up. + </p> + <p>Inserts all data in the configuration files into the + database and destroys all old rows with StorageType + <c>volatile</c>. The rows created from the configuration file + will have StorageType <c>nonVolatile</c>. </p> + <p>All <c>snmp</c> counters are set to zero. </p> + <p>If an error is found in the configuration file, it is + reported using the function <c>config_err/2</c> of the error + report module, and the function fails with the reason + <c>configuration_error</c>. </p> + <p><c>ConfDir</c> is a string which points to the directory + where the configuration files are found. </p> + <p>The configuration files read are: <c>target_addr.conf</c> + and <c>target_params.conf</c>. </p> + + <marker id="reconfigure"></marker> + </desc> + </func> + + <func> + <name>reconfigure(ConfDir) -> void()</name> + <fsummary>Configure the SNMP-TARGET-MIB</fsummary> + <type> + <v>ConfDir = string()</v> + </type> + <desc> + <p>Inserts all data in the configuration files into the + database and destroys all old data, including the rows with + StorageType <c>nonVolatile</c>. The rows created from the + configuration file will have StorageType <c>nonVolatile</c>. </p> + <p>Thus, the data in the SNMP-TARGET-MIB, after this + function has been called, is the data from the configuration + files. </p> + <p>All <c>snmp</c> counters are set to zero.</p> + <p>If an error is found in the configuration file, it is + reported using the function <c>config_err/2</c> of the , + and the function fails with the reason + <c>configuration_error</c>.</p> + <p><c>ConfDir</c> is a string which points to the directory + where the configuration files are found. </p> + <p>The configuration files read are: <c>target_addr.conf</c> + and <c>target_params.conf</c>. </p> + + <marker id="set_target_engine_id"></marker> + </desc> + </func> + + <func> + <name>set_target_engine_id(TargetAddrName, EngineId) -> boolean()</name> + <fsummary>Set the engine id for a targetAddr row.</fsummary> + <type> + <v>TargetAddrName = string()</v> + <v>EngineId = string()</v> + </type> + <desc> + <p>Changes the engine id for a target in the + <c>snmpTargetAddrTable</c>. + If notifications are sent as Inform requests to a target, its + engine id must be set. </p> + + <marker id="add_addr"></marker> + </desc> + </func> + + <func> + <name>add_addr(Name, Ip, Port, Timeout, Retry, TagList, Params, EngineId, TMask, MMS) -> Ret</name> + <fsummary>Add one target address definition</fsummary> + <type> + <v>Name = string()</v> + <v>Ip = [integer()], length 4</v> + <v>Port = integer()</v> + <v>Timeout = integer()</v> + <v>Retry = integer()</v> + <v>TagList = string()</v> + <v>ParamsName = string()</v> + <v>EngineId = string()</v> + <v>TMask = string(), length 0 or 6</v> + <v>MMS = integer()</v> + <v>Ret = {ok, Key} | {error, Reason}</v> + <v>Key = term()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Adds a target address definition to the agent config. + Equivalent to one line in the <c>target_addr.conf</c> file.</p> + + <marker id="delete_addr"></marker> + </desc> + </func> + + <func> + <name>delete_addr(Key) -> Ret</name> + <fsummary>Delete one target address definition</fsummary> + <type> + <v>Key = term()</v> + <v>Ret = ok | {error, Reason}</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Delete a target address definition from the agent config.</p> + + <marker id="add_params"></marker> + </desc> + </func> + + <func> + <name>add_params(Name, MPModel, SecModel, SecName, SecLevel) -> Ret</name> + <fsummary>Add one target parameter definition</fsummary> + <type> + <v>Name = string()</v> + <v>MPModel = v1 | v2c | v3</v> + <v>SecModel = v1 | v2c | usm</v> + <v>SecName = string()</v> + <v>SecLevel = noAuthNoPriv | authNoPriv | authPriv</v> + <v>Ret = {ok, Key} | {error, Reason}</v> + <v>Key = term()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Adds a target parameter definition to the agent config. + Equivalent to one line in the <c>target_params.conf</c> file.</p> + + <marker id="delete_params"></marker> + </desc> + </func> + <func> + <name>delete_params(Key) -> Ret</name> + <fsummary>Delete one target parameter definition</fsummary> + <type> + <v>Key = term()</v> + <v>Ret = ok | {error, Reason}</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Delete a target parameter definition from the agent config.</p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmp_user_based_sm_mib.xml b/lib/snmp/doc/src/snmp_user_based_sm_mib.xml new file mode 100644 index 0000000000..7485e5af57 --- /dev/null +++ b/lib/snmp/doc/src/snmp_user_based_sm_mib.xml @@ -0,0 +1,146 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>1999</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmp_user_based_sm_mib</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_user_based_sm_mib.xml</file> + </header> + <module>snmp_user_based_sm_mib</module> + <modulesummary>Instrumentation Functions for SNMP-USER-BASED-SM-MIB</modulesummary> + <description> + <p>The module <c>snmp_user_based_sm_mib</c> implements the instrumentation + functions for the SNMP-USER-BASED-SM-MIB, and functions for configuring + the database. + </p> + <p>The configuration files are described in the SNMP User's Manual.</p> + </description> + <funcs> + <func> + <name>configure(ConfDir) -> void()</name> + <fsummary>Configure the SNMP-USER-BASED-SM-MIB</fsummary> + <type> + <v>ConfDir = string()</v> + </type> + <desc> + <p>This function is called from the supervisor at system + start-up. + </p> + <p>Inserts all data in the configuration files into the + database and destroys all old rows with StorageType + <c>volatile</c>. The rows created from the configuration file + will have StorageType <c>nonVolatile</c>. + </p> + <p>All <c>snmp</c> counters are set to zero. + </p> + <p>If an error is found in the configuration file, it is + reported using the function <c>config_err/2</c> of the error + report module, and the function fails with the reason + <c>configuration_error</c>. + </p> + <p><c>ConfDir</c> is a string which points to the directory + where the configuration files are found. + </p> + <p>The configuration file read is: <c>usm.conf</c>. + </p> + </desc> + </func> + <func> + <name>reconfigure(ConfDir) -> void()</name> + <fsummary>Configure the SNMP-USER-BASED-SM-MIB</fsummary> + <type> + <v>ConfDir = string()</v> + </type> + <desc> + <p>Inserts all data in the configuration files into the + database and destroys all old data, including the rows with + StorageType <c>nonVolatile</c>. The rows created from the + configuration file will have StorageType <c>nonVolatile</c>. + </p> + <p>Thus, the data in the SNMP-USER-BASED-SM-MIB, after this + function has been called, is the data from the configuration + files. + </p> + <p>All <c>snmp</c> counters are set to zero. + </p> + <p>If an error is found in the configuration file, it is + reported using the function <c>config_err/2</c> of the error + report module, and the function fails with the reason + <c>configuration_error</c>. + </p> + <p><c>ConfDir</c> is a string which points to the directory + where the configuration files are found. + </p> + <p>The configuration file read is: <c>usm.conf</c>. + <marker id="add_user"></marker> +</p> + </desc> + </func> + <func> + <name>add_user(EngineID, Name, SecName, Clone, AuthP, AuthKeyC, OwnAuthKeyC, PrivP, PrivKeyC, OwnPrivKeyC, Public, AuthKey, PrivKey) -> Ret</name> + <fsummary>Add one user</fsummary> + <type> + <v>EngineID = string()</v> + <v>Name = string()</v> + <v>SecName = string()</v> + <v>Clone = zeroDotZero | [integer()]</v> + <v>AuthP = usmNoAuthProtocol | usmHMACMD5AuthProtocol | usmHMACSHAAuthProtocol</v> + <v>AuthKeyC = string()</v> + <v>OwnAuthKeyC = string()</v> + <v>PrivP = usmNoPrivProtocol | usmDESPrivProtocol</v> + <v>PrivKeyC = string()</v> + <v>OwnPrivKeyC = string()</v> + <v>Public = string()</v> + <v>AuthKey = string()</v> + <v>PrivKey = string()</v> + <v>Ret = {ok, Key} | {error, Reason}</v> + <v>Key = term()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Adds a USM security data (user) to the agent config. + Equivalent to one line in the <c>usm.conf</c> file.</p> + <marker id="delete_user"></marker> + </desc> + </func> + <func> + <name>delete_user(Key) -> Ret</name> + <fsummary>Delete one user</fsummary> + <type> + <v>Key = term()</v> + <v>Ret = ok | {error, Reason}</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Delete a USM security data (user) from the agent config.</p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmp_view_based_acm_mib.xml b/lib/snmp/doc/src/snmp_view_based_acm_mib.xml new file mode 100644 index 0000000000..ffea256608 --- /dev/null +++ b/lib/snmp/doc/src/snmp_view_based_acm_mib.xml @@ -0,0 +1,201 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>1999</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmp_view_based_acm_mib</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmp_view_based_acm_mib.xml</file> + </header> + <module>snmp_view_based_acm_mib</module> + <modulesummary>Instrumentation Functions for SNMP-VIEW-BASED-ACM-MIB</modulesummary> + <description> + <p>The module <c>snmp_view_based_acm_mib</c> implements the instrumentation functions for the + SNMP-VIEW-BASED-ACM-MIB, and functions for configuring the database. + </p> + <p>The configuration files are described in the SNMP User's Manual.</p> + </description> + <funcs> + <func> + <name>configure(ConfDir) -> void()</name> + <fsummary>Configure the SNMP-VIEW-BASED-ACM-MIB</fsummary> + <type> + <v>ConfDir = string()</v> + </type> + <desc> + <p>This function is called from the supervisor at system + start-up. + </p> + <p>Inserts all data in the configuration files into the + database and destroys all old rows with StorageType + <c>volatile</c>. The rows created from the configuration file + will have StorageType <c>nonVolatile</c>. + </p> + <p>All <c>snmp</c> counters are set to zero. + </p> + <p>If an error is found in the configuration file, it is + reported using the function <c>config_err/2</c> of the error + report module, and the function fails with the reason + <c>configuration_error</c>. + </p> + <p><c>ConfDir</c> is a string which points to the directory + where the configuration files are found. + </p> + <p>The configuration file read is: <c>vacm.conf</c>. + </p> + </desc> + </func> + <func> + <name>reconfigure(ConfDir) -> void()</name> + <fsummary>Configure the SNMP-VIEW-BASED-ACM-MIB</fsummary> + <type> + <v>ConfDir = string()</v> + </type> + <desc> + <p>Inserts all data in the configuration files into the + database and destroys all old data, including the rows with + StorageType <c>nonVolatile</c>. The rows created from the + configuration file will have StorageType <c>nonVolatile</c>. + </p> + <p>Thus, the data in the SNMP-VIEW-BASED-ACM-MIB, after this + function has been called, is the data from the configuration + files. + </p> + <p>All <c>snmp</c> counters are set to zero. + </p> + <p>If an error is found in the configuration file, it is + reported using the function <c>config_err/2</c> of the error + report module, and the function fails with the reason + <c>configuration_error</c>. + </p> + <p><c>ConfDir</c> is a string which points to the directory + where the configuration files are found. + </p> + <p>The configuration file read is: <c>vacm.conf</c>. + <marker id="add_sec2group"></marker> +</p> + </desc> + </func> + <func> + <name>add_sec2group(SecModel, SecName, GroupName) -> Ret</name> + <fsummary>Add one security to group definition</fsummary> + <type> + <v>SecModel = v1 | v2c | usm</v> + <v>SecName = string()</v> + <v>GroupName = string()</v> + <v>Ret = {ok, Key} | {error, Reason}</v> + <v>Key = term()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Adds a security to group definition to the agent config. + Equivalent to one vacmSecurityToGroup-line in the <c>vacm.conf</c> file.</p> + <marker id="delete_sec2group"></marker> + </desc> + </func> + <func> + <name>delete_sec2group(Key) -> Ret</name> + <fsummary>Delete one security to group definition</fsummary> + <type> + <v>Key = term()</v> + <v>Ret = ok | {error, Reason}</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Delete a security to group definition from the agent config.</p> + <marker id="add_access"></marker> + </desc> + </func> + <func> + <name>add_access(GroupName, Prefix, SecModel, SecLevel, Match, RV, WV, NV) -> Ret</name> + <fsummary>Add one access definition</fsummary> + <type> + <v>GroupName = string()</v> + <v>Prefix = string()</v> + <v>SecModel = v1 | v2c | usm</v> + <v>SecLevel = string()</v> + <v>Match = prefix | exact</v> + <v>RV = string()</v> + <v>WV = string()</v> + <v>NV = string()</v> + <v>Ret = {ok, Key} | {error, Reason}</v> + <v>Key = term()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Adds a access definition to the agent config. + Equivalent to one vacmAccess-line in the <c>vacm.conf</c> file.</p> + <marker id="delete_access"></marker> + </desc> + </func> + <func> + <name>delete_access(Key) -> Ret</name> + <fsummary>Delete one access definition</fsummary> + <type> + <v>Key = term()</v> + <v>Ret = ok | {error, Reason}</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Delete a access definition from the agent config.</p> + <marker id="add_view_tree_fam"></marker> + </desc> + </func> + <func> + <name>add_view_tree_fam(ViewIndex, SubTree, Status, Mask) -> Ret</name> + <fsummary>Add one view tree family definition</fsummary> + <type> + <v>ViewIndex = integer()</v> + <v>SubTree = oid()</v> + <v>Status = included | excluded</v> + <v>Mask = null | [integer()], where all values are either 0 or 1</v> + <v>Ret = {ok, Key} | {error, Reason}</v> + <v>Key = term()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Adds a view tree family definition to the agent config. + Equivalent to one vacmViewTreeFamily-line in the <c>vacm.conf</c> file.</p> + <marker id="delete_view_tree_fam"></marker> + </desc> + </func> + <func> + <name>delete_view_tree_fam(Key) -> Ret</name> + <fsummary>Delete one view tree family definition</fsummary> + <type> + <v>Key = term()</v> + <v>Ret = ok | {error, Reason}</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Delete a view tree family definition from the agent config.</p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmpa.xml b/lib/snmp/doc/src/snmpa.xml new file mode 100644 index 0000000000..b3661ae9b0 --- /dev/null +++ b/lib/snmp/doc/src/snmpa.xml @@ -0,0 +1,1252 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2004</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpa</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpa.xml</file> + </header> + <module>snmpa</module> + <modulesummary>Interface Functions to the SNMP toolkit agent</modulesummary> + <description> + <p>The module <c>snmpa</c> contains interface functions to the + SNMP agent.</p> + + <marker id="data_types"></marker> + </description> + + <section> + <title>DATA TYPES</title> + <code type="none"><![CDATA[ +oid() = [byte()] +atl_type() = read | write | read_write +notification_delivery_info() = #snmpa_notification_delivery_info{} + ]]></code> + + <p>The <c>oid()</c> type is used to represent an ASN.1 OBJECT IDENTIFIER. </p> + + <p>The record <c><![CDATA[snmpa_notification_delivery_info]]></c> contains the following fields: </p> + <taglist> + <tag><c><![CDATA[tag = term()]]></c></tag> + <item> + <p>A user defined identity representing this notification send + operation.</p> + </item> + <tag><c><![CDATA[mod = module()]]></c></tag> + <item> + <p>A module implementing the + <seealso marker="snmpa_notification_delivery_info_receiver">snmpa_notification_delivery_info_receiver</seealso> + behaviour. The info functions of this module will be called at + various stages of delivery. </p> + </item> + <tag><c><![CDATA[extra = term()]]></c></tag> + <item> + <p>This is any extra info the user wants to have supplied + when the functions in the callback module is called. </p> + </item> + </taglist> + + <marker id="add_agent_caps"></marker> + </section> + + <funcs> + <func> + <name>add_agent_caps(SysORID, SysORDescr) -> SysORIndex</name> + <fsummary>Add an AGENT-CAPABILITY definition to the agent</fsummary> + <type> + <v>SysORID = oid()</v> + <v>SysORDescr = string()</v> + <v>SysORIndex = integer()</v> + </type> + <desc> + <p>This function can be used to add an AGENT-CAPABILITY + statement to the sysORTable in the agent. The table is + defined in the SNMPv2-MIB.</p> + <marker id="del_agent_caps"></marker> + </desc> + </func> + + <func> + <name>del_agent_caps(SysORIndex) -> void()</name> + <fsummary>Delete an AGENT-CAPABILITY definition from the agent</fsummary> + <type> + <v>SysORIndex = integer()</v> + </type> + <desc> + <p>This function can be used to delete an AGENT-CAPABILITY + statement to the sysORTable in the agent. This table is + defined in the SNMPv2-MIB. </p> + + <marker id="get_agent_caps"></marker> + </desc> + </func> + + <func> + <name>get_agent_caps() -> [[SysORIndex, SysORID, SysORDescr, SysORUpTime]]</name> + <fsummary>Return all AGENT-CAPABILITY definitions in the agent</fsummary> + <type> + <v>SysORIndex = integer()</v> + <v>SysORId = oid()</v> + <v>SysORDescr = string()</v> + <v>SysORUpTime = integer()</v> + </type> + <desc> + <p>Returns all AGENT-CAPABILITY statements in the sysORTable + in the agent. This table is defined in the SNMPv2-MIB. </p> + + <marker id="get"></marker> + </desc> + </func> + + <func> + <name>get(Agent, Vars) -> Values | {error, Reason}</name> + <name>get(Agent, Vars, Context) -> Values | {error, Reason}</name> + <fsummary>Perform a get operation on the agent</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>Vars = [oid()]</v> + <v>Context = string()</v> + <v>Values = [term()]</v> + <v>Reason = {atom(), oid()}</v> + </type> + <desc> + <p>Performs a GET operation on the agent. All loaded MIB + objects are visible in this operation. The agent calls the + corresponding instrumentation functions just as if it was a + GET request coming from a manager. </p> + <p>Note that the request specific parameters (such as + <seealso marker="#current_request_id">current_request_id</seealso>) + are not accessible for the instrumentation functions if this + function is used. </p> + + <marker id="get_next"></marker> + </desc> + </func> + + <func> + <name>get_next(Agent, Vars) -> Values | {error, Reason}</name> + <name>get_next(Agent, Vars, Context) -> Values | {error, Reason}</name> + <fsummary>Perform a get-next operation on the agent</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>Vars = [oid()]</v> + <v>Context = string()</v> + <v>Values = [{oid(), term()}]</v> + <v>Reason = {atom(), oid()}</v> + </type> + <desc> + <p>Performs a GET-NEXT operation on the agent. All loaded MIB + objects are visible in this operation. The agent calls the + corresponding instrumentation functions just as if it was a + GET request coming from a manager. </p> + <p>Note that the request specific parameters (such as + <c>snmpa:current_request_id/0</c> are not accessible for the + instrumentation functions if this function is used. </p> + + <marker id="backup"></marker> + <!-- <marker id="get_symbolic_store_db"></marker> --> + </desc> + </func> + +<!-- + <func> + <name>get_symbolic_store_db() -> Db</name> + <fsummary>Retrieve the symbolic store database reference</fsummary> + <type> + <v>Db = term()</v> + </type> + <desc> + <p>Retrieve the symbolic store database reference. This is used + for faster access to the database using the functions: + <c>int_to_enum/3</c>, <c>enum_to_int/3</c>, <c>name_to_oid/2</c>, + <c>oid_to_name/2</c>. </p> + + <marker id="backup"></marker> + </desc> + </func> + +--> + <func> + <name>backup(BackupDir) -> ok | {error, Reason}</name> + <name>backup(Agent, BackupDir) -> ok | {error, Reason}</name> + <fsummary>Backup agent data</fsummary> + <type> + <v>BackupDir = string()</v> + <v>Agent = pid() | atom()</v> + </type> + <desc> + <p>Backup persistent/permanent data handled by the agent + (such as local-db, mib-data and vacm). </p> + <p>Data stored by mnesia is not handled. </p> + <p>BackupDir cannot be identical to DbDir. </p> + + <marker id="info"></marker> + </desc> + </func> + <func> + <name>info() -> [{Key, Value}]</name> + <name>info(Agent) -> [{Key, Value}]</name> + <fsummary>Return information about the agent</fsummary> + <type> + <v>Agent = pid() | atom()</v> + </type> + <desc> + <p>Returns a list (a dictionary) containing information about + the agent. Information includes loaded MIBs, registered + sub-agents, some information about the memory allocation. </p> + <p>As of version 4.4 the format of the info has been changed. + To convert the info to the old format, call the + <seealso marker="#old_info_format">old_info_format</seealso> + function. </p> + + <marker id="old_info_format"></marker> + </desc> + </func> + + <func> + <name>old_info_format(NewInfo) -> OldInfo</name> + <fsummary>Return information about the agent</fsummary> + <type> + <v>OldInfo = NewInfo = [{Key, Value}]</v> + </type> + <desc> + <p>As of version 4.4 the format of the info has been changed. + This function is used to convert to the old (pre-4.4) info + format. </p> + + <marker id="load_mibs"></marker> + </desc> + </func> + + <func> + <name>load_mibs(Mibs) -> ok | {error, Reason}</name> + <name>load_mibs(Agent,Mibs) -> ok | {error, Reason}</name> + <fsummary>Load MIBs into the agent</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>Mibs = [MibName]</v> + <v>MibName = string()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Loads <c>Mibs</c> into an agent. If the agent cannot load + all MIBs, it will indicate where loading was aborted. The + <c>MibName</c> is the name of the Mib, including the path to + where the compiled mib is found. For example,</p> + <code type="none"> + Dir = code:priv_dir(my_app) ++ "/mibs/", + snmpa:load_mibs(snmp_master_agent, [Dir ++ "MY-MIB"]). + </code> + + <marker id="unload_mibs"></marker> + </desc> + </func> + + <func> + <name>unload_mibs(Mibs) -> ok | {error, Reason}</name> + <name>unload_mibs(Agent,Mibs) -> ok | {error, Reason}</name> + <fsummary>Unload MIBs from the agent</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>Mibs = [MibName]</v> + <v>MibName = string()</v> + </type> + <desc> + <p>Unloads MIBs into an agent. If it cannot unload all MIBs, + it will indicate where unloading was aborted. </p> + + <marker id="which_mibs"></marker> + </desc> + </func> + + <func> + <name>which_mibs() -> Mibs</name> + <name>which_mibs(Agent) -> Mibs</name> + <fsummary>Get a list of all the loaded mibs</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>Mibs = [{MibName, MibFile}]</v> + <v>MibName = atom()</v> + <v>MibFile = string()</v> + </type> + <desc> + <p>Retrieve the list of all the mibs loaded into this agent. Default + is the master agent. </p> + + <marker id="whereis_mib"></marker> + </desc> + </func> + + <func> + <name>whereis_mib(MibName) -> {ok, MibFile} | {error, Reason}</name> + <name>whereis_mib(Agent, MibName) -> {ok, MibFile} | {error, Reason}</name> + <fsummary>Get the path to the mib file</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>MibName = atom()</v> + <v>MibFile = string()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Get the full path to the (compiled) mib-file. </p> + + <marker id="current_request_id"></marker> + <marker id="current_context"></marker> + <marker id="current_community"></marker> + <marker id="current_address"></marker> + </desc> + </func> + + <func> + <name>current_request_id() -> {value, RequestId} | false</name> + <name>current_context() -> {value, Context} | false</name> + <name>current_community() -> {value, Community} | false</name> + <name>current_address() -> {value, Address} | false</name> + <fsummary>Get the request-id, context, community and address of the current request</fsummary> + <type> + <v>RequestId = integer()</v> + <v>Context = string()</v> + <v>Community = string()</v> + <v>Address = term()</v> + </type> + <desc> + <p>Get the request-id, context, community and address of the + request currently being processed by the agent. </p> + <p>Note that these functions is intended to be called by the + instrumentation functions and <em>only</em> if they are + executed in the context of the agent process (e.g. it does + not work if called from a spawned process).</p> + + <marker id="enum_to_int"></marker> + </desc> + </func> + + <func> + <name>enum_to_int(Name, Enum) -> {value, Int} | false</name> + <name>enum_to_int(Db, Name, Enum) -> {value, Int} | false</name> + <fsummary>Convert an enum value to an integer</fsummary> + <type> + <v>Db = term()</v> + <v>Name = atom()</v> + <v>Enum = atom()</v> + <v>Int = int()</v> + </type> + <desc> + <p>Converts the symbolic value <c>Enum</c> to the + corresponding integer of the enumerated object or type + <c>Name</c> in a MIB. The MIB must be loaded. + </p> + <p><c>false</c> is returned if the object or type is not + defined in any loaded MIB, or if it does not define the + symbolic value as enumerated. + </p> + <p><c>Db</c> is a reference to the symbolic store database + (retrieved by a call to <c>get_symbolic_store_db/0</c>). </p> + + <marker id="int_to_enum"></marker> + </desc> + </func> + + <func> + <name>int_to_enum(Name, Int) -> {value, Enum} | false</name> + <name>int_to_enum(Db, Name, Int) -> {value, Enum} | false</name> + <fsummary>Convert an integer to an enum value</fsummary> + <type> + <v>Db = term()</v> + <v>Name = atom()</v> + <v>Int = int()</v> + <v>Enum = atom()</v> + </type> + <desc> + <p>Converts the integer <c>Int</c> to the corresponding + symbolic value of the enumerated object or type <c>Name</c> in + a MIB. The MIB must be loaded. + </p> + <p><c>false</c> is returned if the object or type is not + defined in any loaded MIB, or if it does not define the + symbolic value as enumerated. + </p> + <p><c>Db</c> is a reference to the symbolic store database + (retrieved by a call to <c>get_symbolic_store_db/0</c>). </p> + + <marker id="name_to_oid"></marker> + </desc> + </func> + + <func> + <name>name_to_oid(Name) -> {value, oid()} | false</name> + <name>name_to_oid(Db, Name) -> {value, oid()} | false</name> + <fsummary>Convert a symbolic name to an OID</fsummary> + <type> + <v>Db = term()</v> + <v>Name = atom()</v> + </type> + <desc> + <p>Looks up the OBJECT IDENTIFIER of a MIB object, given the + symbolic name. Note, the OBJECT IDENTIFIER is given for the + object, not for an instance. </p> + <p><c>false</c> is returned if the object is not defined in any + loaded MIB. </p> + <p><c>Db</c> is a reference to the symbolic store database + (retrieved by a call to <c>get_symbolic_store_db/0</c>). </p> + + <marker id="oid_to_name"></marker> + </desc> + </func> + + <func> + <name>oid_to_name(OID) -> {value, Name} | false</name> + <name>oid_to_name(Db, OID) -> {value, Name} | false</name> + <fsummary>Convert an OID to a symbolic name</fsummary> + <type> + <v>Db = term()</v> + <v>OID = oid()</v> + <v>Name = atom()</v> + </type> + <desc> + <p>Looks up the symbolic name of a MIB object, given OBJECT + IDENTIFIER. </p> + <p><c>false</c> is returned if the object is not defined in any + loaded MIB. </p> + <p><c>Db</c> is a reference to the symbolic store database + (retrieved by a call to <c>get_symbolic_store_db/0</c>). </p> + + <marker id="which_aliasnames"></marker> + </desc> + </func> + + <func> + <name>which_aliasnames() -> Result</name> + <fsummary>Get all alias-names known to the agent</fsummary> + <type> + <v>Result = [atom()]</v> + </type> + <desc> + <p>Retrieve all alias-names known to the agent.</p> + <marker id="which_tables"></marker> + </desc> + </func> + + <func> + <name>which_tables() -> Result</name> + <fsummary>Get all tables known to the agent</fsummary> + <type> + <v>Result = [atom()]</v> + </type> + <desc> + <p>Retrieve all tables known to the agent.</p> + + <marker id="which_variables"></marker> + </desc> + </func> + + <func> + <name>which_variables() -> Result</name> + <fsummary>Get all variables known to the agent</fsummary> + <type> + <v>Result = [atom()]</v> + </type> + <desc> + <p>Retrieve all variables known to the agent.</p> + + <marker id="which_notifications"></marker> + </desc> + </func> + + <func> + <name>which_notifications() -> Result</name> + <fsummary>Get all notifications known to the agent</fsummary> + <type> + <v>Result = [{Name, MibName, Info}]</v> + <v>Name = atom()</v> + <v>MibName = atom()</v> + <v>Info = term()</v> + </type> + <desc> + <p>Retrieve all notifications (and traps) known to the agent.</p> + + <marker id="log_to_txt"></marker> + </desc> + </func> + + <func> + <name>log_to_txt(LogDir, Mibs)</name> + <name>log_to_txt(LogDir, Mibs, OutFile) -> ok | {error, Reason}</name> + <name>log_to_txt(LogDir, Mibs, OutFile, LogName) -> ok | {error, Reason}</name> + <name>log_to_txt(LogDir, Mibs, OutFile, LogName, LogFile) -> ok | {error, Reason}</name> + <name>log_to_txt(LogDir, Mibs, OutFile, LogName, LogFile, Start) -> ok | {error, Reason}</name> + <name>log_to_txt(LogDir, Mibs, OutFile, LogName, LogFile, Start, Stop) -> ok | {error, Reason}</name> + <fsummary>Convert an Audit Trail Log to text format</fsummary> + <type> + <v>LogDir = string()</v> + <v>Mibs = [MibName]</v> + <v>MibName = string()</v> + <v>OutFile = string()</v> + <v>LogName = string()</v> + <v>LogFile = string()</v> + <v>Start = Stop = null | datetime() | {local_time,datetime()} | {universal_time,datetime()} </v> + <v>Reason = disk_log_open_error() | file_open_error() | term()</v> + <v>disk_log_open_error() = {LogName, term()}</v> + <v>file_open_error() = {OutFile, term()}</v> + </type> + <desc> + <p>Converts an Audit Trail Log to a readable text file. + <c>OutFile</c> defaults to "./snmpa_log.txt". + <c>LogName</c> defaults to "snmpa_log". + <c>LogFile</c> defaults to "snmpa.log". + See <seealso marker="snmp#log_to_txt">snmp:log_to_txt</seealso> + for more info.</p> + + <marker id="change_log_size"></marker> + </desc> + </func> + + <func> + <name>change_log_size(NewSize) -> ok | {error, Reason}</name> + <fsummary>Change the size of the Audit Trail Log</fsummary> + <type> + <v>NewSize = {MaxBytes, MaxFiles}</v> + <v>MaxBytes = integer()</v> + <v>MaxFiles = integer()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Changes the log size of the Audit Trail Log. The application must + be configured to use the audit trail log function. Please refer to + disk_log(3) in Kernel Reference Manual for a description of how to + change the log size. </p> + <p>The change is permanent, as long as the log is not deleted. + That means, the log size is remembered across reboots. </p> + + <marker id="set_log_type"></marker> + </desc> + </func> + + <func> + <name>set_log_type(NewType) -> {ok, OldType} | {error, Reason}</name> + <name>set_log_type(Agent, NewType) -> {ok, OldType} | {error, Reason}</name> + <fsummary>Change the type of the Audit Trail Log</fsummary> + <type> + <v>NewType = OldType = atl_type()</v> + <v>Agent = pid() | atom()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Changes the run-time Audit Trail log type. </p> + <p>Note that this has no effect on the application configuration as + defined by configuration files, so a node restart will revert the + config to whatever is in those files. </p> + <p>This function is primarily useful in testing/debugging + scenarios. </p> + + <marker id="mib_of"></marker> + </desc> + + </func> + + <func> + <name>mib_of(Oid) -> {ok, MibName} | {error, Reason}</name> + <name>mib_of(Agent, Oid) -> {ok, MibName} | {error, Reason}</name> + <fsummary>Which mib an Oid belongs to</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>Oid = oid()</v> + <v>MibName = atom()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Finds the mib corresponding to the <c>Oid</c>. If it is a + variable, the Oid must be + <Oid for var>.0 and if it is a table, Oid must be + <table>.<entry>.<col>.<any></p> + + <marker id="me_of"></marker> + </desc> + </func> + + <func> + <name>me_of(Oid) -> {ok, Me} | {error, Reason}</name> + <name>me_of(Agent, Oid) -> {ok, Me} | {error, Reason}</name> + <fsummary>Retrieve the mib-entry of an Oid</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>Oid = oid()</v> + <v>Me = #me{}</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Finds the mib entry corresponding to the <c>Oid</c>. If it is a + variable, the Oid must be + <Oid for var>.0 and if it is a table, Oid must be + <table>.<entry>.<col>.<any></p> + + <marker id="invalidate_mibs_cache"></marker> + </desc> + </func> + + <func> + <name>invalidate_mibs_cache() -> void()</name> + <name>invalidate_mibs_cache(Agent) -> void()</name> + <fsummary>Invalidate the mib server cache</fsummary> + <type> + <v>Agent = pid() | atom()</v> + </type> + <desc> + <p>Invalidate the mib server cache. </p> + <p>The entire contents of the cache will be deleted. </p> + + <marker id="enable_mibs_cache"></marker> + </desc> + </func> + + <func> + <name>enable_mibs_cache() -> void()</name> + <name>enable_mibs_cache(Agent) -> void()</name> + <fsummary>Enable the mib server cache</fsummary> + <type> + <v>Agent = pid() | atom()</v> + </type> + <desc> + <p>Enable the mib server cache. </p> + + <marker id="disable_mibs_cache"></marker> + </desc> + </func> + + <func> + <name>disable_mibs_cache() -> void()</name> + <name>disable_mibs_cache(Agent) -> void()</name> + <fsummary>Disable the mib server cache</fsummary> + <type> + <v>Agent = pid() | atom()</v> + </type> + <desc> + <p>Disable the mib server cache. </p> + + <marker id="gc_mibs_cache"></marker> + </desc> + </func> + + <func> + <name>gc_mibs_cache() -> {ok, NumElementsGCed} | {error, Reason}</name> + <name>gc_mibs_cache(Agent) -> {ok, NumElementsGCed} | {error, Reason}</name> + <name>gc_mibs_cache(Age) -> {ok, NumElementsGCed} | {error, Reason}</name> + <name>gc_mibs_cache(Agent, Age) -> {ok, NumElementsGCed} | {error, Reason}</name> + <name>gc_mibs_cache(Age, GcLimit) -> {ok, NumElementsGCed} | {error, Reason}</name> + <name>gc_mibs_cache(Agent, Age, GcLimit) -> {ok, NumElementsGCed} | {error, Reason}</name> + <fsummary>Perform mib server cache gc</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>Age = integer() > 0</v> + <v>GcLimit = integer() > 0 | infinity</v> + <v>NumElementsGCed = integer() >= 0</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Perform mib server cache gc. </p> + <p>Manually performs a mib server cache gc. + This can be done regardless of the value of the + <c>autogc</c> option. + The <c>NumElementsGCed</c> value indicates how many + elements where actually removed from the cache. </p> + + <marker id="enable_mibs_cache_autogc"></marker> + </desc> + </func> + + <func> + <name>enable_mibs_cache_autogc() -> void()</name> + <name>enable_mibs_cache_autogc(Agent) -> void()</name> + <fsummary>Enable automatic gc of the mib server cache</fsummary> + <type> + <v>Agent = pid() | atom()</v> + </type> + <desc> + <p>Enable automatic gc of the mib server cache. </p> + + <marker id="disable_mibs_cache_autogc"></marker> + </desc> + </func> + + <func> + <name>disable_mibs_cache_autogc() -> void()</name> + <name>disable_mibs_cache_autogc(Agent) -> void()</name> + <fsummary>Disable automatic gc of the mib server cache</fsummary> + <type> + <v>Agent = pid() | atom()</v> + </type> + <desc> + <p>Disable automatic gc of the mib server cache. </p> + + <marker id="update_mibs_cache_age"></marker> + </desc> + </func> + + <func> + <name>update_mibs_cache_age(NewAge) -> ok | {error, Reason}</name> + <name>update_mibs_cache_age(Agent, NewAge) -> ok | {error, Reason}</name> + <fsummary>Change the mib server cache age property</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>NewAge = integer() > 0</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Change the mib server cache <c>age</c> property. </p> + + <marker id="update_mibs_cache_gclimit"></marker> + </desc> + </func> + + <func> + <name>update_mibs_cache_gclimit(NewGcLimit) -> ok | {error, Reason}</name> + <name>update_mibs_cache_gclimit(Agent, NewGCLimit) -> ok | {error, Reason}</name> + <fsummary>Change the mib server cache gclimit property</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>NewGcLimit = integer() > 0 | infinity</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Change the mib server cache <c>gclimit</c> property. </p> + + <marker id="register_notification_filter"></marker> + </desc> + </func> + + + <func> + <name>register_notification_filter(Id, Mod, Data) -> ok | {error, Reason}</name> + <name>register_notification_filter(Agent, Id, Mod, Data) -> ok | {error, Reason}</name> + <name>register_notification_filter(Id, Mod, Data, Where) -> ok | {error, Reason}</name> + <name>register_notification_filter(Agent, Id, Mod, Data, Where) -> ok | {error, Reason}</name> + <fsummary>Register a notification filter</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>Id = filter_id()</v> + <v>filter_id() = term()</v> + <v>Mod = atom()</v> + <v>Data = term()</v> + <v>Where = filter_position()</v> + <v>Reason = term()</v> + <v>filter_position() = first | last | {insert_before, filter_id()} | {insert_after, filter_id()} </v> + </type> + <desc> + <p>Registers a notification filter. + </p> + <p><c>Mod</c> is a module implementing the + <c>snmpa_notification_filter</c> behaviour.</p> + <p><c>Data</c> will be passed on to the filter when calling the + functions of the behaviour.</p> + + <marker id="unregister_notification_filter"></marker> + </desc> + </func> + + <func> + <name>unregister_notification_filter(Id) -> ok | {error, Reason}</name> + <name>unregister_notification_filter(Agent, Id) -> ok | {error, Reason}</name> + <fsummary>Unregister a notification filter</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>Id = filter_id()</v> + <v>filter_id() = term()</v> + </type> + <desc> + <p>Unregister a notification filter. </p> + + <marker id="which_notification_filter"></marker> + </desc> + </func> + + <func> + <name>which_notification_filter() -> Filters</name> + <name>which_notification_filter(Agent) -> Filters</name> + <fsummary>Which notification filter</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>Filters = [filter_id()]</v> + <v>filter_id() = term()</v> + </type> + <desc> + <p>List all notification filters in an agent.</p> + + <marker id="set_request_limit"></marker> + </desc> + </func> + + <func> + <name>set_request_limit(NewLimit) -> {ok, OldLimit} | {error, Reason}</name> + <name>set_request_limit(Agent, NewLimit) -> {ok, OldLimit} | {error, Reason}</name> + <fsummary>Change the request limit</fsummary> + <type> + <v>NewLimit = OldLimit = infinity | integer() >= 0</v> + <v>Agent = pid() | atom()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Changes the request limit. </p> + <p>Note that this has no effect on the application configuration as + defined by configuration files, so a node restart will revert the + config to whatever is in those files. </p> + <p>This function is primarily useful in load regulation + scenarios. </p> + + <marker id="register_subagent"></marker> + </desc> + </func> + + <func> + <name>register_subagent(Agent, SubTreeOid, Subagent) -> ok | {error, Reason}</name> + <fsummary>Register a sub-agent under a sub-tree</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>SubTreeOid = oid()</v> + <v>SubAgent = pid()</v> + </type> + <desc> + <p>Registers a sub-agent under a sub-tree of another agent. </p> + <p>It is easy to make mistakes when registering sub-agents and + this activity should be done carefully. For example, a + strange behaviour would result from the following + configuration:</p> + <pre> +snmp_agent:register_subagent(MAPid,[1,2,3,4],SA1), +snmp_agent:register_subagent(SA1,[1,2,3], SA2). + </pre> + <p><c>SA2</c> will not get requests starting with object + identifier <c>[1,2,3]</c> since <c>SA1</c> does not. </p> + + <marker id="unregister_subagent"></marker> + </desc> + </func> + + <func> + <name>unregister_subagent(Agent, SubagentOidOrPid) -> ok | {ok, SubAgentPid} | {error, Reason}</name> + <fsummary>Unregister a sub-agent</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>SubTreeOidorPid = oid() | pid()</v> + </type> + <desc> + <p>Unregister a sub-agent. If the second argument is a pid, + then that sub-agent will be unregistered from all trees in + <c>Agent</c>. </p> + + <marker id="send_notification"></marker> + </desc> + </func> + + <func> + <name>send_notification(Agent, Notification, Receiver)</name> + <name>send_notification(Agent, Notification, Receiver, Varbinds)</name> + <name>send_notification(Agent, Notification, Receiver, NotifyName, Varbinds)</name> + <name>send_notification(Agent, Notification, Receiver, NotifyName, ContextName, Varbinds) -> void() </name> + <fsummary>Send a notification</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>Notification = atom()</v> + <v>Receiver = no_receiver | {Tag, Recv} | notification_delivery_info()</v> + <v>Tag = term()</v> + <v>Recv = receiver()</v> + <v>receiver() = pid() | atom() | {Mod, Func, Args}</v> + <v>Mod = atom()</v> + <v>Func = atom()</v> + <v>Args = list()</v> + <v>NotifyName = string()</v> + <v>ContextName = string()</v> + <v>Varbinds = varbinds()</v> + <v>varbinds() = [varbind()]</v> + <v>varbind() = {Variable, Value} | {Column, RowIndex, Value} | {OID, Value}</v> + <v>Variable = atom()</v> + <v>Column = atom()</v> + <v>OID = oid()</v> + <v>Value = term()</v> + <v>RowIndex = [int()]</v> + </type> + <desc> + <p>Sends the notification <c>Notification</c> to the + management targets defined for <c>NotifyName</c> in the + <c>snmpNotifyTable</c> in SNMP-NOTIFICATION-MIB from the + specified context. If no <c>NotifyName</c> is specified (or + if it is <c>""</c>), the notification is sent to all + management targets (<c>Addresses</c> below). If no <c>ContextName</c> + is specified, the default <c>""</c> context is used. + </p> + + <p>The parameter <c>Receiver</c> specifies where information + about delivery of Inform-Requests should be sent. The agent + sends Inform-Requests and waits for acknowledgments from the + managers. <c>Receiver</c> can have three values: </p> + + <list type="bulleted"> + <item> + <p><c>no_receiver</c> - No information is delivered. </p> + </item> + + <item> + <p><c>{Tag, Recv}</c> - The information is delivered either via messages + or via a function call according to the value of <c>Recv</c>. </p> + </item> + + <item> + <p><c>notification_delivery_info()</c> - The information is + delivered via a function call according to this data. See the + <seealso marker="#data_types">DATA TYPES</seealso> section + above for details. </p> + </item> + + </list> + + + <p>If <c>Receiver</c> has the value <c>{Tag, Recv}</c>, the delivery is + done according to <c>Recv</c>: </p> + + <list> + <item> + <p><c>pid() | atom()</c> - The info will be delivered in + the following messages: </p> + <list> + <item> + <p><c>{snmp_targets, Tag, Addresses}</c></p> + <p>This inform the user which target addresses the + notification was sent to. </p> + </item> + <item> + <p><c>{snmp_notification, Tag, {got_response, Address}}</c></p> + <p>This informs the user that this target address + acknowledged the notification. </p> + </item> + <item> + <p><c>{snmp_notification, Tag, {no_response, Address}}</c></p> + <p>This informs the user that this target address + did not acknowledge notification. </p> + </item> + </list> + <p>The notification is sent as an Inform-Request to each + target address in <c>Addresses</c> and if there are no + targets for which an Inform-Request is sent, <c>Addresses</c> + is the empty list <c>[]</c>. </p> + <p>The <c>receiver</c> will first be sent the <c>snmp_targets</c> + message, and then for each address in <c>Addresses</c> list, + one of the two <c>snmp_notification</c> messages. </p> + </item> + <item> + <p><c>{Mod, Func, Args}</c> - The info will be delivered via + the function call: </p> + <p><c>Mod:Func([Msg | Args])</c></p> + <p>where <c>Msg</c> has the same content and purpose as the + messages descrived above.</p> + </item> + </list> + + <p><c>Address</c> is a management target address and <c>Addresses</c> is a + list of management target addresses. They are defined as followes: </p> + +<pre> + Addresses = [address()] + Address = address() + address() = v1_address() | v3_address() + v1_address() = {TDomain, TAddress} + v3_address() = {{TDomain, TAddress}, V3MsgData} + TDomain = tdoamin() + TAddress = taddress() + tdomain() = The oid of snmpUDPDomain + This is the only supported transport domain. + taddress() = [A1, A2, A3, A4, P1, P3] + The 4 first bytes makes up the IP-address and the last 2, + the UDP-port number. + V3MsgData = v3_msg_data() + v3_msg_data() = term() +</pre> + + <p>If <c>Receiver</c> is a <c>notification_delivery_info()</c> record, + then the information about the notification delivery will be delivered + to the <c>receiver</c> via the callback functions defined by the + <seealso marker="snmpa_notification_delivery_info_receiver">snmpa_notification_delivery_info_receiver</seealso> + behaviour according to the content of the <c>notification_delivery_info()</c> + record. </p> + + <p>The optional argument <c>Varbinds</c> defines + values for the objects in the notification. If no value is + given for an object, the <c>Agent</c> performs a get-operation + to retrieve the value. + </p> + <p><c>Varbinds</c> is a list of <c>Varbind</c>, where each + <c>Varbind</c> is one of: + </p> + <list type="bulleted"> + <item><c>{Variable, Value}</c>, where <c>Variable</c> is the + symbolic name of a scalar variable referred to in the notification + specification. + </item> + <item><c>{Column, RowIndex, Value}</c>, where <c>Column</c> + is the symbolic name of a column variable. + <c>RowIndex</c> is a list of indices for the specified + element. If this is the case, the OBJECT IDENTIFIER sent + in the notification is the <c>RowIndex</c> appended to the OBJECT + IDENTIFIER for the table column. This is the OBJECT + IDENTIFIER which specifies the element. + </item> + <item><c>{OID, Value}</c>, where <c>OID</c> is the OBJECT + IDENTIFIER for an instance of an object, scalar variable, + or column variable. + </item> + </list> + <p>For example, to specify that <c>sysLocation</c> should have the + value <c>"upstairs"</c> in the notification, we could use one of: + </p> + <list type="bulleted"> + <item><c>{sysLocation, "upstairs"}</c> or</item> + <item><c>{[1,3,6,1,2,1,1,6,0], "upstairs"}</c> or</item> + <item><c>{?sysLocation_instance, "upstairs"}</c> (provided + that the generated <c>.hrl</c> file is included)</item> + </list> + <p>If a variable in the notification is a table element, the + <c>RowIndex</c> for the element must be given in the + <c>Varbinds</c> list. In this case, the OBJECT IDENTIFIER sent + in the notification is the OBJECT IDENTIFIER that identifies this + element. This OBJECT IDENTIFIER could be used in a get + operation later. + </p> + <p>This function is asynchronous, and does not return any + information. If an error occurs, <c>user_err/2</c> of the error + report module is called and the notification is discarded. + </p> + + <marker id="send_trap"></marker> + </desc> + </func> + + <func> + <name>send_trap(Agent,Trap,Community)</name> + <name>send_trap(Agent,Trap,Community,Varbinds) -> void()</name> + <fsummary>Send a trap</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>Trap = atom()</v> + <v>Community = string()</v> + <v>Varbinds = [Varbind]</v> + <v>Varbind = {Variable, Value} | {Column, RowIndex, Value} | {OID, Value}</v> + <v>Variable = atom()</v> + <v>Column = atom()</v> + <v>OID = oid()</v> + <v>Value = term()</v> + <v>RowIndex = [int()]</v> + </type> + <desc> + <p>Note! This function is only kept for backwards + compatibility reasons. Use <c>send_notification</c> instead. + </p> + <p>Sends the trap <c>Trap</c> to the managers defined for + <c>Community</c> in the <c>intTrapDestTable</c> in + OTP-SNMPEA-MIB. The optional argument <c>Varbinds</c> defines + values for the objects in the trap. If no value is given for + an object, the <c>Agent</c> performs a get-operation to + retrieve the value. + </p> + <p><c>Varbinds</c> is a list of <c>Varbind</c>, where each + <c>Varbind</c> is one of: + </p> + <list type="bulleted"> + <item><c>{Variable, Value}</c>, where <c>Variable</c> is the + symbolic name of a scalar variable referred to in the trap + specification. + </item> + <item><c>{Column, RowIndex, Value}</c>, where <c>Column</c> + is the symbolic name of a column variable. + <c>RowIndex</c> is a list of indices for the specified + element. If this is the case, the OBJECT IDENTIFIER sent + in the trap is the <c>RowIndex</c> appended to the OBJECT + IDENTIFIER for the table column. This is the OBJECT + IDENTIFIER which specifies the element. + </item> + <item><c>{OID, Value}</c>, where <c>OID</c> is the OBJECT + IDENTIFIER for an instance of an object, scalar variable, + or column variable. + </item> + </list> + <p>For example, to specify that <c>sysLocation</c> should have the + value <c>"upstairs"</c> in the trap, we could use one of: + </p> + <list type="bulleted"> + <item><c>{sysLocation, "upstairs"}</c> or</item> + <item><c>{[1,3,6,1,2,1,1,6,0], "upstairs"}</c> or</item> + <item><c>{?sysLocation_instance, "upstairs"}</c> (provided + that the generated <c>.hrl</c> file is included)</item> + </list> + <p>If a variable in the trap is a table element, the + <c>RowIndex</c> for the element must be given in the + <c>Varbinds</c> list. In this case, the OBJECT IDENTIFIER sent + in the trap is the OBJECT IDENTIFIER that identifies this + element. This OBJECT IDENTIFIER could be used in a get + operation later. + </p> + <p>This function is asynchronous, and does not return any + information. If an error occurs, <c>snmp_error:user_err/2</c> + is called and the trap is discarded. </p> + + <marker id="discovery"></marker> + </desc> + </func> + + <func> + <name>discovery(TargetName, Notification) -> {ok, ManagerEngineID} | {error, Reason}</name> + <name>discovery(TargetName, Notification, Varbinds) -> {ok, ManagerEngineID} | {error, Reason}</name> + <name>discovery(TargetName, Notification, DiscoHandler) -> {ok, ManagerEngineID} | {error, Reason}</name> + <name>discovery(TargetName, Notification, ContextName, Varbinds) -> {ok, ManagerEngineID} | {error, Reason}</name> + <name>discovery(TargetName, Notification, Varbinds, DiscoHandler) -> {ok, ManagerEngineID} | {error, Reason}</name> + <name>discovery(TargetName, Notification, ContextName, Varbinds, DiscoHandler) -> {ok, ManagerEngineID} | {error, Reason}</name> + <name>discovery(TargetName, Notification, ContextName, Varbinds, DiscoHandler, ExtraInfo) -> {ok, ManagerEngineID} | {error, Reason}</name> + <fsummary>Initiate the discovery process with a manager</fsummary> + <type> + <v>TargetName = string()</v> + <v>Notification = atom()</v> + <v>ContextName = string() (defaults to "")</v> + <v>Varbinds = varbinds()</v> + <v>varbinds() = [varbind()]</v> + <v>DiscoHandler = snmpa_discovery_handler()</v> + <v>ExtraInfo = term()</v> + <v>snmpa_discovery_handler() = Module implementing the snmpa_discovery_handler behaviour</v> + <v>ManagerEngineID = string()</v> + <v>varbind() = {Variable, Value} | {Column, RowIndex, Value} | {OID, Value}</v> + <v>Variable = atom()</v> + <v>Column = atom()</v> + <v>OID = oid()</v> + <v>Value = term()</v> + <v>RowIndex = [int()]</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Initiate the discovery process with the manager identified by + <c>TargetName</c> using the notification <c>Notification</c>. </p> + + <p>This function is synchronous, which means that it will return when + the discovery process has been completed or failed. </p> + + <p>The <c>DiscoHandler</c> module is used during the discovery + process. See + <seealso marker="snmpa_discovery_handler">discovery handler</seealso> + for more info. </p> + + <p>The <c>ExtraInfo</c> argument is passed on to the callback functions + of the <c>DiscoHandler</c>. </p> + + <note><p>If we are not at security-level <c>noAuthNoPriv</c>, + this could be complicated, since the agent will then continue + with stage 2, before which the usm-related updates must be + done. </p></note> + + <note><p>The default discovery handler will require + additional actions by the caller and the discovery will not work + if the security-level is higher then <c>noAuthNoPriv</c>. </p></note> + + <marker id="convert_config"></marker> + </desc> + </func> + + <func> + <name>convert_config(OldConfig) -> AgentConfig</name> + <fsummary>Convert old snmp config to new agent config</fsummary> + <type> + <v>OldConfig = list()</v> + <v>AgentConfig = list()</v> + </type> + <desc> + <p>This off-line utility function can be used to convert + the old snmp application config (pre snmp-4.0) to the + new snmp agent config (as of snmp-4.0).</p> + <p>For information about the old config (<c>OldConfig</c>) + see the OTP R9C documentation.</p> + <p>For information about the current agent config + (<c>AgentConfig</c>), see either + the <seealso marker="snmp_app">SNMP application</seealso> + part of the reference manual or the + <seealso marker="snmp_config">Configuring the application</seealso> + chapter of the SNMP user's guide.</p> + + <marker id="restart_worker"></marker> + </desc> + </func> + + <func> + <name>restart_worker() -> void()</name> + <name>restart_worker(Agent) -> void()</name> + <fsummary>Restart the worker process of a multi-threaded agent</fsummary> + <type> + <v>Agent = pid() | atom()</v> + </type> + <desc> + <p>Restart the worker process of a multi-threaded agent.</p> + <p>This is a utility function, that can be usefull when + e.g. debugging instrumentation functions.</p> + + <marker id="restart_set_worker"></marker> + </desc> + </func> + + <func> + <name>restart_set_worker() -> void()</name> + <name>restart_set_worker(Agent) -> void()</name> + <fsummary>Restart the set worker process of a multi-threaded agent</fsummary> + <type> + <v>Agent = pid() | atom()</v> + </type> + <desc> + <p>Restart the set worker process of a multi-threaded agent.</p> + <p>This is a utility function, that can be usefull when + e.g. debugging instrumentation functions.</p> + + <marker id="verbosity"></marker> + </desc> + </func> + + <func> + <name>verbosity(Ref,Verbosity) -> void()</name> + <fsummary>Assign a new verbosity for the process</fsummary> + <type> + <v>Ref = pid() | sub_agents | master_agent | net_if | mib_server | symbolic_store | note_store | local_db</v> + <v>Verbosity = verbosity() | {subagents, verbosity()}</v> + <v>verbosity() = silence | info | log | debug | trace </v> + </type> + <desc> + <p>Sets verbosity for the designated process. For the lowest + verbosity <c>silence</c>, nothing is printed. The higher the + verbosity, the more is printed. </p> + </desc> + </func> + </funcs> + + <section> + <title>See Also</title> + <p>calendar(3), erlc(1) </p> + </section> + + +</erlref> + diff --git a/lib/snmp/doc/src/snmpa_conf.xml b/lib/snmp/doc/src/snmpa_conf.xml new file mode 100644 index 0000000000..f383394b7a --- /dev/null +++ b/lib/snmp/doc/src/snmpa_conf.xml @@ -0,0 +1,861 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2006</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpa_conf</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpa_conf.xml</file> + </header> + <module>snmpa_conf</module> + <modulesummary>Utility functions for handling the agent config files.</modulesummary> + <description> + <p>The module <c>snmpa_conf</c> contains various utility functions to + used for manipulating (write/append/read) the config files of the + SNMP agent. </p> + + <marker id="agent_entry"></marker> + </description> + <funcs> + <func> + <name>agent_entry(Tag, Val) -> agent_entry()</name> + <fsummary>Create an agent entry</fsummary> + <type> + <v>Tag = intAgentIpAddress | intAgentUDPPort | intAgentMaxPacketSize | snmpEngineMaxMessageSize | snmpEngineID</v> + <v>Val = term()</v> + <v>agent_entry() = term()</v> + </type> + <desc> + <p>Create an entry for the agent config file, <c>agent.conf</c>. </p> + <p>The type of <c>Val</c> depends on the value of <c>Tag</c>, + see + <seealso marker="snmp_agent_config_files#agent_information">Agent Information</seealso> + for more info. </p> + + <marker id="write_agent_config"></marker> + </desc> + </func> + + <func> + <name>write_agent_config(Dir, Conf) -> ok</name> + <name>write_agent_config(Dir, Hdr, Conf) -> ok</name> + <fsummary>Write the agent config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Hdr = string()</v> + <v>Conf = [agent_entry()]</v> + </type> + <desc> + <p>Write the agent config to the agent config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p><c>Hdr</c> is an optional file header (note that this text is + written to the file as is). </p> + <p>See + <seealso marker="snmp_agent_config_files#agent_information">Agent Information</seealso> + for more info. </p> + + <marker id="append_agent_config"></marker> + </desc> + </func> + + <func> + <name>append_agent_config(Dir, Conf) -> ok</name> + <fsummary>Append the agent config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [agent_entry()]</v> + </type> + <desc> + <p>Append the config to the current agent config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#agent_information">Agent Information</seealso> + for more info. </p> + + <marker id="read_agent_config"></marker> + </desc> + </func> + + <func> + <name>read_agent_config(Dir) -> Conf</name> + <fsummary>Read the agent config from the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [agent_entry()]</v> + </type> + <desc> + <p>Read the current agent config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#agent_information">Agent Information</seealso> + for more info. </p> + + <marker id="standard_entry"></marker> + </desc> + </func> + + <func> + <name>standard_entry(Tag, Val) -> standard_entry()</name> + <fsummary>Create an standard entry</fsummary> + <type> + <v>Tag = sysDescr | sysObjectID | sysContact | sysName | sysLocation | sysServices | snmpEnableAuthenTraps</v> + <v>Val = term()</v> + <v>standard_entry() = term()</v> + </type> + <desc> + <p>Create an entry for the agent standard config file, + <c>standard.conf</c>. </p> + <p>The type of <c>Val</c> depends on the value of <c>Tag</c>, + see + <seealso marker="snmp_agent_config_files#system_information">System Information</seealso> + for more info. </p> + + <marker id="write_standard_config"></marker> + </desc> + </func> + + <func> + <name>write_standard_config(Dir, Conf) -> ok</name> + <name>write_standard_config(Dir, Hdr, Conf) -> ok</name> + <fsummary>Write the agent standard config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Hdr = string()</v> + <v>Conf = [standard_entry()]</v> + </type> + <desc> + <p>Write the agent standard config to the agent standard + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p><c>Hdr</c> is an optional file header (note that this text is + written to the file as is). </p> + <p>See + <seealso marker="snmp_agent_config_files#system_information">System Information</seealso> + for more info. </p> + + <marker id="append_standard_config"></marker> + </desc> + </func> + + <func> + <name>append_standard_config(Dir, Conf) -> ok</name> + <fsummary>Append the agent standard config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [standard_entry()]</v> + </type> + <desc> + <p>Append the standard config to the current agent standard + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#system_information">System Information</seealso> + for more info. </p> + + <marker id="read_standard_config"></marker> + </desc> + </func> + + <func> + <name>read_standard_config(Dir) -> Conf</name> + <fsummary>Read the agent standard config from the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [standard_entry()]</v> + </type> + <desc> + <p>Read the current agent standard config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#system_information">System Information</seealso> + for more info. </p> + + <marker id="context_entry"></marker> + </desc> + </func> + + <func> + <name>context_entry(Context) -> context_entry()</name> + <fsummary>Create an context entry</fsummary> + <type> + <v>Context = string()</v> + <v>context_entry() = term()</v> + </type> + <desc> + <p>Create an entry for the agent context config file, + <c>context.conf</c>. </p> + <p>See + <seealso marker="snmp_agent_config_files#context">Contexts</seealso> + for more info. </p> + + <marker id="write_context_config"></marker> + </desc> + </func> + + <func> + <name>write_context_config(Dir, Conf) -> ok</name> + <name>write_context_config(Dir, Hdr, Conf) -> ok</name> + <fsummary>Write the agent context(s) to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Hdr = string()</v> + <v>Conf = [context_entry()]</v> + </type> + <desc> + <p>Write the agent context config to the agent context + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p><c>Hdr</c> is an optional file header (note that this text is + written to the file as is). </p> + <p>See + <seealso marker="snmp_agent_config_files#context">Contexts</seealso> + for more info. </p> + + <marker id="append_context_config"></marker> + </desc> + </func> + + <func> + <name>append_context_config(Dir, Conf) -> ok</name> + <fsummary>Append the agent context(s) to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [context_entry()]</v> + </type> + <desc> + <p>Append the context config to the current agent context + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#context">Contexts</seealso> + for more info. </p> + + <marker id="read_context_config"></marker> + </desc> + </func> + + <func> + <name>read_context_config(Dir) -> Conf</name> + <fsummary>Read the agent context config from the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [context_entry()]</v> + </type> + <desc> + <p>Read the current agent context config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#context">Contexts</seealso> + for more info. </p> + + <marker id="community_entry"></marker> + </desc> + </func> + + <func> + <name>community_entry(CommunityIndex) -> community_entry()</name> + <name>community_entry(CommunityIndex, CommunityName, SecName, ContextName, TransportTag) -> community_entry()</name> + <fsummary>Create an community entry</fsummary> + <type> + <v>CommunityIndex = string()</v> + <v>CommunityName = string()</v> + <v>SecName = string()</v> + <v>CtxName = string()</v> + <v>TransportTag = string()</v> + <v>community_entry() = term()</v> + </type> + <desc> + <p>Create an entry for the agent community config file, + <c>community.conf</c>. </p> + <p><c>CommunityIndex</c> must be a <em>non-empty</em> string. </p> + <p><c>community_entry("public")</c> translates to the following call: + <c>community_entry(CommunityIndex, CommunityIndex, "initial", "", "")</c>. </p> + <p><c>community_entry("all-rights")</c> translates to the following + call: <c>community_entry(CommunityIndex, CommunityIndex, CommunityIndex, "", "")</c>. </p> + <p>See + <seealso marker="snmp_agent_config_files#community">Community</seealso> + for more info. </p> + + <marker id="write_community_config"></marker> + </desc> + </func> + + <func> + <name>write_community_config(Dir, Conf) -> ok</name> + <name>write_community_config(Dir, Hdr, Conf) -> ok</name> + <fsummary>Write the agent community config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Hdr = string()</v> + <v>Conf = [community_entry()]</v> + </type> + <desc> + <p>Write the agent community config to the agent community + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p><c>Hdr</c> is an optional file header (note that this text is + written to the file as is). </p> + <p>See + <seealso marker="snmp_agent_config_files#community">Community</seealso> + for more info. </p> + + <marker id="append_community_config"></marker> + </desc> + </func> + + <func> + <name>append_community_config(Dir, Conf) -> ok</name> + <fsummary>Append the agent community config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [community_entry()]</v> + </type> + <desc> + <p>Append the community config to the current agent community + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#community">Community</seealso> + for more info. </p> + + <marker id="read_community_config"></marker> + </desc> + </func> + + <func> + <name>read_community_config(Dir) -> Conf</name> + <fsummary>Read the agent community config from the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [community_entry()]</v> + </type> + <desc> + <p>Read the current agent community config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#community">Communities</seealso> + for more info. </p> + + <marker id="target_addr_entry"></marker> + </desc> + </func> + + <func> + <name>target_addr_entry(Name, Ip, TagList, ParamsName, EngineId) -> target_addr_entry()</name> + <name>target_addr_entry(Name, Ip, TagList, ParamsName, EngineId, TMask) -> target_addr_entry()</name> + <name>target_addr_entry(Name, Ip, Udp, TagList, ParamsName, EngineId, TMask, MaxMessageSize) -> target_addr_entry()</name> + <name>target_addr_entry(Name, Ip, Udp, Timeout, RetryCount, TagList, ParamsName, EngineId, TMask, MaxMessageSize) -> target_addr_entry()</name> + <fsummary>Create an target_addr entry</fsummary> + <type> + <v>Name = string()</v> + <v>Ip = string()</v> + <v>Udp = integer()</v> + <v>Timeout = integer()</v> + <v>RetryCount = integer()</v> + <v>TagList = string()</v> + <v>ParamsName = string()</v> + <v>EngineId = string()</v> + <v>TMask = string()</v> + <v>MaxMessageSize = integer()</v> + <v>target_addr_entry() = term()</v> + </type> + <desc> + <p>Create an entry for the agent target_addr config file, + <c>target_addr.conf</c>. </p> + <p><c>Name</c> must be a <em>non-empty</em> string. </p> + <p><c>target_addr_entry/5</c> translates to the following call: + <c>target_addr_entry(Name, Ip, TagList, ParamsName, EngineId)</c>. </p> + <p><c>target_addr_entry/6</c> translates to the following call: + <c>target_addr_entry(Name, Ip, 162, TagList, ParamsName, EngineId, TMask, 2048)</c>. </p> + <p><c>target_addr_entry/8</c> translates to the following call: + <c>target_addr_entry(Name, Ip, Udp, 1500, 3, TagList, ParamsName, EngineId, TMask, MaxMessageSize)</c>. </p> + <p>See + <seealso marker="snmp_agent_config_files#target_addr">Target Address Definitions</seealso> + for more info. </p> + + <marker id="write_target_addr_config"></marker> + </desc> + </func> + + <func> + <name>write_target_addr_config(Dir, Conf) -> ok</name> + <name>write_target_addr_config(Dir, Hdr, Conf) -> ok</name> + <fsummary>Write the agent target_addr config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Hdr = string()</v> + <v>Conf = [target_addr_entry()]</v> + </type> + <desc> + <p>Write the agent target_addr config to the agent target_addr + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p><c>Hdr</c> is an optional file header (note that this text is + written to the file as is). </p> + <p>See + <seealso marker="snmp_agent_config_files#target_addr">Target Address Definitions</seealso> + for more info. </p> + + <marker id="append_target_addr_config"></marker> + </desc> + </func> + + <func> + <name>append_target_addr_config(Dir, Conf) -> ok</name> + <fsummary>Append the agent target_addr config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [target_addr_entry()]</v> + </type> + <desc> + <p>Append the target_addr config to the current agent target_addr + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#target_addr">Target Address Definitions</seealso> + for more info. </p> + + <marker id="read_target_addr_config"></marker> + </desc> + </func> + + <func> + <name>read_target_addr_config(Dir) -> Conf</name> + <fsummary>Read the agent target_addr config from the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [target_addr_entry()]</v> + </type> + <desc> + <p>Read the current agent target_addr config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#target_addr">Target Address Definitions</seealso> + for more info. </p> + + <marker id="target_params_entry"></marker> + </desc> + </func> + + <func> + <name>target_params_entry(Name, Vsn) -> target_params_entry()</name> + <name>target_params_entry(Name, Vsn, SecName, SecLevel) -> target_params_entry()</name> + <name>target_params_entry(Name, MPModel, SecModel, SecName, SecLevel) -> target_params_entry()</name> + <fsummary>Create an target_params entry</fsummary> + <type> + <v>Name = string()</v> + <v>Vsn = v1 | v2 | v3</v> + <v>MPModel = v1 | v2c | v3</v> + <v>SecModel = v1 | v2c | usm</v> + <v>SecName = string()</v> + <v>SecLevel = noAuthNoPriv | authNoPriv | authPriv</v> + <v>target_params_entry() = term()</v> + </type> + <desc> + <p>Create an entry for the agent target_params config file, + <c>target_params.conf</c>. </p> + <p><c>Name</c> must be a <em>non-empty</em> string. </p> + <p><c>Vsn</c> translates into <c>MPModel</c> and <c>SecModel</c> as follows:</p> + <pre> +\011 Vsn = v1 => MPModel = v1, SecModel = v1 +\011 Vsn = v2 => MPModel = v2c, SecModel = v2c +\011 Vsn = v3 => MPModel = v3, SecModel = usm + </pre> + <p><c>target_params_entry/2</c> translates to the following call: + <c>target_params_entry(Name, Vsn, "initial", noAuthNoPriv)</c>. </p> + <p><c>target_params_entry/4</c> translates to the following + call: <c>target_params_entry(Name, MPModel, SecModel, SecName, SecLevel)</c> where <c>MPModel</c> and + <c>SecModel</c> is mapped from <c>Vsn</c>, see above. </p> + <p>See + <seealso marker="snmp_agent_config_files#target_params">Target Parameters Definitions</seealso> + for more info. </p> + + <marker id="write_target_params_config"></marker> + </desc> + </func> + + <func> + <name>write_target_params_config(Dir, Conf) -> ok</name> + <name>write_target_params_config(Dir, Hdr, Conf) -> ok</name> + <fsummary>Write the agent target_params config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Hdr = string()</v> + <v>Conf = [target_params_entry()]</v> + </type> + <desc> + <p>Write the agent target_params config to the agent target_params + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p><c>Hdr</c> is an optional file header (note that this text is + written to the file as is). </p> + <p>See + <seealso marker="snmp_agent_config_files#target_params">Target Parameters Definitions</seealso> + for more info. </p> + + <marker id="append_target_params_config"></marker> + </desc> + </func> + + <func> + <name>append_target_params_config(Dir, Conf) -> ok</name> + <fsummary>Append the agent target_params config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [target_params_entry()]</v> + </type> + <desc> + <p>Append the target_params config to the current agent target_params + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#target_params">Target Parameters Definitions</seealso> + for more info. </p> + + <marker id="read_target_params_config"></marker> + </desc> + </func> + + <func> + <name>read_target_params_config(Dir) -> Conf</name> + <fsummary>Read the agent target_params config from the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [target_params_entry()]</v> + </type> + <desc> + <p>Read the current agent target_params config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#target_params">Target Parameters Definitions</seealso> + for more info. </p> + + <marker id="vacm_entry"></marker> + </desc> + </func> + + <func> + <name>vacm_s2g_entry(SecModel, SecName, GroupName) -> vacm_s2g_entry()</name> + <name>vacm_acc_entry(GroupName, Prefix, SecModel, SecLevel, Match, ReadView, WriteView, NotifyView) -> vacm_acc_entry()</name> + <name>vacm_vtf_entry(ViewIndex, ViewSubtree) -> vacm_vtf_entry()</name> + <name>vacm_vtf_entry(ViewIndex, ViewSubtree, ViewStatus, ViewMask) -> vacm_vtf_entry()</name> + <fsummary>Create an vacm entry</fsummary> + <type> + <v>SecModel = v1 | v2c | usm</v> + <v>SecName = string()</v> + <v>GroupName = string()</v> + <v>Prefix = string()</v> + <v>SecLevel = noAuthNoPriv | authNoPriv | authPriv</v> + <v>Match = prefix | exact</v> + <v>ReadView = string()</v> + <v>WriteView = string()</v> + <v>NotifyView = string()</v> + <v>ViewIndex = integer()</v> + <v>ViewSubtree = [integer()]</v> + <v>ViewStatus = included | excluded</v> + <v>ViewMask = null | [zero_or_one()]</v> + <v>zero_or_one() = 0 | 1</v> + <v>vacm_s2g_entry() = term()</v> + <v>vacm_acc_entry() = term()</v> + <v>vacm_vtf_entry() = term()</v> + </type> + <desc> + <p>Create an entry for the agent vacm config file, + <c>vacm.conf</c>. </p> + <p><c>vacm_vtf_entry/2</c> translates to the following call: + <c>vacm_vtf_entry(ViewIndex, ViewSubtree, included, null)</c>. </p> + <p>See + <seealso marker="snmp_agent_config_files#vacm">MIB Views for VACM</seealso> + for more info. </p> + + <marker id="write_vacm_config"></marker> + </desc> + </func> + + <func> + <name>write_vacm_config(Dir, Conf) -> ok</name> + <name>write_vacm_config(Dir, Hdr, Conf) -> ok</name> + <fsummary>Write the agent vacm config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Hdr = string()</v> + <v>Conf = [vacm_entry()]</v> + <v>vacm_entry() = vacm_sg2_entry() | vacm_acc_entry() | vacm_vtf_entry()</v> + </type> + <desc> + <p>Write the agent vacm config to the agent vacm + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p><c>Hdr</c> is an optional file header (note that this text is + written to the file as is). </p> + <p>See + <seealso marker="snmp_agent_config_files#vacm">MIB Views for VACM</seealso> + for more info. </p> + + <marker id="append_vacm_config"></marker> + </desc> + </func> + + <func> + <name>append_vacm_config(Dir, Conf) -> ok</name> + <fsummary>Append the agent vacm config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [vacm_entry()]</v> + </type> + <desc> + <p>Append the vacm config to the current agent vacm + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#vacm">MIB Views for VACM</seealso> + for more info. </p> + + <marker id="read_vacm_config"></marker> + </desc> + </func> + + <func> + <name>read_vacm_config(Dir) -> Conf</name> + <fsummary>Read the agent vacm config from the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [vacm_entry()]</v> + </type> + <desc> + <p>Read the current agent vacm config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#vacm">MIB Views for VACM</seealso> + for more info. </p> + + <marker id="usm_entry"></marker> + </desc> + </func> + + <func> + <name>usm_entry(EngineId) -> usm_entry()</name> + <name>usm_entry(EngineID, UserName, SecName, Clone, AuthP, AuthKeyC, OwnAuthKeyC, PrivP, PrivKeyC, OwnPrivKeyC, Public, AuthKey, PrivKey) -> usm_entry()</name> + <fsummary>Create an usm entry</fsummary> + <type> + <v>EngineId = string()</v> + <v>UserName = string()</v> + <v>SecName = string()</v> + <v>Clone = zeroDotZero | [integer()]</v> + <v>AuthP = usmNoAuthProtocol | usmHMACMD5AuthProtocol, | usmHMACSHAAuthProtocol</v> + <v>AuthKeyC = string()</v> + <v>OwnAuthKeyC = string()</v> + <v>PrivP = usmNoPrivProtocol | usmDESPrivProtocol | usmAesCfb128Protocol</v> + <v>PrivKeyC = string()</v> + <v>OwnPrivKeyC = string()</v> + <v>Public = string()</v> + <v>AuthKey = [integer()]</v> + <v>PrivKey = [integer()]</v> + <v>usm_entry() = term()</v> + </type> + <desc> + <p>Create an entry for the agent vacm config file, + <c>vacm.conf</c>. </p> + <p><c>usm_entry/1</c> translates to the following call: + <c>usm_entry("initial", "initial", zeroDotZero, usmNoAuthProtocol, "", "", usmNoPrivProtocol, "", "", "", "", "")</c>. </p> + <p>See + <seealso marker="snmp_agent_config_files#usm">Security data for USM</seealso> + for more info. </p> + + <marker id="write_usm_config"></marker> + </desc> + </func> + + <func> + <name>write_usm_config(Dir, Conf) -> ok</name> + <name>write_usm_config(Dir, Hdr, Conf) -> ok</name> + <fsummary>Write the agent usm config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Hdr = string()</v> + <v>Conf = [usm_entry()]</v> + </type> + <desc> + <p>Write the agent usm config to the agent usm + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p><c>Hdr</c> is an optional file header (note that this text is + written to the file as is). </p> + <p>See + <seealso marker="snmp_agent_config_files#usm">Security data for USM</seealso> + for more info. </p> + + <marker id="append_usm_config"></marker> + </desc> + </func> + + <func> + <name>append_usm_config(Dir, Conf) -> ok</name> + <fsummary>Append the agent usm config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [usm_entry()]</v> + </type> + <desc> + <p>Append the usm config to the current agent vacm + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#usm">Security data for USM</seealso> + for more info. </p> + <marker id="read_usm_config"></marker> + </desc> + </func> + + <func> + <name>read_usm_config(Dir) -> Conf</name> + <fsummary>Read the agent usm config from the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [usm_entry()]</v> + </type> + <desc> + <p>Read the current agent usm config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#usm">Security data for USM</seealso> + for more info. </p> + + <marker id="notify_entry"></marker> + </desc> + </func> + + <func> + <name>notify_entry(Name, Tag, Type) -> notify_entry()</name> + <fsummary>Create an notify entry</fsummary> + <type> + <v>Name = string()</v> + <v>Tag = string()</v> + <v>Type = trap | inform</v> + <v>community_entry() = term()</v> + </type> + <desc> + <p>Create an entry for the agent notify config file, + <c>notify.conf</c>. </p> + <p><c>Name</c> must be a <em>non-empty</em> string. </p> + <p>See + <seealso marker="snmp_agent_config_files#notify">Notify Definitions</seealso> + for more info. </p> + + <marker id="write_notify_config"></marker> + </desc> + </func> + + <func> + <name>write_notify_config(Dir, Conf) -> ok</name> + <name>write_notify_config(Dir, Hdr, Conf) -> ok</name> + <fsummary>Write the agent notify config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Hdr = string()</v> + <v>Conf = [notify_entry()]</v> + </type> + <desc> + <p>Write the agent notify config to the agent notify + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p><c>Hdr</c> is an optional file header (note that this text is + written to the file as is). </p> + <p>See + <seealso marker="snmp_agent_config_files#notify">Notify Definitions</seealso> + for more info. </p> + + <marker id="append_notify_config"></marker> + </desc> + </func> + + <func> + <name>append_notify_config(Dir, Conf) -> ok</name> + <fsummary>Append the agent notify config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [notify_entry()]</v> + </type> + <desc> + <p>Append the notify config to the current agent notify + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#notify">Notify Definitions</seealso> + for more info. </p> + + <marker id="read_notify_config"></marker> + </desc> + </func> + + <func> + <name>read_notify_config(Dir) -> Conf</name> + <fsummary>Read the agent notify config from the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [community_entry()]</v> + </type> + <desc> + <p>Read the current agent notify config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_agent_config_files#notify">Notify Definitions</seealso> + for more info. </p> + <marker id="end"></marker> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmpa_discovery_handler.xml b/lib/snmp/doc/src/snmpa_discovery_handler.xml new file mode 100644 index 0000000000..47814221aa --- /dev/null +++ b/lib/snmp/doc/src/snmpa_discovery_handler.xml @@ -0,0 +1,118 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2004</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpa_discovery_handler</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpa_discovery_handler.xml</file> + </header> + <module>snmpa_discovery_handler</module> + <modulesummary>Behaviour module for the SNMP agent discovery handler.</modulesummary> + <description> + <p>This module defines the behaviour of the agent discovery + handler. A <c>snmpa_discovery_handler</c> compliant module + must export the following functions: </p> + <list type="bulleted"> + <item> + <p><seealso marker="#stage1_finish">stage1_finish/2</seealso></p> + </item> + </list> + <p>The semantics of them and their exact signatures are explained + below. </p> + + <marker id="stage1_finish"></marker> + </description> + + <funcs> + <func> + <name>stage1_finish(TargetName, ManagerEngineID, ExtraInfo) -> ignore | {ok, usm_entry() | [usm_entry()]} | {ok, usm_entry() | [usm_entry()], NewExtraInfo}</name> + <fsummary>Discovery stage 1 finish</fsummary> + <type> + <v>TargetName = string()</v> + <v>ManagerEngineID = string()</v> + <v>ExtraInfo = term()</v> + <v>usm_entry() = tuple() compatible with usm.conf</v> + <v>NewExtraInfo = term()</v> + </type> + <desc> + <p>This function is called at the end of stage 1 of the + discovery process. It should return either the atom + <c>ignore</c> or <c>{ok, usm_entry() | [usm_entry()]}</c>. See + <seealso marker="snmp_agent_config_files#usm">usm_entry()</seealso> + and + <seealso marker="snmpa_conf#usm_entry">usm_entry/13</seealso> + for more info. </p> + + <p>If the function returns <c>ignore</c>, then it is assumed that + either: </p> + + <list type="bulleted"> + <item>The caller (of the discovery function) will make the + needed updates later. </item> + <item>The callback function itself did the updates. </item> + </list> + + <p>In either case, the agent will do nothing, but return + the retrieved ManagerEngineID (see + <seealso marker="snmpa#discovery">discovery</seealso> + for more info) and possible continue with stage 2 of + the discovery process. </p> + + <p>The <c>ExtraInfo</c> argument is passed on from the + <seealso marker="snmpa#discovery">discovery</seealso> + function. </p> + + <p>This function may return an updated <c>NewExtraInfo</c> + that will be used in subsequent calls to the callback + functions. Intended for future use. </p> + + <p>The purpose of this function is to generate the usm- + related security data needed for usm processing in the + agent. Specifically, updating the usmUserTable. </p> + + <p>When an <c>usm_entry()</c> tuple (or a list of such + tuples) is returned, this data is then added to the + <c>usmUserTable</c> by the (master-) agent. </p> + + <p>When an <c>usm_entry()</c> tuple (or a list of such + tuples) is returned, this data is then added to the + <c>usmUserTable</c> by the (master-) agent. </p> + + <note><p>Note that the function does not check if this entry + already exists. </p></note> + + <note><p>Note that this function is executed in the context of + the master-agent process. </p></note> + + </desc> + </func> + + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmpa_error.xml b/lib/snmp/doc/src/snmpa_error.xml new file mode 100644 index 0000000000..a7312e8b24 --- /dev/null +++ b/lib/snmp/doc/src/snmpa_error.xml @@ -0,0 +1,91 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2002</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpa_error</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpa_error.xml</file> + </header> + <module>snmpa_error</module> + <modulesummary>Functions for Reporting SNMP Errors</modulesummary> + <description> + <marker id="desc"></marker> + <p>The module <c>snmpa_error</c> contains two callback functions + which are called if an error occurs at different times during agent + operation. These functions in turn calls the corresponding function + in the configured error report module, which implements the actual + report functionality. + </p> + <p>Two simple implementation(s) is provided with the + toolkit; the modules + <seealso marker="snmpa_error_logger">snmpa_error_logger</seealso> + which is the default and + <seealso marker="snmpa_error_io">snmpa_error_io</seealso>. + </p> + <p>The error report module is configured using the directive + <c>error_report_mod</c>, see + <seealso marker="snmp_config#configuration_params">configuration parameters</seealso>. + </p> + </description> + <funcs> + <func> + <name>config_err(Format, Args) -> void()</name> + <fsummary>Called if a configuration error occurs</fsummary> + <type> + <v>Format = string()</v> + <v>Args = list()</v> + </type> + <desc> + <p>The function is called if an error occurs during the + configuration phase, for example if a syntax error is found in + a configuration file. + </p> + <p><c>Format</c> and <c>Args</c> are as in + <c>io:format(Format, Args)</c>.</p> + </desc> + </func> + <func> + <name>user_err(Format, Args) -> void()</name> + <fsummary>Called if a user related error occurs</fsummary> + <type> + <v>Format = string()</v> + <v>Args = list()</v> + </type> + <desc> + <p>The function is called if a user related error occurs at + run-time, for example if a user defined instrumentation + function returns erroneous. + </p> + <p><c>Format</c> and <c>Args</c> are as in + <c>io:format(Format, Args)</c>.</p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmpa_error_io.xml b/lib/snmp/doc/src/snmpa_error_io.xml new file mode 100644 index 0000000000..33fbfac20c --- /dev/null +++ b/lib/snmp/doc/src/snmpa_error_io.xml @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2002</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpa_error_io</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpa_error_io.xml</file> + </header> + <module>snmpa_error_io</module> + <modulesummary>Functions for Reporting SNMP Errors on stdio</modulesummary> + <description> + <p>The module <c>snmpa_error_io</c> implements the + <c>snmp_error_report</c> behaviour + (see <seealso marker="snmpa_error_report">snmpa_error_report</seealso>) + containing two callback functions which are called in order to + report SNMP errors. + </p> + <p>This module provides a simple mechanism for reporting SNMP + errors. Errors are written to stdout using the <c>io</c> module. + It is provided as an simple example. + </p> + <p>This module needs to be explicitly configured, see + <seealso marker="snmpa_error#desc">snmpa_error</seealso> and + <seealso marker="snmp_config#configuration_params">configuration parameters</seealso>. + </p> + </description> + <funcs> + <func> + <name>config_err(Format, Args) -> void()</name> + <fsummary>Called if a configuration error occurs</fsummary> + <type> + <v>Format = string()</v> + <v>Args = list()</v> + </type> + <desc> + <p>The function is called if an error occurs during the + configuration phase, for example if a syntax error is found in + a configuration file. + </p> + <p><c>Format</c> and <c>Args</c> are as in + <c>io:format(Format, Args)</c>.</p> + </desc> + </func> + <func> + <name>user_err(Format, Args) -> void()</name> + <fsummary>Called if a user related error occurs</fsummary> + <type> + <v>Format = string()</v> + <v>Args = list()</v> + </type> + <desc> + <p>The function is called if a user related error occurs at + run-time, for example if a user defined instrumentation + function returns erroneous. + </p> + <p><c>Format</c> and <c>Args</c> are as in + <c>io:format(Format, Args)</c>.</p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmpa_error_logger.xml b/lib/snmp/doc/src/snmpa_error_logger.xml new file mode 100644 index 0000000000..06382a6057 --- /dev/null +++ b/lib/snmp/doc/src/snmpa_error_logger.xml @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>1996</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpa_error_logger</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpa_error_logger.xml</file> + </header> + <module>snmpa_error_logger</module> + <modulesummary>Functions for Reporting SNMP Errors through the error_logger</modulesummary> + <description> + <p>The module <c>snmpa_error_logger</c> implements the + <c>snmpa_error_report</c> behaviour + (see <seealso marker="snmpa_error_report">snmpa_error_report</seealso>) + containing two callback functions which are called in order to + report SNMP errors. + </p> + <p>This module provides a simple mechanism for reporting SNMP + errors. Errors are sent to the <c>error_logger</c> after a + size check. Messages are truncated after 1024 chars. + It is provided as an example. + </p> + <p>This module is the default error report module, but can be + explicitly configured, see + <seealso marker="snmpa_error#desc">snmpa_error</seealso> and + <seealso marker="snmp_config#configuration_params">configuration parameters</seealso>. + </p> + </description> + <funcs> + <func> + <name>config_err(Format, Args) -> void()</name> + <fsummary>Called if a configuration error occurs</fsummary> + <type> + <v>Format = string()</v> + <v>Args = list()</v> + </type> + <desc> + <p>The function is called if an error occurs during the + configuration phase, for example if a syntax error is found in + a configuration file. + </p> + <p><c>Format</c> and <c>Args</c> are as in + <c>io:format(Format, Args)</c>.</p> + </desc> + </func> + <func> + <name>user_err(Format, Args) -> void()</name> + <fsummary>Called if a user related error occurs</fsummary> + <type> + <v>Format = string()</v> + <v>Args = list()</v> + </type> + <desc> + <p>The function is called if a user related error occurs at + run-time, for example if a user defined instrumentation + function returns erroneous. + </p> + <p><c>Format</c> and <c>Args</c> are as in + <c>io:format(Format, Args)</c>.</p> + </desc> + </func> + </funcs> + + <section> + <title>See Also</title> + <p>error_logger(3)</p> + </section> + +</erlref> + diff --git a/lib/snmp/doc/src/snmpa_error_report.xml b/lib/snmp/doc/src/snmpa_error_report.xml new file mode 100644 index 0000000000..421202bade --- /dev/null +++ b/lib/snmp/doc/src/snmpa_error_report.xml @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2004</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpa_error_report</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpa_error_report.xml</file> + </header> + <module>snmpa_error_report</module> + <modulesummary>Behaviour module for reporting SNMP agent errors</modulesummary> + <description> + <marker id="desc"></marker> + <p>This module defines the behaviour of the agent error reporting. + A <c>snmpa_error_report</c> compliant module + must export the following functions: </p> + <list type="bulleted"> + <item> + <p>config_err/2</p> + </item> + <item> + <p>user_err/2</p> + </item> + </list> + <p>The semantics of them and their exact signatures are explained + below. </p> + </description> + <funcs> + <func> + <name>config_err(Format, Args) -> void()</name> + <fsummary>Called if a configuration error occurs</fsummary> + <type> + <v>Format = string()</v> + <v>Args = list()</v> + </type> + <desc> + <p>The function is called if an error occurs during the + configuration phase, for example if a syntax error is found in + a configuration file. + </p> + <p><c>Format</c> and <c>Args</c> are as in + <c>io:format(Format, Args)</c>.</p> + </desc> + </func> + <func> + <name>user_err(Format, Args) -> void()</name> + <fsummary>Called if a user related error occurs</fsummary> + <type> + <v>Format = string()</v> + <v>Args = list()</v> + </type> + <desc> + <p>The function is called if a user related error occurs at + run-time, for example if a user defined instrumentation + function returns erroneous. + </p> + <p><c>Format</c> and <c>Args</c> are as in + <c>io:format(Format, Args)</c>.</p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmpa_local_db.xml b/lib/snmp/doc/src/snmpa_local_db.xml new file mode 100644 index 0000000000..c077bc96d8 --- /dev/null +++ b/lib/snmp/doc/src/snmpa_local_db.xml @@ -0,0 +1,190 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>1996</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpa_local_db</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpa_local_db.xml</file> + </header> + <module>snmpa_local_db</module> + <modulesummary>The SNMP built-in database</modulesummary> + <description> + <p>The module <c>snmpa_local_db</c> contains functions for + implementing tables (and variables) using the SNMP built-in + database. The database exists in two instances, one volatile + and one persistent. The volatile database is implemented with + ets. The persistent database is implemented with dets. + </p> + <p>There is a scaling problem with this database. + </p> + <list type="bulleted"> + <item>Insertions and deletions are inefficient for large tables. + </item> + </list> + <p>This problem is best solved by using Mnesia instead. + </p> + <p>The following functions describe the interface to + <c>snmpa_local_db</c>. Each function has a Mnesia equivalent. + The argument <c>NameDb</c> is a tuple <c>{Name, Db}</c> where + <c>Name</c> is the symbolic name of the managed object (as defined + in the MIB), and <c>Db</c> is either <c>volatile</c> or + <c>persistent</c>. <c>mnesia</c> is not possible since all these + functions are <c>snmpa_local_db</c> specific. + </p> + </description> + + <section> + <title>Common Data Types</title> + <p>In the functions defined below, the following types are + used: + </p> + <list type="bulleted"> + <item> + <p><c>NameDb = {Name, Db}</c></p> + </item> + <item> + <p><c>Name = atom(), Db = volatile | persistent</c></p> + </item> + <item> + <p><c>RowIndex = [int()]</c></p> + </item> + <item> + <p><c>Cols = [Col] | [{Col, Value}], Col = int(), Value = term()</c></p> + </item> + </list> + <p>where <c>RowIndex</c> denotes the last part of the OID, that + specifies the index of the row in the table. <c>Cols</c> is a + list of column numbers in case of a get operation, and a list of + column numbers and values in case of a set operation. + </p> + </section> + <funcs> + <func> + <name>dump() -> ok | {error, Reason}</name> + <fsummary>Dump the database to disk</fsummary> + <type> + <v>Reason = term()</v> + </type> + <desc> + <p>This function can be used to manually dump the database + to file.</p> + </desc> + </func> + <func> + <name>match(NameDb, Pattern)</name> + <fsummary>Perform a match on the table</fsummary> + <desc> + <p>Performs an ets/dets matching on the table. + See Stdlib documentation, module ets, for a description of + <c>Pattern</c> and the return values.</p> + </desc> + </func> + <func> + <name>print()</name> + <name>print(TableName)</name> + <name>print(TableName, Db)</name> + <fsummary>Print the database to screen</fsummary> + <type> + <v>TableName = atom()</v> + </type> + <desc> + <p>Prints the contents of the database on + screen. This is useful for debugging since the + <c>STANDARD-MIB</c> and <c>OTP-SNMPEA-MIB</c> + (and maybe your own MIBs) are stored in <c>snmpa_local_db</c>. + </p> + <p><c>TableName</c> is an atom for a table in the database. + When no name is supplied, the whole database is shown.</p> + </desc> + </func> + <func> + <name>table_create(NameDb) -> bool()</name> + <fsummary>Create a table</fsummary> + <desc> + <p>Creates a table. If the table already exist, the old copy + is destroyed. + </p> + <p>Returns <c>false</c> if the <c>NameDb</c> argument is + incorrectly specified, <c>true</c> otherwise.</p> + </desc> + </func> + <func> + <name>table_create_row(NameDb, RowIndex, Row) -> bool()</name> + <fsummary>Create a row in a table</fsummary> + <type> + <v>Row = {Val1, Val2, ..., ValN}</v> + <v>Val1 = Val2 = ... = ValN = term()</v> + </type> + <desc> + <p>Creates a row in a table. <c>Row</c> is a tuple with + values for all columns, including the index columns.</p> + </desc> + </func> + <func> + <name>table_delete(NameDb) -> void()</name> + <fsummary>Delete a table</fsummary> + <desc> + <p>Deletes a table.</p> + </desc> + </func> + <func> + <name>table_delete_row(NameDb, RowIndex) -> bool()</name> + <fsummary>Delete the row in the table</fsummary> + <desc> + <p>Deletes the row in the table.</p> + </desc> + </func> + <func> + <name>table_exists(NameDb) -> bool()</name> + <fsummary>Check if a table exists</fsummary> + <desc> + <p>Checks if a table exists.</p> + </desc> + </func> + <func> + <name>table_get_row(NameDb, RowIndex) -> Row | undefined</name> + <fsummary>Get a row from the table</fsummary> + <type> + <v>Row = {Val1, Val2, ..., ValN}</v> + <v>Val1 = Val2 = ... = ValN = term()</v> + </type> + <desc> + <p><c>Row</c> is a tuple with values for all columns, + including the index columns.</p> + </desc> + </func> + </funcs> + + <section> + <title>See Also</title> + <p>ets(3), dets(3), snmp_generic(3) + </p> + </section> + +</erlref> + diff --git a/lib/snmp/doc/src/snmpa_mpd.xml b/lib/snmp/doc/src/snmpa_mpd.xml new file mode 100644 index 0000000000..ea5bde8956 --- /dev/null +++ b/lib/snmp/doc/src/snmpa_mpd.xml @@ -0,0 +1,159 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>1999</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpa_mpd</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpa_mpd.xml</file> + </header> + <module>snmpa_mpd</module> + <modulesummary>Message Processing and Dispatch module for the SNMP agent</modulesummary> + <description> + <p>The module <c>snmpa_mpd</c> implements the version independent + Message Processing and Dispatch functionality in SNMP for the agent. + It is supposed to be used from a Network Interface process + (<seealso marker="snmp_agent_netif">Definition of Agent Net if</seealso>). + </p> + + <marker id="init"></marker> + </description> + + <funcs> + <func> + <name>init(Vsns) -> mpd_state()</name> + <fsummary>Initialize the MPD module</fsummary> + <type> + <v>Vsns = [Vsn]</v> + <v>Vsn = v1 | v2 | v3</v> + </type> + <desc> + <p>This function can be called from the net_if process at start-up. + The options list defines which versions to use. + </p> + <p>It also initializes some SNMP counters. + </p> + + <marker id="process_packet"></marker> + </desc> + </func> + + <func> + <name>process_packet(Packet, TDomain, TAddress, State) -> {ok, Vsn, Pdu, PduMS, ACMData} | {discarded, Reason} | {discovery, DiscoPacket}</name> + <fsummary>Process a packet received from the network</fsummary> + <type> + <v>Packet = binary()</v> + <v>TDomain = snmpUDPDomain</v> + <v>TAddress = {Ip, Udp}</v> + <v>Ip = {integer(), integer(), integer(), integer()}</v> + <v>Udp = integer()</v> + <v>State = mpd_state()</v> + <v>Vsn = 'version-1' | 'version-2' | 'version-3'</v> + <v>Pdu = #pdu</v> + <v>PduMs = integer()</v> + <v>ACMData = acm_data()</v> + <v>Reason = term()</v> + <v>DiscoPacket = binary()</v> + </type> + <desc> + <p>Processes an incoming packet. Performs authentication and + decryption as necessary. The return values should be passed the + agent.</p> + + <marker id="generate_response_msg"></marker> + </desc> + </func> + + <func> + <name>generate_response_msg(Vsn, RePdu, Type, ACMData) -> {ok, Packet} | {discarded, Reason}</name> + <fsummary>Generate a response packet to be sent to the network</fsummary> + <type> + <v>Vsn = 'version-1' | 'version-2' | 'version-3'</v> + <v>RePdu = #pdu</v> + <v>Type = atom()</v> + <v>ACMData = acm_data()</v> + <v>Packet = binary()</v> + </type> + <desc> + <p>Generates a possibly encrypted response packet to be sent to the + network. <c>Type</c> is the <c>#pdu.type</c> of the original + request.</p> + + <marker id="generate_msg"></marker> + </desc> + </func> + + <func> + <name>generate_msg(Vsn, Pdu, MsgData, To) -> {ok, PacketsAndAddresses} | {discarded, Reason}</name> + <fsummary>Generate a request message to be sent to the network</fsummary> + <type> + <v>Vsn = 'version-1' | 'version-2' | 'version-3'</v> + <v>Pdu = #pdu</v> + <v>MsgData = msg_data()</v> + <v>To = [dest_addrs()]</v> + <v>PacketsAndAddresses = [{TDomain, TAddress, Packet}]</v> + <v>TDomain = snmpUDPDomain</v> + <v>TAddress = {Ip, Udp}</v> + <v>Ip = {integer(), integer(), integer(), integer()}</v> + <v>Udp = integer()</v> + <v>Packet = binary()</v> + </type> + <desc> + <p>Generates a possibly encrypted request packet to be sent to the + network. + </p> + <p><c>MsgData</c> is the message specific data used in + the SNMP message. This value is received in a <c>send_pdu</c> + or <c>send_pdu_req</c> message from the agent. In SNMPv1 and + SNMPv2c, this message data is the community string. In + SNMPv3, it is the context information. + <c>To</c> is a list of the destination addresses and + their corresponding security parameters. This value is + also received from the requests mentioned above. + </p> + + <marker id="discarded_pdu"></marker> + </desc> + </func> + + <func> + <name>discarded_pdu(Variable) -> void()</name> + <fsummary>Increment the variable associated with a discarded pdu</fsummary> + <type> + <v>Variable = atom()</v> + </type> + <desc> + <p>Increments the variable associated with a discarded pdu. + This function can be used when the net_if process receives a + <c>discarded_pdu</c> message from the agent. + </p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmpa_network_interface.xml b/lib/snmp/doc/src/snmpa_network_interface.xml new file mode 100644 index 0000000000..a986343a4f --- /dev/null +++ b/lib/snmp/doc/src/snmpa_network_interface.xml @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2004</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpa_network_interface</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpa_network_interface.xml</file> + </header> + <module>snmpa_network_interface</module> + <modulesummary>Behaviour module for the SNMP agent network interface.</modulesummary> + <description> + <p>This module defines the behaviour of the agent network + interface. A <c>snmpa_network_interface</c> compliant module + must export the following functions: </p> + <list type="bulleted"> + <item> + <p><seealso marker="#start_link">start_link/4</seealso></p> + </item> + <item> + <p><seealso marker="#info">info/1</seealso></p> + </item> + <item> + <p><seealso marker="#get_log_type">get_log_type/1</seealso></p> + </item> + <item> + <p><seealso marker="#set_log_type">set_log_type/2</seealso></p> + </item> + <item> + <p><seealso marker="#verbosity">verbosity/2</seealso></p> + </item> + </list> + <p>The semantics of them and their exact signatures are explained + below. </p> + <p>But this is not enough. There is also a set of <em>mandatory</em> + messages which the network interface entity must be able to + receive and be able to send. This is described in chapter + <seealso marker="snmp_agent_netif">snmp_agent_netif</seealso>. + </p> + + <marker id="start_link"></marker> + </description> + + <funcs> + <func> + <name>start_link(Prio, NoteStore, MasterAgent, Opts) -> {ok, Pid} | {error, Reason}</name> + <fsummary>Start-link the network interface process</fsummary> + <type> + <v>Prio = priority()</v> + <v>NoteStore = pid()</v> + <v>MasterAgent = pid()</v> + <v>Opts = [opt()]</v> + <v>opt() = {verbosity, verbosity()} | {versions, versions()} | term()</v> + <v>versions() = [version()]</v> + <v>version() = v1 | v2 | v3</v> + </type> + <desc> + <p>Start-link the network interface process.</p> + <p><c>NoteStore</c> is the pid of the note-store process and + <c>MasterAgent</c> is the pid of the master-agent process.</p> + <p><c>Opts</c> is an (basically) implementation dependent list of + options to the network interface process. There are however + a number of options which <em>must</em> be handled: + <c>versions</c> and <c>verbosity</c>.</p> + + <marker id="info"></marker> + </desc> + </func> + + <func> + <name>info(Pid) -> [{Key, Value}]</name> + <fsummary>Return information about the running network interface process</fsummary> + <type> + <v>Pid = pid()</v> + </type> + <desc> + <p>The info returned is basically up to the implementer to decide. + This implementation provided by the application provides info about + memory allocation and various socket information.</p> + <p>The info returned by this function is returned together with other + info collected by the agent when the + <seealso marker="snmpa#info">info</seealso> function is called + (tagged with with the key <c>net_if</c>).</p> + + <marker id="verbosity"></marker> + </desc> + </func> + + <func> + <name>verbosity(Pid, Verbosity) -> void()</name> + <fsummary>Change the verbosity of a running network interface process</fsummary> + <type> + <v>Pid = pid()</v> + <v>Verbosity = verbosity()</v> + </type> + <desc> + <p>Change the verbosity of a running network interface process.</p> + + <marker id="get_log_type"></marker> + </desc> + </func> + + <func> + <name>get_log_type(Pid) -> {ok, LogType} | {error, Reason}</name> + <fsummary>Get the Audit Trail Log type</fsummary> + <type> + <v>Pid = pid()</v> + <v>LogType = atl_type()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>The Audit Trail Log is managed by the network interface process. + So, it is this process that has to retrieve the actual log-type. </p> +<!-- + <p>See + <seealso marker="snmpa#get_log_type">get_log_type</seealso> + for more info. </p> +--> + + <marker id="set_log_type"></marker> + </desc> + </func> + + <func> + <name>set_log_type(Pid, NewType) -> {ok, OldType} | {error, Reason}</name> + <fsummary>Change the Audit Trail Log type</fsummary> + <type> + <v>Pid = pid()</v> + <v>NewType = OldType = atl_type()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>The Audit Trail Log is managed by the network interface process. + So, it is this process that has to do the actual changing of the + type. </p> + <p>See + <seealso marker="snmpa#set_log_type">set_log_type</seealso> + for more info. </p> + </desc> + </func> + + </funcs> + + +</erlref> + diff --git a/lib/snmp/doc/src/snmpa_network_interface_filter.xml b/lib/snmp/doc/src/snmpa_network_interface_filter.xml new file mode 100644 index 0000000000..d625fd3e4a --- /dev/null +++ b/lib/snmp/doc/src/snmpa_network_interface_filter.xml @@ -0,0 +1,163 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2007</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpa_network_interface_filter</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpa_network_interface_filter.xml</file> + </header> + <module>snmpa_network_interface_filter</module> + <modulesummary>Behaviour module for the SNMP agent network-interface filter.</modulesummary> + <description> + <p>This module defines the behaviour of the agent network interface + filter. A <c>snmpa_network_interface_filter</c> compliant module + must export the following functions: </p> + <list type="bulleted"> + <item> + <p><seealso marker="#accept_recv">accept_recv/2</seealso></p> + </item> + <item> + <p><seealso marker="#accept_send">accept_send/2</seealso></p> + </item> + <item> + <p><seealso marker="#accept_recv_pdu">accept_recv_pdu/3</seealso></p> + </item> + <item> + <p><seealso marker="#accept_send_pdu">accept_send_pdu/2</seealso></p> + </item> + </list> + <p>The semantics of them and their exact signatures are explained + below. </p> + <p>The purpose of the network interface filter is to allow for filtering + of messages (accept or reject) receive and send. This is done + on two levels: </p> + <list type="bulleted"> + <item> + <p>The first level is at the UDP entry / exit point, i.e. + immediately after the receipt of the message, before any message + processing is done (accept_recv) and + immediately before sending the message, after all message + processing is done (accept_send).</p> + </item> + <item> + <p>The second level is at the MPD entry / exit point, i.e. + immediately after the basic message processing (accept_recv_pdu) / + immediately before the basic message processing (accept_send_pdu).</p> + </item> + </list> + <p>Note that the network interface filter is something which is used + by the network interface implementation provided by the application + (<c>snmpa_net_if</c>). The default filter accepts all messages.</p> + <p>A network interface filter can e.g. be used during testing or for load + regulation. If the intended use is load regulation, see also + <seealso marker="snmp_app#configuration_params">req_limit</seealso> and + the function + <seealso marker="snmpa#register_notification_filter">register_notification_filter</seealso>. </p> + </description> + + <section> + <title>DATA TYPES</title> + <code type="none"> +port() = integer() > 0 +pdu_type() = 'get-request' | 'get-next-request' | 'get-response' | 'set-request' | trap | 'get-bulk-request' | 'inform-request' | report + </code> + <marker id="accept_recv"></marker> + </section> + <funcs> + <func> + <name>accept_recv(Ip, Port) -> boolean()</name> + <fsummary>Shall the received message be accepted</fsummary> + <type> + <v>Ip = ip_address()</v> + <v>Port = port()</v> + </type> + <desc> + <p>Called at the reception of a message (before <em>any</em> processing + has been done).</p> + <p>For the message to be discarded, the function <em>must</em> return + <em>false</em>. </p> + <marker id="accept_send"></marker> + </desc> + </func> + <func> + <name>accept_send(Ip, Port) -> boolean()</name> + <fsummary>Shall the message be sent</fsummary> + <type> + <v>Ip = ip_address()</v> + <v>Port = port()</v> + </type> + <desc> + <p>Called before the sending of a message (after <em>all</em> processing + has been done).</p> + <p>For the message to be discarded, the function <em>must</em> return + <em>false</em>. </p> + <marker id="accept_recv_pdu"></marker> + </desc> + </func> + <func> + <name>accept_recv_pdu(Ip, Port, PduType) -> boolean()</name> + <fsummary>Shall the received pdu be accepted</fsummary> + <type> + <v>Ip = ip_address()</v> + <v>Port = port()</v> + <v>PduType = pdu_type()</v> + </type> + <desc> + <p>Called after the basic message processing (MPD) has been done, + but before the pdu is handed over to the master-agent for + primary processing.</p> + <p>For the pdu to be discarded, the function <em>must</em> return + <em>false</em>. </p> + <marker id="accept_send_pdu"></marker> + </desc> + </func> + <func> + <name>accept_send_pdu(Targets, PduType) -> Reply</name> + <fsummary>Shall the pdu be sent</fsummary> + <type> + <v>Targets = targets()</v> + <v>targets() = [target()]</v> + <v>target() = {ip_address(), port()}</v> + <v>PduType = pdu_type() > 0</v> + <v>Reply = boolean() | NewTargets</v> + <v>NewTargets = targets()</v> + </type> + <desc> + <p>Called before the basic message processing (MPD) is done, + when a pdu has been received from the master-agent.</p> + <p>For the message to be discarded all together, the function + <em>must</em> return <em>false</em>. </p> + <p>Note that it is possible for this function to filter out targets + (but <em>not</em> add it's own) by returning an updated + <c>Targets</c> list (<c>NewTargets</c>). </p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmpa_notification_delivery_info_receiver.xml b/lib/snmp/doc/src/snmpa_notification_delivery_info_receiver.xml new file mode 100644 index 0000000000..c52479f76a --- /dev/null +++ b/lib/snmp/doc/src/snmpa_notification_delivery_info_receiver.xml @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2008</year> + <year>2009</year> + <holder>Ericsson AB, All Rights Reserved</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + The Initial Developer of the Original Code is Ericsson AB. + </legalnotice> + + <title>snmpa_notification_delivery_info_receiver</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpa_notification_delivery_info_receiver.xml</file> + </header> + <module>snmpa_notification_delivery_info_receiver</module> + <modulesummary> + Behaviour module for the SNMP agent notification delivery + information receiver. + </modulesummary> + <description> + <p>This module defines the behaviour of the notification + delivery information receiver. </p> + <p>A <c>snmpa_notification_delivery_info_receiver</c> compliant module + must export the following functions: </p> + <list type="bulleted"> + <item> + <p><seealso marker="#delivery_targets">delivery_targets/3</seealso></p> + </item> + <item> + <p><seealso marker="#delivery_info">delivery_info/4</seealso></p> + </item> + </list> + <p>The semantics of them and their exact signatures are explained + below. </p> + + </description> + + <section> + <title>DATA TYPES</title> + <code type="none"><![CDATA[ +address() = A 4-tuple + ]]></code> + + <marker id="delivery_targets"></marker> + </section> + + <funcs> + <func> + <name>delivery_targets(Tag, Targets, Extra) -> void()</name> + <fsummary>Inform about target addresses</fsummary> + <type> + <v>Tag = term()</v> + <v>Targets = [target()]</v> + <v>target() = {Address, Port}</v> + <v>Address = address()</v> + <v>Port = integer()</v> + <v>Extra = term()</v> + </type> + <desc> + <p>Inform about target addresses. </p> + <p>This is the first function called when a notification delivery is + in progress. It informs the <c>receiver</c> which targets will + get the notification. The result of the delivery will be + provided via successive calls to <c>delivery_info/4</c> function, + see below.</p> + + <marker id="delivery_info"></marker> + </desc> + </func> + + <func> + <name>delivery_info(Tag, Target, DeliveryResult, Extra) -> void()</name> + <fsummary>Inform about delivery result</fsummary> + <type> + <v>Tag = term()</v> + <v>Target = target()</v> + <v>target() = {Address, Port}</v> + <v>Address = address()</v> + <v>Port = integer()</v> + <v>DeliveryResult = delivery_result()</v> + <v>delivery_result() = no_response | got_response</v> + <v>Extra = term()</v> + </type> + <desc> + <p>Inform about delivery result.</p> + <p>This function is called for each target in the <c>Targets</c> + argument of the <c>delivery_targets/3</c> function, see above. </p> + <p>The purpose is to inform the <c>receiver</c> of the + result of the delivery (was the notification acknowledged or + not) for each target.</p> + + </desc> + </func> + + </funcs> + + +</erlref> + diff --git a/lib/snmp/doc/src/snmpa_notification_filter.xml b/lib/snmp/doc/src/snmpa_notification_filter.xml new file mode 100644 index 0000000000..c3b300ecab --- /dev/null +++ b/lib/snmp/doc/src/snmpa_notification_filter.xml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2004</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpa_notification_filter</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpa_notification_filter.xml</file> + </header> + <module>snmpa_notification_filter</module> + <modulesummary>Behaviour module for the SNMP agent notification filters.</modulesummary> + <description> + <p>This module defines the behaviour of the agent notification + filters. A <c>snmpa_notification_filter</c> compliant module + must export the following functions: </p> + <list type="bulleted"> + <item> + <p>handle_notification/2</p> + </item> + </list> + <p>The semantics of them and their exact signatures are explained + below. </p> + <p>The purpose of notification filters is to allow for modification + and/or suppression of a notification.</p> + <p>A misbehaving filter will be removed.</p> + </description> + <funcs> + <func> + <name>handle_notification(Notif, Data) -> Reply</name> + <fsummary>Handle a notification</fsummary> + <type> + <v>Reply = send | {send, NewNotif} | dont_send</v> + <v>Notif = NewNotif = notification() | trap()</v> + <v>Data = term()</v> + </type> + <desc> + <p>Handle a notification to be sent. The filter can either + accept the notification as is, return <c>send</c>, modify + the notification, return <c>{send, NewNotif}</c> or + suppress the notification, return <c>dont_send</c>.</p> + <p><c>Data</c> is supplied at filter registration time, + see <seealso marker="snmpa#register_notification_filter">register_notification_filter</seealso>. + </p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmpa_supervisor.xml b/lib/snmp/doc/src/snmpa_supervisor.xml new file mode 100644 index 0000000000..89b4eb8d54 --- /dev/null +++ b/lib/snmp/doc/src/snmpa_supervisor.xml @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2004</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpa_supervisor</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpa_supervisor.xml</file> + </header> + <module>snmpa_supervisor</module> + <modulesummary>A supervisor for the SNMP agent Processes</modulesummary> + <description> + <p>This is the top supervisor for the agent part of the SNMP + application. There is always one supervisor at each node with + an SNMP agent (master agent or sub-agent). + </p> + </description> + <funcs> + <func> + <name>start_sub_sup(Opts) -> {ok, pid()} | {error, {already_started, pid()}} | {error, Reason}</name> + <fsummary>Start the SNMP supervisor for sub-agents only</fsummary> + <type> + <v>Opts = [opt()]</v> + <v>opt() = {db_dir, string()} | ...</v> + </type> + <desc> + <p>Starts a supervisor for the SNMP agent system without a + master agent. The supervisor starts all involved SNMP + processes, but no agent processes. Sub-agents should be + started by calling <c>start_sub_agent/3</c>. + </p> + <p><c>db_dir</c> is mandatory.</p> + <p>See <seealso marker="snmp_config#configuration_params">configuration parameters</seealso> for + a description of the options.</p> + </desc> + </func> + <func> + <name>start_master_sup(Opts) -> {ok, pid()} | {error, {already_started, pid()}} | {error, Reason}</name> + <fsummary>Start the SNMP supervisor for all agents</fsummary> + <type> + <v>Opts = [opt()]</v> + <v>opt() = {db_dir, string()} | {config, ConfOpts()} | ...</v> + <v>ConfOpts = [conf_opts()]</v> + <v>conf_opts() = {dir, string()} | ...</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Starts a supervisor for the SNMP agent system. The + supervisor starts all involved SNMP processes, including the + master agent. Sub-agents should be started by calling + <c>start_subagent/3</c>. + </p> + <p><c>db_dir</c> is mandatory.</p> + <p><c>dir</c> in config is mandatory.</p> + <p>See <seealso marker="snmp_config">snmp config</seealso> for + a description of the options.</p> + </desc> + </func> + <func> + <name>start_sub_agent(ParentAgent,Subtree,Mibs) -> {ok, pid()} | {error, Reason}</name> + <fsummary>Start a sub-agent</fsummary> + <type> + <v>ParentAgent = pid()</v> + <v>SubTree = oid()</v> + <v>Mibs = [MibName]</v> + <v>MibName = [string()]</v> + </type> + <desc> + <p>Starts a sub-agent on the node where the function is + called. The <c>snmpa_supervisor</c> must be running. + </p> + <p>If the supervisor is not running, the function fails with the + reason <c>badarg</c>.</p> + </desc> + </func> + <func> + <name>stop_sub_agent(SubAgent) -> ok | no_such_child</name> + <fsummary>Stop a sub-agent</fsummary> + <type> + <v>SubAgent = pid()</v> + </type> + <desc> + <p>Stops the sub-agent on the node where the function is + called. The <c>snmpa_supervisor</c> must be running. + </p> + <p>If the supervisor is not running, the function fails with the + reason <c>badarg</c>.</p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmpc.xml b/lib/snmp/doc/src/snmpc.xml new file mode 100644 index 0000000000..48d63d6c91 --- /dev/null +++ b/lib/snmp/doc/src/snmpc.xml @@ -0,0 +1,201 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2004</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpc</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpc.xml</file> + </header> + <module>snmpc</module> + <modulesummary>Interface Functions to the SNMP toolkit MIB compiler</modulesummary> + <description> + <p>The module <c>snmpc</c> contains interface functions to the + SNMP toolkit MIB compiler.</p> + + </description> + + <funcs> + <func> + <name>compile(File)</name> + <name>compile(File, Options) -> {ok, BinFileName} | {error, Reason}</name> + <fsummary>Compile the specified MIB</fsummary> + <type> + <v>File = string()</v> + <v>Options = [opt()]</v> + <v>opt() = db() | deprecated() | description() | reference() | group_check() | i() | il() | imports() | module() | module_identity() | outdir() | no_defs() | verbosity() | warnings()</v> + <v>db() = {db, volatile|persistent|mnesia}</v> + <v>deprecated() = {deprecated, bool()}</v> + <v>description() = description</v> + <v>reference() = reference</v> + <v>group_check() = {group_check, bool()}</v> + <v>i() = {i, [dir()]}</v> + <v>il() = {il, [dir()]}</v> + <v>imports() = imports</v> + <v>module() = {module, atom()}</v> + <v>module_identity() = module_identity</v> + <v>no_defs() = no_defs</v> + <v>outdir() = {outdir, dir()}</v> + <v>verbosity() = {verbosity, silence|warning|info|log|debug|trace}</v> + <v>warnings() = {warnings, bool()}</v> + <v>dir() = string()</v> + <v>BinFileName = string()</v> + </type> + <desc> + <marker id="compiler_opts"></marker> + <p>Compiles the specified MIB file <c><![CDATA[<File>.mib]]></c>. The + compiled file <c>BinFileName</c> is called + <c><![CDATA[<File>.bin]]></c>. </p> + <list type="bulleted"> + <item>The option <c>db</c> specifies which database should + be used for the default instrumentation. Default is + <c>volatile</c>. + </item> + <item>The option <c>deprecated</c> specifies if a deprecated + definition should be kept or not. If the option is + false the MIB compiler will ignore all deprecated + definitions. Default is <c>true</c>. + </item> + <item>The option <c>description</c> specifies if the text + of the DESCRIPTION field will be included or not. By default + it is not included, but if this option is present it will + be. + </item> + <item>The option <c>reference</c> specifies if the text + of the REFERENCE field, when found in a table definition, + will be included or not. By default + it is not included, but if this option is present it will + be. The reference text will be placed in the allocList field + of the mib-entry record (#me{}) for the table. + </item> + <item>The option <c>group_check</c> specifies whether the + mib compiler should check the OBJECT-GROUP macro and + the NOTIFICATION-GROUP macro for correctness or not. + Default is <c>true</c>. + </item> + <item>The option <c>i</c> specifies the path to search for + imported (compiled) MIB files. The directories should be + strings with a trailing directory delimiter. Default is + <c>["./"]</c>. + </item> + <item>The option <c>il</c> (include_lib) also specifies a + list of directories to search for imported MIBs. It + assumes that the first element in the directory name + corresponds to an OTP application. The compiler will find + the current installed version. For example, the value + ["snmp/mibs/"] will be replaced by ["snmp-3.1.1/mibs/"] + (or what the current version may be in the system). The + current directory and the <c><![CDATA[<snmp-home>/priv/mibs/]]></c> + are always listed last in the include path. + </item> + <item>The option <c>imports</c>, if present, specifies that the + IMPORT statement of the MIB shall be included in the compiled mib. + </item> + <item>The option <c>module</c>, if present, specifies the + name of a module which implements all instrumentation + functions for the MIB. The name of all instrumentation + functions must be the same as the corresponding managed + object it implements. + </item> + <item>The option <c>module_identity</c>, if present, specifies + that the info part of the MODULE-IDENTITY statement of the MIB + shall be included in the compiled mib. + </item> + <item>The option <c>no_defs</c>, if present, specifies + that if a managed object does not have an instrumentation + function, the default instrumentation function should NOT + be used, instead this is reported as an error, and the + compilation aborts. + </item> + <item>The option <c>verbosity</c> specifies the verbosity of + the SNMP mib compiler. I.e. if warning, info, log, debug + and trace messages shall be shown. Default is <c>silence</c>. + Note that if the option <c>warnings</c> is <c>true</c> and the + option <c>verbosity</c> is <c>silence</c>, warning messages will + still be shown. + </item> + <item>The option <c>warnings</c> specifies whether warning + messages should be shown. Default is <c>true</c>. + </item> + </list> + <p>The MIB compiler understands both SMIv1 and SMIv2 MIBs. It + uses the <c>MODULE-IDENTITY</c> statement to determine if the MIB is + version 1 or 2. + </p> + <p>The MIB compiler can be invoked from the OS command line by + using the command <c>erlc</c>. <c>erlc</c> recognizes the + extension <c>.mib</c>, and invokes the SNMP MIB compiler for + files with that extension. The options <c>db</c>, + <c>group_check</c>, <c>deprecated</c>, <c>description</c>, + <c>verbosity</c>, <c>imports</c> and <c>module_identity</c> + have to be specified to <c>erlc</c> using the syntax + <c>+term</c>. See <c>erlc(1)</c> for details. + </p> + </desc> + </func> + <func> + <name>is_consistent(Mibs) -> ok | {error, Reason}</name> + <fsummary>Check for OID conflicts between MIBs</fsummary> + <type> + <v>Mibs = [MibName]</v> + <v>MibName = string()</v> + </type> + <desc> + <p>Checks for multiple usage of object identifiers and traps + between MIBs. + </p> + </desc> + </func> + <func> + <name>mib_to_hrl(MibName) -> ok | {error, Reason}</name> + <fsummary>Generate constants for the objects in the MIB</fsummary> + <type> + <v>MibName = string()</v> + </type> + <desc> + <p>Generates a <c>.hrl</c> file with definitions of Erlang + constants for the objects in the MIB. The <c>.hrl</c> file is + called <c><![CDATA[<MibName>.hrl]]></c>. The MIB must be compiled, and + present in the current directory. + </p> + <p>The <c>mib_to_hrl</c> generator can be invoked from the OS + command line by using the command <c>erlc</c>. <c>erlc</c> + recognizes the extension <c>.bin</c>, and invokes this function + for files with that extension. + </p> + </desc> + </func> + </funcs> + + <section> + <title>See Also</title> + <p>erlc(1) + </p> + </section> + +</erlref> + diff --git a/lib/snmp/doc/src/snmpm.xml b/lib/snmp/doc/src/snmpm.xml new file mode 100644 index 0000000000..9e7ac75daf --- /dev/null +++ b/lib/snmp/doc/src/snmpm.xml @@ -0,0 +1,1043 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2004</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpm</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpm.xml</file> + </header> + <module>snmpm</module> + <modulesummary>Interface functions to the SNMP toolkit manager</modulesummary> + <description> + <p>The module <c>snmpm</c> contains interface functions to the + SNMP manager. </p> + </description> + + <section> + <title>Common Data Types</title> + <p>The following data types are used in the functions below:</p> +<code type="none"><![CDATA[ +oid() = [byte()] - The oid() type is used to represent an ASN.1 OBJECT IDENTIFIER +snmp_reply() = {error_status(), error_index(), varbinds()} +error_status() = noError | atom() +error_index() = integer() +varbinds() = [varbind()] +atl_type() = read | write | read_write +target_name() = string() - Is a unique *non-empty* string +vars_and_vals() = [var_and_val()] +var_and_val() = {oid(), value_type(), value()} | {oid(), value()} +value_type() = o ('OBJECT IDENTIFIER') | + i ('INTEGER') | + u ('Unsigned32') | + g ('Unsigned32') | + s ('OCTET SRING') | + b ('BITS') | + ip ('IpAddress') | + op ('Opaque') | + c32 ('Counter32') | + c64 ('Counter64') | + tt ('TimeTicks') +value() = term() +]]></code> + + <marker id="monitor"></marker> + </section> + <funcs> + <func> + <name>monitor() -> Ref</name> + <fsummary>Monitor the snmp manager</fsummary> + <type> + <v>Ref = reference()</v> + </type> + <desc> + <p>Monitor the SNMP manager. In case of a crash, the calling + (monitoring) process will get a 'DOWN' message (see the erlang + module for more info). </p> + + <marker id="demonitor"></marker> + </desc> + </func> + + <func> + <name>demonitor(Ref) -> void()</name> + <fsummary>Turn off monitoring of the snmp manager</fsummary> + <type> + <v>Ref = reference()</v> + </type> + <desc> + <p>Turn off monitoring of the SNMP manager. </p> + + <marker id="notify_started"></marker> + </desc> + </func> + + <func> + <name>notify_started(Timeout) -> Pid</name> + <fsummary>Request to be notified when manager started</fsummary> + <type> + <v>Timeout = integer()</v> + <v>Pid = pid()</v> + </type> + <desc> + <p>Request a notification (message) when the SNMP manager has + started. </p> + <p>The <c>Timeout</c> is the time the request is valid. The + value has to be greater then zero. </p> + <p>The <c>Pid</c> is the process handling the supervision of the + SNMP manager start. When the manager has started a completion + message will be sent to the client from this process: + <c>{snmpm_started, Pid}</c>. If the SNMP manager was not started + in time, a timeout message will be sent to the client: + <c>{snmpm_start_timeout, Pid}</c>. </p> + <p>A client application that is dependent on the SNMP manager + will use this function in order to be notified of when the + manager has started. There are two situations when this + is useful:</p> + <list type="bulleted"> + <item> + <p>During the start of a system, when a client application + <em>could</em> start prior to the SNMP manager but is dependent + upon it, and therefor has to wait for it to start.</p> + </item> + <item> + <p>When the SNMP manager has crashed, the dependent client + application has to wait for the SNMP manager to be restarted + before it can <em>reconnect</em>.</p> + </item> + </list> + <p>The function returns the pid() of a handler process, that does + the supervision on behalf of the client application. Note that the + client application is linked to this handler. </p> + <p>This function is used in conjunction with the monitor function.</p> + + <marker id="cancel_notify_started"></marker> + </desc> + </func> + + <func> + <name>cancel_notify_started(Pid) -> void()</name> + <fsummary>Cancel request to be notified when manager started</fsummary> + <type> + <v>Pid = pid()</v> + </type> + <desc> + <p>Cancel a previous request to be notified of SNMP manager start.</p> + + <marker id="register_user"></marker> + </desc> + </func> + + <func> + <name>register_user(Id, Module, Data) -> ok | {error, Reason}</name> + <name>register_user(Id, Module, Data, DefaultAgentConfig) -> ok | {error, Reason}</name> + <fsummary>Register a user of the manager</fsummary> + <type> + <v>Id = term()</v> + <v>Module = snmpm_user()</v> + <v>Data = term()</v> + <v>DefaultAgentConfig = [default_agent_config()]</v> + <v>default_agent_config() = {Item, Val}</v> + <v>Item = community | timeout | max_message_size | version | sec_model | sec_name | sec_level</v> + <v>Val = term()</v> + <v>Reason = term()</v> + <v>snmpm_user() = Module implementing the snmpm_user behaviour</v> + </type> + <desc> + <p>Register the manager entity (=user) responsible for specific + agent(s). </p> + + <p><c>Module</c> is the callback module (snmpm_user behaviour) which + will be called whenever something happens (detected + agent, incoming reply or incoming trap/notification). + Note that this could have already been done as a + consequence of the node config. (see users.conf).</p> + + <p>The argument <c>DefaultAgentConfig</c> is used as default values when + this user register agents.</p> + + <p>The type of <c>Val</c> depends on <c>Item</c>: </p> +<code type="none"><![CDATA[ +community = string() +timeout = integer() | snmp_timer() +max_message_size = integer() +version = v1 | v2 | v3 +sec_model = any | v1 | v2c | usm +sec_name = string() +sec_level = noAuthNoPriv | authNoPriv | authPriv + ]]></code> + + <marker id="register_user_monitor"></marker> + </desc> + </func> + + <func> + <name>register_user_monitor(Id, Module, Data) -> ok | {error, Reason}</name> + <name>register_user_monitor(Id, Module, Data, DefaultAgentConfig) -> ok | {error, Reason}</name> + <fsummary>Register a monitored user of the manager</fsummary> + <type> + <v>Id = term()</v> + <v>Module = snmpm_user()</v> + <v>DefaultAgentConfig = [default_agent_config()]</v> + <v>default_agent_config() = {Item, Val}</v> + <v>Item = community | timeout | max_message_size | version | sec_model | sec_name | sec_level</v> + <v>Val = term()</v> + <v>Data = term()</v> + <v>Reason = term()</v> + <v>snmpm_user() = Module implementing the snmpm_user behaviour</v> + </type> + <desc> + <p>Register the monitored manager entity (=user) responsible + for specific agent(s). </p> + + <p>The process performing the registration will be monitored. + Which means that if that process should die, all agents + registered by that user process will be unregistered. All + outstanding requests will be canceled. </p> + + <p><c>Module</c> is the callback module (snmpm_user behaviour) which + will be called whenever something happens (detected + agent, incoming reply or incoming trap/notification). + Note that this could have already been done as a + consequence of the node config. (see users.conf).</p> + + <p>The argument <c>DefaultAgentConfig</c> is used as default values when + this user register agents.</p> + + <p>The type of <c>Val</c> depends on <c>Item</c>: </p> +<code type="none"><![CDATA[ +community = string() +timeout = integer() | snmp_timer() +max_message_size = integer() +version = v1 | v2 | v3 +sec_model = any | v1 | v2c | usm +sec_name = string() +sec_level = noAuthNoPriv | authNoPriv | authPriv + ]]></code> + + <marker id="unregister_user"></marker> + </desc> + </func> + + <func> + <name>unregister_user(Id) -> ok | {error, Reason}</name> + <fsummary>Unregister the user</fsummary> + <type> + <v>Id = term()</v> + </type> + <desc> + <p>Unregister the user.</p> + + <marker id="which_users"></marker> + </desc> + </func> + + <func> + <name>which_users() -> Users</name> + <fsummary>Get a list of all users</fsummary> + <type> + <v>Users = [UserId]</v> + <v>UserId = term()</v> + </type> + <desc> + <p>Get a list of the identities of all registered users.</p> + + <marker id="register_agent"></marker> + </desc> + </func> + + <func> + <name>register_agent(UserId, TargetName, Config) -> ok | {error, Reason}</name> + <fsummary>Register this agent</fsummary> + <type> + <v>UserId = term()</v> + <v>Addr = ip_address()</v> + <v>TargetName = target_name()</v> + <v>Config = [agent_config()]</v> + <v>agent_config() = {Item, Val}</v> + <v>Item = engine_id | address | port | community | timeout | max_message_size | version | sec_model | sec_name | sec_level</v> + <v>Val = term()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Explicitly instruct the manager to handle this agent, with + <c>UserId</c> as the responsible user. </p> + <p>Called to instruct the manager that this agent + shall be handled. This function is used when + the user knows in advance which agents the + manager shall handle. + Note that there is an alternate way to do the same thing: + Add the agent to the manager config files (see + <seealso marker="snmp_manager_config_files#agents">agents.conf</seealso>).</p> + <p><c>TargetName</c> is a non-empty string, + uniquely identifying the agent. </p> + <p>The type of <c>Val</c> depends on <c>Item</c>: </p> +<code type="none"><![CDATA[ +[mandatory] engine_id = string() +[mandatory] address = ip_address() +[optional] port = integer() +[optional] community = string() +[optional] timeout = integer() | snmp_timer() +[optional] max_message_size = integer() +[optional] version = v1 | v2 | v3 +[optional] sec_model = any | v1 | v2c | usm +[optional] sec_name = string() +[optional] sec_level = noAuthNoPriv | authNoPriv | authPriv +]]></code> + <p>Note that if no <c>Port</c> is given, the default value is used.</p> + + <marker id="unregister_agent"></marker> + </desc> + </func> + + <func> + <name>unregister_agent(UserId, TargetName) -> ok | {error, Reason}</name> + <fsummary>Unregister the user</fsummary> + <type> + <v>UserId = term()</v> + <v>TargetName = target_name()</v> + </type> + <desc> + <p>Unregister the agent.</p> + + <marker id="agent_info"></marker> + </desc> + </func> + + <func> + <name>agent_info(TargetName, Item) -> {ok, Val} | {error, Reason}</name> + <fsummary>Retrieve agent config</fsummary> + <type> + <v>TargetName = target_name()</v> + <v>Item = atom()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Retrieve agent config.</p> + + <marker id="update_agent_info"></marker> + </desc> + </func> + + <func> + <name>update_agent_info(UserId, TargetName, Item, Val) -> ok | {error, Reason}</name> + <fsummary>Update agent config</fsummary> + <type> + <v>UserId = term()</v> + <v>TargetName = target_name()</v> + <v>Item = atom()</v> + <v>Val = term()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Update agent config.</p> + + <marker id="which_agents"></marker> + </desc> + </func> + + <func> + <name>which_agents() -> Agents</name> + <name>which_agents(UserId) -> Agents</name> + <fsummary>List the registered agents</fsummary> + <type> + <v>UserId = term()</v> + <v>Agents = [TargetName]</v> + <v>TargetName = target_name()</v> + </type> + <desc> + <p>Get a list of all registered agents or all agents registered + by a specific user.</p> + + <marker id="register_usm_user"></marker> + </desc> + </func> + + <func> + <name>register_usm_user(EngineID, UserName, Conf) -> ok | {error, Reason}</name> + <fsummary>Register this USM user</fsummary> + <type> + <v>EngineID = string()</v> + <v>UserName = string()</v> + <v>Conf = [usm_config()]</v> + <v>usm_config() = {Item, Val}</v> + <v>Item = sec_name | auth | auth_key | priv | priv_key</v> + <v>Val = term()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Explicitly instruct the manager to handle this USM user. + Note that there is an alternate way to do the same thing: + Add the usm user to the manager config files (see + <seealso marker="snmp_manager_config_files#usm_user">usm.conf</seealso>).</p> + <p>The type of <c>Val</c> depends on <c>Item</c>: </p> +<code type="none"><![CDATA[ +sec_name = string() +auth = usmNoAuthProtocol | usmHMACMD5AuthProtocol | usmHMACSHAAuthProtocoltimeout +auth_key = [integer()] (length 16 if auth = usmHMACMD5AuthProtocol, + length 20 if auth = usmHMACSHAAuthProtocol) +priv = usmNoPrivProtocol | usmDESPrivProtocol | usmAesCfb128Protocol +priv_key = [integer()] (length is 16 if priv = usmDESPrivProtocol | usmAesCfb128Protocol). +]]></code> + + <marker id="unregister_usm_user"></marker> + </desc> + </func> + + <func> + <name>unregister_usm_user(EngineID, UserName) -> ok | {error, Reason}</name> + <fsummary>Unregister this USM user</fsummary> + <type> + <v>EngineID = string()</v> + <v>UserName = string()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Unregister this USM user.</p> + + <marker id="which_usm_users1"></marker> + </desc> + </func> + + <func> + <name>usm_user_info(EngineID, UserName, Item) -> {ok, Val} | {error, Reason}</name> + <fsummary>Retrieve usm user config</fsummary> + <type> + <v>EngineID = string()</v> + <v>UsmName = string()</v> + <v>Item = sec_name | auth | auth_key | priv | priv_key</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Retrieve usm user config.</p> + + <marker id="update_usm_user_info"></marker> + </desc> + </func> + + <func> + <name>update_usm_user_info(EngineID, UserName, Item, Val) -> ok | {error, Reason}</name> + <fsummary>Update agent config</fsummary> + <type> + <v>EngineID = string()</v> + <v>UsmName = string()</v> + <v>Item = sec_name | auth | auth_key | priv | priv_key</v> + <v>Val = term()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Update usm user config.</p> + + <marker id="which_usm_users"></marker> + </desc> + </func> + + <func> + <name>which_usm_users() -> UsmUsers</name> + <fsummary>List all the registered usm users</fsummary> + <type> + <v>UsmUsers = [{EngineID,UserName}]</v> + <v>EngineID = string()</v> + <v>UsmName = string()</v> + </type> + <desc> + <p>Get a list of all registered usm users.</p> + + <marker id="which_usm_users2"></marker> + </desc> + </func> + + <func> + <name>which_usm_users(EngineID) -> UsmUsers</name> + <fsummary>List the registered usm users</fsummary> + <type> + <v>UsmUsers = [UserName]</v> + <v>UserName = string()</v> + </type> + <desc> + <p>Get a list of all registered usm users with engine-id + <c>EngineID</c>.</p> + + <marker id="sync_get"></marker> + </desc> + </func> + + <func> + <name>sync_get(UserId, TargetName, Oids) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <name>sync_get(UserId, TargetName, ContextName, Oids) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <name>sync_get(UserId, TargetName, Oids, Timeout) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <name>sync_get(UserId, TargetName, ContextName, Oids, Timeout) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <name>sync_get(UserId, TargetName, ContextName, Oids, Timeout, ExtraInfo) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <fsummary>Synchronous <c>get-request</c></fsummary> + <type> + <v>UserId = term()</v> + <v>TargetName = target_name()</v> + <v>ContextName = string()</v> + <v>Oids = [oid()]</v> + <v>Timeout = integer()</v> + <v>ExtraInfo = term()</v> + <v>SnmpReply = snmp_reply()</v> + <v>Remaining = integer()</v> + <v>Reason = {send_failed, ReqId, R} | {invalid_sec_info, SecInfo, SnmpInfo} | term()</v> + <v>R = term()</v> + <v>SecInfo = [sec_info()]</v> + <v>sec_info() = {sec_tag(), ExpectedValue, ReceivedValue}</v> + <v>sec_tag() = atom()</v> + <v>ExpectedValue = ReceivedValue = term()</v> + <v>SnmpInfo = term()</v> + </type> + <desc> + <p>Synchronous <c>get-request</c>. </p> + <p><c>Remaining</c> is the remaining time of the given or + default timeout time.</p> + <p>When <em>Reason</em> is <em>{send_failed, ...}</em> it means that + the net_if process failed to send the message. This could happen + because of any number of reasons, i.e. encoding error. <em>R</em> + is the actual reason in this case. </p> + <p><c>ExtraInfo</c> is an opaque data structure passed on to + the net-if process. The net-if process included in this + application makes no use of this info, so the only use for it + in such a configuration (when using the built in net-if) would + be tracing.</p> + <p>For <c>SnmpInfo</c>, see the user callback function + <seealso marker="snmpm_user#handle_report">handle_report</seealso>.</p> + + <marker id="async_get"></marker> + </desc> + </func> + + <func> + <name>async_get(UserId, TargetName, Oids) -> {ok, ReqId} | {error, Reason}</name> + <name>async_get(UserId, TargetName, ContextName, Oids) -> {ok, ReqId} | {error, Reason}</name> + <name>async_get(UserId, TargetName, Oids, Expire) -> {ok, ReqId} | {error, Reason}</name> + <name>async_get(UserId, TargetName, ContextName, Oids, Expire) -> {ok, ReqId} | {error, Reason}</name> + <name>async_get(UserId, TargetName, ContextName, Oids, Expire, ExtraInfo) -> {ok, ReqId} | {error, Reason}</name> + <fsummary>Asynchronous <c>get-request</c></fsummary> + <type> + <v>UserId = term()</v> + <v>TargetName = target_name()</v> + <v>ContextName = string()</v> + <v>Oids = [oid()]</v> + <v>Expire = integer()</v> + <v>ExtraInfo = term()</v> + <v>ReqId = term()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Asynchronous <c>get-request</c>.</p> + <p>The reply, if it arrives, will be delivered to the user + through a call to the snmpm_user callback function + <c>handle_pdu</c>.</p> + <p>The <c>Expire</c> time indicates for how long the request is + valid (after which the manager is free to delete it).</p> + <p><c>ExtraInfo</c> is an opaque data structure passed on to + the net-if process. The net-if process included in this + application makes no use of this info, so the only use for it + in such a configuration (when using the built in net-if) would + be tracing.</p> + + <marker id="sync_get_next"></marker> + </desc> + </func> + + <func> + <name>sync_get_next(UserId, TargetName, Oids) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <name>sync_get_next(UserId, TargetName, ContextName, Oids) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <name>sync_get_next(UserId, TargetName, Oids, Timeout) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <name>sync_get_next(UserId, TargetName, ContextName, Oids, Timeout) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <name>sync_get_next(UserId, TargetName, ContextName, Oids, Timeout, ExtraInfo) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <fsummary>Synchronous <c>get-next-request</c></fsummary> + <type> + <v>UserId = term()</v> + <v>TargetName = target_name()</v> + <v>ContextName = string()</v> + <v>Oids = [oid()]</v> + <v>Timeout = integer()</v> + <v>ExtraInfo = term()</v> + <v>SnmpReply = snmp_reply()</v> + <v>Remaining = integer()</v> + <v>Reason = {send_failed, ReqId, R} | {invalid_sec_info, SecInfo, SnmpInfo} | term()</v> + <v>R = term()</v> + </type> + <desc> + <p>Synchronous <c>get-next-request</c>. </p> + <p><c>Remaining</c> time of the given or default timeout time.</p> + <p>When <em>Reason</em> is <em>{send_failed, ...}</em> it means that + the net_if process failed to send the message. This could happen + because of any number of reasons, i.e. encoding error. <em>R</em> + is the actual reason in this case. </p> + <p><c>ExtraInfo</c> is an opaque data structure passed on to + the net-if process. The net-if process included in this + application makes no use of this info, so the only use for it + in such a configuration (when using the built in net-if) would + be tracing.</p> + + <marker id="async_get_next"></marker> + </desc> + </func> + + <func> + <name>async_get_next(UserId, TargetName, Oids) -> {ok, ReqId} | {error, Reason}</name> + <name>async_get_next(UserId, TargetName, ContextName, Oids) -> {ok, ReqId} | {error, Reason}</name> + <name>async_get_next(UserId, TargetName, Oids, Expire) -> {ok, ReqId} | {error, Reason}</name> + <name>async_get_next(UserId, TargetName, ContextName, Oids, Expire) -> {ok, ReqId} | {error, Reason}</name> + <name>async_get_next(UserId, TargetName, ContextName, Oids, Expire, ExtraInfo) -> {ok, ReqId} | {error, Reason}</name> + <fsummary>Asynchronous <c>get-next-request</c></fsummary> + <type> + <v>UserId = term()</v> + <v>TargetName = target_name()</v> + <v>ContextName = string()</v> + <v>Oids = [oid()]</v> + <v>Expire = integer()</v> + <v>ExtraInfo = term()</v> + <v>ReqId = integer()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Asynchronous <c>get-next-request</c>. </p> + <p>The reply will be delivered to the user through a call + to the snmpm_user callback function <c>handle_pdu</c>.</p> + <p>The <c>Expire</c> time indicates for how long the request is + valid (after which the manager is free to delete it).</p> + + <marker id="sync_set"></marker> + </desc> + </func> + + <func> + <name>sync_set(UserId, TargetName, VarsAndVals) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <name>sync_set(UserId, TargetName, ContextName, VarsAndVals) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <name>sync_set(UserId, TargetName, VarsAndVals, Timeout) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <name>sync_set(UserId, TargetName, ContextName, VarsAndVals, Timeout) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <name>sync_set(UserId, TargetName, ContextName, VarsAndVals, Timeout, ExtraInfo) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <fsummary>Synchronous <c>set-request</c></fsummary> + <type> + <v>UserId = term()</v> + <v>TargetName = target_name()</v> + <v>ContextName = string()</v> + <v>VarsAndVals = vars_and_vals()</v> + <v>Timeout = integer()</v> + <v>ExtraInfo = term()</v> + <v>SnmpReply = snmp_reply()</v> + <v>Remaining = integer()</v> + <v>Reason = {send_failed, ReqId, ActualReason} | {invalid_sec_info, SecInfo, SnmpInfo} | term()</v> + <v>ActualReason = term()</v> + </type> + <desc> + <p>Synchronous <c>set-request</c>. </p> + <p><c>Remaining</c> time of the given or default timeout time.</p> + <p>When <em>Reason</em> is <em>{send_failed, ...}</em> it means that + the net_if process failed to send the message. This could happen + because of any number of reasons, i.e. encoding error. <em>R</em> + is the actual reason in this case. </p> + <p>When <em>var_and_val()</em> is <em>{oid(), value()}</em>, the + manager makes an educated guess based on the loaded mibs. </p> + <p><c>ExtraInfo</c> is an opaque data structure passed on to + the net-if process. The net-if process included in this + application makes no use of this info, so the only use for it + in such a configuration (when using the built in net-if) would + be tracing.</p> + + <marker id="async_set"></marker> + </desc> + </func> + + <func> + <name>async_set(UserId, TargetName, VarsAndVals) -> {ok, ReqId} | {error, Reason}</name> + <name>async_set(UserId, TargetName, ContextName, VarsAndVals) -> {ok, ReqId} | {error, Reason}</name> + <name>async_set(UserId, TargetName, VarsAndVals, Expire) -> {ok, ReqId} | {error, Reason}</name> + <name>async_set(UserId, TargetName, ContextName, VarsAndVals, Expire) -> {ok, ReqId} | {error, Reason}</name> + <name>async_set(UserId, TargetName, ContextName, VarsAndVals, Expire, ExtraInfo) -> {ok, ReqId} | {error, Reason}</name> + <fsummary>Asynchronous <c>set-request</c></fsummary> + <type> + <v>UserId = term()</v> + <v>TargetName = target_name()</v> + <v>VarsAndVals = vars_and_vals()</v> + <v>Expire = integer()</v> + <v>ExtraInfo = term()</v> + <v>ReqId = term()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Asynchronous <c>set-request</c>. </p> + <p>The reply will be delivered to the user through a call + to the snmpm_user callback function <c>handle_pdu</c>.</p> + <p>The <c>Expire</c> time indicates for how long the request is + valid (after which the manager is free to delete it).</p> + <p>When <em>var_and_val()</em> is <em>{oid(), value()}</em>, the + manager makes an educated guess based on the loaded mibs. </p> + <p><c>ExtraInfo</c> is an opaque data structure passed on to + the net-if process. The net-if process included in this + application makes no use of this info, so the only use for it + in such a configuration (when using the built in net-if) would + be tracing.</p> + + <marker id="sync_get_bulk"></marker> + </desc> + </func> + + <func> + <name>sync_get_bulk(UserId, TragetName, NonRep, MaxRep, Oids) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <name>sync_get_bulk(UserId, TragetName, NonRep, MaxRep, ContextName, Oids) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <name>sync_get_bulk(UserId, TragetName, NonRep, MaxRep, Oids, Timeout) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <name>sync_get_bulk(UserId, TragetName, NonRep, MaxRep, ContextName, Oids, Timeout) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <name>sync_get_bulk(UserId, TragetName, NonRep, MaxRep, ContextName, Oids, Timeout, ExtraInfo) -> {ok, SnmpReply, Remaining} | {error, Reason}</name> + <fsummary>Synchronous <c>get-bulk-request</c></fsummary> + <type> + <v>UserId = term()</v> + <v>TargetName = target_name()</v> + <v>NonRep = integer()</v> + <v>MaxRep = integer()</v> + <v>ContextName = string()</v> + <v>Oids = [oid()]</v> + <v>Timeout = integer()</v> + <v>ExtraInfo = term()</v> + <v>SnmpReply = snmp_reply()</v> + <v>Remaining = integer()</v> + <v>Reason = {send_failed, ReqId, R} | {invalid_sec_info, SecInfo, SnmpInfo} | term()</v> + </type> + <desc> + <p>Synchronous <c>get-bulk-request</c> (See RFC1905).</p> + <p><c>Remaining</c> time of the given or default timeout time.</p> + <p>When <em>Reason</em> is <em>{send_failed, ...}</em> it means that + the net_if process failed to send the message. This could happen + because of any number of reasons, i.e. encoding error. <em>R</em> + is the actual reason in this case. </p> + <p><c>ExtraInfo</c> is an opaque data structure passed on to + the net-if process. The net-if process included in this + application makes no use of this info, so the only use for it + in such a configuration (when using the built in net-if) would + be tracing.</p> + + <marker id="async_get_bulk"></marker> + </desc> + </func> + + <func> + <name>async_get_bulk(UserId, TargetName, NonRep, MaxRep, Oids) -> {ok, ReqId} | {error, Reason}</name> + <name>async_get_bulk(UserId, TargetName, NonRep, MaxRep, ContextName, Oids) -> {ok, ReqId} | {error, Reason}</name> + <name>async_get_bulk(UserId, TargetName, NonRep, MaxRep, Oids, Expire) -> {ok, ReqId} | {error, Reason}</name> + <name>async_get_bulk(UserId, TargetName, NonRep, MaxRep, ContextName, Oids, Expire) -> {ok, ReqId} | {error, Reason}</name> + <name>async_get_bulk(UserId, TargetName, NonRep, MaxRep, ContextName, Oids, Expire, ExtraInfo) -> {ok, ReqId} | {error, Reason}</name> + <fsummary>Asynchronous <c>get-bulk-request</c></fsummary> + <type> + <v>UserId = term()</v> + <v>TargetName = target_name()</v> + <v>NonRep = integer()</v> + <v>MaxRep = integer()</v> + <v>ContextName = string()</v> + <v>Oids = [oid()]</v> + <v>Expire = integer()</v> + <v>ExtraInfo = term()</v> + <v>ReqId = integer()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Asynchronous <c>get-bulk-request</c> (See RFC1905).</p> + <p>The reply will be delivered to the user through a call + to the snmpm_user callback function <c>handle_pdu</c>.</p> + <p>The <c>Expire</c> time indicates for how long the request is + valid (after which the manager is free to delete it).</p> + + <marker id="cancel_async_request"></marker> + </desc> + </func> + + <func> + <name>cancel_async_request(UserId, ReqId) -> ok | {error, Reason}</name> + <fsummary>Cancel a asynchronous request</fsummary> + <type> + <v>UserId = term()</v> + <v>ReqId = term()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Cancel a previous asynchronous request.</p> + + <marker id="log_to_txt"></marker> + </desc> + </func> + + <func> + <name>log_to_txt(LogDir, Mibs)</name> + <name>log_to_txt(LogDir, Mibs, OutFile) -> ok | {error, Reason}</name> + <name>log_to_txt(LogDir, Mibs, OutFile, LogName) -> ok | {error, Reason}</name> + <name>log_to_txt(LogDir, Mibs, OutFile, LogName, LogFile) -> ok | {error, Reason}</name> + <name>log_to_txt(LogDir, Mibs, OutFile, LogName, LogFile, Start) -> ok | {error, Reason}</name> + <name>log_to_txt(LogDir, Mibs, OutFile, LogName, LogFile, Start, Stop) -> ok | {error, Reason}</name> + <fsummary>Convert an Audit Trail Log to text format</fsummary> + <type> + <v>LogDir = string()</v> + <v>Mibs = [MibName]</v> + <v>MibName = string()</v> + <v>OutFile = string()</v> + <v>LogName = string()</v> + <v>LogFile = string()</v> + <v>Start = Stop = null | datetime() | {local_time,datetime()} | {universal_time,datetime()} </v> + <v>Reason = disk_log_open_error() | file_open_error() | term()</v> + <v>disk_log_open_error() = {LogName, term()}</v> + <v>file_open_error() = {OutFile, term()}</v> + </type> + <desc> + <p>Converts an Audit Trail Log to a readable text file. + <c>OutFile</c> defaults to "./snmpm_log.txt". + <c>LogName</c> defaults to "snmpm_log". + <c>LogFile</c> defaults to "snmpm.log". + See <seealso marker="snmp#log_to_txt">snmp:log_to_txt</seealso> + for more info.</p> + + <marker id="change_log_size"></marker> + </desc> + </func> + + <func> + <name>change_log_size(NewSize) -> ok | {error, Reason}</name> + <fsummary>Change the size of the Audit Trail Log</fsummary> + <type> + <v>NewSize = {MaxBytes, MaxFiles}</v> + <v>MaxBytes = integer()</v> + <v>MaxFiles = integer()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Changes the log size of the Audit Trail Log. The application must + be configured to use the audit trail log function. Please refer to + disk_log(3) in Kernel Reference Manual for a description of how to + change the log size. + </p> + <p>The change is permanent, as long as the log is not deleted. + That means, the log size is remembered across reboots.</p> + + <marker id="set_log_type"></marker> + </desc> + </func> + + <func> + <name>set_log_type(NewType) -> {ok, OldType} | {error, Reason}</name> + <fsummary>Change the Audit Trail Log type</fsummary> + <type> + <v>NewType = OldType = atl_type()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Changes the run-time Audit Trail log type. </p> + <p>Note that this has no effect on the application configuration as + defined by configuration files, so a node restart will revert the + config to whatever is in those files. </p> + <p>This function is primarily useful in testing/debugging + scenarios. </p> + + <marker id="load_mib"></marker> + </desc> + </func> + + <func> + <name>load_mib(Mib) -> ok | {error, Reason}</name> + <fsummary>Load a MIB into the manager</fsummary> + <type> + <v>Mib = MibName</v> + <v>MibName = string()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Load a <c>Mib</c> into the manager. The <c>MibName</c> is the + name of the Mib, including the path to where the compiled mib is + found. For example,</p> + <code type="none"> + Dir = code:priv_dir(my_app) ++ "/mibs/", + snmpm:load_mib(Dir ++ "MY-MIB"). + </code> + + <marker id="unload_mib"></marker> + </desc> + </func> + + <func> + <name>unload_mib(Mib) -> ok | {error, Reason}</name> + <fsummary>Unload a MIB from the manager</fsummary> + <type> + <v>Mib = MibName</v> + <v>MibName = string()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Unload a <c>Mib</c> from the manager. The <c>MibName</c> is the + name of the Mib, including the path to where the compiled mib is + found. For example,</p> + <code type="none"> + Dir = code:priv_dir(my_app) ++ "/mibs/", + snmpm:unload_mib(Dir ++ "MY-MIB"). + </code> + + <marker id="which_mibs"></marker> + </desc> + </func> + + <func> + <name>which_mibs() -> Mibs</name> + <fsummary>Which mibs are loaded into the manager</fsummary> + <type> + <v>Mibs = [{MibName, MibFile}]</v> + <v>MibName = atom()</v> + <v>MibFile = string()</v> + </type> + <desc> + <p>Get a list of all the mib's loaded into the manager.</p> + + <marker id="name_to_oid"></marker> + </desc> + </func> + + <func> + <name>name_to_oid(Name) -> {ok, Oids} | {error, Reason}</name> + <fsummary>Get all the possible oid's for an alias-name</fsummary> + <type> + <v>Name = atom()</v> + <v>Oids = [oid()]</v> + </type> + <desc> + <p>Transform a alias-name to it's oid.</p> + <p>Note that an alias-name is only unique within the mib, so + when loading several mib's into a manager, there might be + several instances of the same aliasname.</p> + + <marker id="oid_to_name"></marker> + </desc> + </func> + + <func> + <name>oid_to_name(Oid) -> {ok, Name} | {error, Reason}</name> + <fsummary>Get the alias-name of the oid </fsummary> + <type> + <v>Oid = oid()</v> + <v>Name = atom()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Transform a oid to it's aliasname.</p> + + <marker id="oid_to_type"></marker> + </desc> + </func> + + <func> + <name>oid_to_type(Oid) -> {ok, Type} | {error, Reason}</name> + <fsummary>Get the type of the the oid</fsummary> + <type> + <v>Oid = oid()</v> + <v>Type = atom()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Retreive the type (asn1 bertype) of an oid.</p> + + <marker id="backup"></marker> + </desc> + </func> + + <func> + <name>backup(BackupDir) -> ok | {error, Reason}</name> + <fsummary>Backup manager data</fsummary> + <type> + <v>BackupDir = string()</v> + </type> + <desc> + <p>Backup persistent data handled by the manager. </p> + <p>BackupDir cannot be identical to DbDir. </p> + + <marker id="info"></marker> + </desc> + </func> + + <func> + <name>info() -> [{Key, Value}]</name> + <fsummary>Return information about the manager</fsummary> + <type> + <v>Key = atom()</v> + <v>Value = term()</v> + </type> + <desc> + <p>Returns a list (a dictionary) containing information about + the manager. Information includes statistics counters, + miscellaneous info about each process (e.g. memory allocation), + and so on.</p> + + <marker id="verbosity"></marker> + </desc> + </func> + + <func> + <name>verbosity(Ref, Verbosity) -> void()</name> + <fsummary>Assign a new verbosity for the process</fsummary> + <type> + <v>Ref = server | config | net_if | note_store | all</v> + <v>Verbosity = verbosity()</v> + <v>verbosity() = silence | info | log | debug | trace </v> + </type> + <desc> + <p>Sets verbosity for the designated process. For the lowest + verbosity <c>silence</c>, nothing is printed. The higher the + verbosity, the more is printed.</p> + + <marker id="format_reason"></marker> + </desc> + </func> + + <func> + <name>format_reason(Reason) -> string()</name> + <name>format_reason(Prefix, Reason) -> string()</name> + <fsummary>Assign a new verbosity for the process</fsummary> + <type> + <v>Reason = term()</v> + <v>Prefix = integer() | string()</v> + </type> + <desc> + <p>This utility function is used to create a formatted + (pretty printable) string of the error reason received + from either: + </p> + <list type="bulleted"> + <item> + <p>The <c>Reason</c> returned value if any of the + sync/async get/get-next/set/get-bulk + functions returns <c>{error, Reason}</c></p> + </item> + <item> + <p>The <c>Reason</c> parameter in the + <seealso marker="snmpm_user#handle_error">handle_error</seealso> user callback function.</p> + </item> + </list> + <p><c>Prefix</c> should either be an indention string + (e.g. a list of spaces) or a positive integer (which will be used + to create the indention string of that length).</p> + </desc> + </func> + </funcs> + + +</erlref> + diff --git a/lib/snmp/doc/src/snmpm_conf.xml b/lib/snmp/doc/src/snmpm_conf.xml new file mode 100644 index 0000000000..177e29faa3 --- /dev/null +++ b/lib/snmp/doc/src/snmpm_conf.xml @@ -0,0 +1,364 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2006</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpm_conf</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpm_conf.xml</file> + </header> + <module>snmpm_conf</module> + <modulesummary>Utility functions for handling the manager config files.</modulesummary> + <description> + <p>The module <c>snmpm_conf</c> contains various utility functions to + used for manipulating (write/append/read) the config files of the + SNMP manager. </p> + <marker id="manager_entry"></marker> + </description> + <funcs> + <func> + <name>manager_entry(Tag, Val) -> manager_entry()</name> + <fsummary>Create an manager entry</fsummary> + <type> + <v>Tag = address | port | engine_id | max_message_size</v> + <v>Val = term()</v> + <v>manager_entry() = term()</v> + </type> + <desc> + <p>Create an entry for the manager config file, + <c>manager.conf</c>. </p> + <p>The type of <c>Val</c> depends on the value of <c>Tag</c>, + see + <seealso marker="snmp_manager_config_files#manager_information">Manager Information</seealso> + for more info. </p> + <marker id="write_manager_config"></marker> + </desc> + </func> + <func> + <name>write_manager_config(Dir, Conf) -> ok</name> + <name>write_manager_config(Dir, Hdr, Conf) -> ok</name> + <fsummary>Write the manager config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Hdr = string()</v> + <v>Conf = [manager_entry()]</v> + </type> + <desc> + <p>Write the manager config to the manager config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p><c>Hdr</c> is an optional file header (note that this text is + written to the file as is). </p> + <p>See + <seealso marker="snmp_manager_config_files#manager_information">Manager Information</seealso> + for more info. </p> + <marker id="append_manager_config"></marker> + </desc> + </func> + <func> + <name>append_manager_config(Dir, Conf) -> ok</name> + <fsummary>Append the manager config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [manager_entry()]</v> + </type> + <desc> + <p>Append the config to the current manager config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_manager_config_files#manager_information">Manager Information</seealso> + for more info. </p> + <marker id="read_manager_config"></marker> + </desc> + </func> + <func> + <name>read_manager_config(Dir) -> Conf</name> + <fsummary>Read the manager config from the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [manager_entry()]</v> + </type> + <desc> + <p>Read the current manager config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_manager_config_files#manager_information">Manager Information</seealso> + for more info. </p> + <marker id="users_entry"></marker> + </desc> + </func> + <func> + <name>users_entry(UserId) -> users_entry()</name> + <name>users_entry(UserId, UserMod) -> users_entry()</name> + <name>users_entry(UserId, UserMod, UserData) -> users_entry()</name> + <fsummary>Create an users entry</fsummary> + <type> + <v>UserId = term()</v> + <v>UserMod = atom()</v> + <v>UserData = term()</v> + <v>standard_entry() = term()</v> + </type> + <desc> + <p>Create an entry for the manager users config file, + <c>users.conf</c>. </p> + <p><c>users_entry(UserId)</c> translates to the following call: + <c>users_entry(UserId, snmpm_user_default)</c>. </p> + <p><c>users_entry(UserId, UserMod)</c> translates to the following + call: <c>users_entry(UserId, UserMod, undefined)</c>. </p> + <p>See + <seealso marker="snmp_manager_config_files#users">Users</seealso> + for more info. </p> + <marker id="write_users_config"></marker> + </desc> + </func> + <func> + <name>write_users_config(Dir, Conf) -> ok</name> + <name>write_users_config(Dir, Hdr, Conf) -> ok</name> + <fsummary>Write the manager users config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Hdr = string()</v> + <v>Conf = [users_entry()]</v> + </type> + <desc> + <p>Write the manager users config to the manager users + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p><c>Hdr</c> is an optional file header (note that this text is + written to the file as is). </p> + <p>See + <seealso marker="snmp_manager_config_files#users">Users</seealso> + for more info. </p> + <marker id="append_users_config"></marker> + </desc> + </func> + <func> + <name>append_users_config(Dir, Conf) -> ok</name> + <fsummary>Append the manager users config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [users_entry()]</v> + </type> + <desc> + <p>Append the users config to the current manager users + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_manager_config_files#users">Users</seealso> + for more info. </p> + <marker id="read_users_config"></marker> + </desc> + </func> + <func> + <name>read_users_config(Dir) -> Conf</name> + <fsummary>Read the manager users config from the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [users_entry()]</v> + </type> + <desc> + <p>Read the current manager users config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_manager_config_files#users">Users</seealso> + for more info. </p> + <marker id="agents_entry"></marker> + </desc> + </func> + <func> + <name>agents_entry(UserId, TargetName, Comm, Ip, Port, EngineID, Timeout, MaxMessageSize, Version, SecModel, SecName, SecLevel) -> agents_entry()</name> + <fsummary>Create an agents entry</fsummary> + <type> + <v>UserId = term()</v> + <v>TargetName = string()</v> + <v>Comm = string()</v> + <v>Ip = string()</v> + <v>Port = integer()</v> + <v>EngineID = string()</v> + <v>Timeout = integer()</v> + <v>MaxMessageSize = integer()</v> + <v>Version = v1 | v2 | v3</v> + <v>SecModel = v1 | v2c | usm</v> + <v>SecName = string()</v> + <v>SecLevel = noAuthNoPriv | authNoPriv | authPriv</v> + <v>agents_entry() = term()</v> + </type> + <desc> + <p>Create an entry for the manager agents config file, + <c>agents.conf</c>. </p> + <p>See + <seealso marker="snmp_manager_config_files#agents">Agents</seealso> + for more info. </p> + <marker id="write_agents_config"></marker> + </desc> + </func> + <func> + <name>write_agents_config(Dir, Conf) -> ok</name> + <name>write_agents_config(Dir, Hdr, Conf) -> ok</name> + <fsummary>Write the manager agents to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Hdr = string()</v> + <v>Conf = [_entry()]</v> + </type> + <desc> + <p>Write the manager agents config to the manager agents + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p><c>Hdr</c> is an optional file header (note that this text is + written to the file as is). </p> + <p>See + <seealso marker="snmp_manager_config_files#agents">Agents</seealso> + for more info. </p> + <marker id="append_agents_config"></marker> + </desc> + </func> + <func> + <name>append_agents_config(Dir, Conf) -> ok</name> + <fsummary>Append the manager agents to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [agents_entry()]</v> + </type> + <desc> + <p>Append the agents config to the current manager agents + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_manager_config_files#agents">Agents</seealso> + for more info. </p> + <marker id="read_agents_config"></marker> + </desc> + </func> + <func> + <name>read_agents_config(Dir) -> Conf</name> + <fsummary>Read the manager agents config from the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [agents_entry()]</v> + </type> + <desc> + <p>Read the current manager agents config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_manager_config_files#agents">Agents</seealso> + for more info. </p> + <marker id="usm_entry"></marker> + </desc> + </func> + <func> + <name>usm_entry(EngineID, UserName, AuthP, AuthKey, PrivP, PrivKey) -> usm_entry()</name> + <name>usm_entry(EngineID, UserName, SecName, AuthP, AuthKey, PrivP, PrivKey) -> usm_entry()</name> + <fsummary>Create an usm entry</fsummary> + <type> + <v>EngineID = string()</v> + <v>UserName = string()</v> + <v>SecName = string()</v> + <v>AuthP = usmNoAuthProtocol | usmHMACMD5AuthProtocol | usmHMACSHAAuthProtocol</v> + <v>AuthKey = [integer()]</v> + <v>PrivP = usmNoPrivProtocol | usmDESPrivProtocol | usmAesCfb128Protocol</v> + <v>PrivKey = [integer()]</v> + <v>usm_entry() = term()</v> + </type> + <desc> + <p>Create an entry for the agent community config file, + <c>community.conf</c>. </p> + <p>See + <seealso marker="snmp_manager_config_files#usm">Security data for USM</seealso> + for more info. </p> + <marker id="write_usm_config"></marker> + </desc> + </func> + <func> + <name>write_usm_config(Dir, Conf) -> ok</name> + <name>write_usm_config(Dir, Hdr, Conf) -> ok</name> + <fsummary>Write the manager usm config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Hdr = string()</v> + <v>Conf = [usm_entry()]</v> + </type> + <desc> + <p>Write the manager usm config to the manager usm + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p><c>Hdr</c> is an optional file header (note that this text is + written to the file as is). </p> + <p>See + <seealso marker="snmp_manager_config_files#usm">Security data for USM</seealso> + for more info. </p> + <marker id="append_usm_config"></marker> + </desc> + </func> + <func> + <name>append_usm_config(Dir, Conf) -> ok</name> + <fsummary>Append the manager usm config to the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [usm_entry()]</v> + </type> + <desc> + <p>Append the usm config to the current manager usm + config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_manager_config_files#usm">Security data for USM</seealso> + for more info. </p> + <marker id="read_usm_config"></marker> + </desc> + </func> + <func> + <name>read_usm_config(Dir) -> Conf</name> + <fsummary>Read the manager usm config from the config file</fsummary> + <type> + <v>Dir = string()</v> + <v>Conf = [usm_entry()]</v> + </type> + <desc> + <p>Read the current manager usm config file. </p> + <p><c>Dir</c> is the path to the directory where to store the + config file. </p> + <p>See + <seealso marker="snmp_manager_config_files#usm">Security data for USM</seealso> + for more info. </p> + <marker id="end"></marker> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmpm_mpd.xml b/lib/snmp/doc/src/snmpm_mpd.xml new file mode 100644 index 0000000000..030c79e0e6 --- /dev/null +++ b/lib/snmp/doc/src/snmpm_mpd.xml @@ -0,0 +1,139 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2004</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpm_mpd</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpm_mpd.xml</file> + </header> + <module>snmpm_mpd</module> + <modulesummary>Message Processing and Dispatch module for the SNMP manager</modulesummary> + <description> + <p>The module <c>snmpm_mpd</c> implements the version independent + Message Processing and Dispatch functionality in SNMP for the manager. + It is supposed to be used from a Network Interface process + (<seealso marker="snmp_manager_netif">Definition of Manager Net if</seealso>). + </p> + </description> + <funcs> + <func> + <name>init_mpd(Vsns) -> mpd_state()</name> + <fsummary>Initialize the MPD module</fsummary> + <type> + <v>Vsns = [Vsn]</v> + <v>Vsn = v1 | v2 | v3</v> + </type> + <desc> + <p>This function can be called from the net_if process at start-up. + The options list defines which versions to use. + </p> + <p>It also initializes some SNMP counters. + <marker id="process_msg"></marker> +</p> + </desc> + </func> + <func> + <name>process_msg(Msg, TDomain, Addr, Port, State, NoteStore, Logger) -> {ok, Vsn, Pdu, PduMS, MsgData} | {discarded, Reason}</name> + <fsummary>Process a message received from the network</fsummary> + <type> + <v>Msg = binary()</v> + <v>TDomain = snmpUDPDomain</v> + <v>Addr = {integer(), integer(), integer(), integer()}</v> + <v>Port = integer()</v> + <v>State = mpd_state()</v> + <v>NoteStore = pid()</v> + <v>Logger = function()</v> + <v>Vsn = 'version-1' | 'version-2' | 'version-3'</v> + <v>Pdu = #pdu</v> + <v>PduMs = integer()</v> + <v>MsgData = term()</v> + </type> + <desc> + <p>Processes an incoming message. Performs authentication and + decryption as necessary. The return values should be passed the + manager server. + </p> + <p><c>NoteStore</c> is the <c>pid()</c> of the note-store process.</p> + <p><c>Logger</c> is the function used for audit trail logging. + </p> + <p>In the case when the pdu type is <c>report</c>, <c>MsgData</c> is + either <c>ok</c> or <c>{error, ReqId, Reason}</c>. + </p> + </desc> + </func> + <func> + <name>generate_msg(Vsn, NoteStore, Pdu, MsgData, Logger) -> {ok, Packet} | {discarded, Reason}</name> + <fsummary>Generate a request message to be sent to the network</fsummary> + <type> + <v>Vsn = 'version-1' | 'version-2' | 'version-3'</v> + <v>NoteStore = pid()</v> + <v>Pdu = #pdu</v> + <v>MsgData = term()</v> + <v>Logger = function()</v> + <v>Packet = binary()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Generates a possibly encrypted packet to be sent to the network. + </p> + <p><c>NoteStore</c> is the <c>pid()</c> of the note-store process. + </p> + <p><c>MsgData</c> is the message specific data used in the SNMP + message. In SNMPv1 and SNMPv2c, this message data is the community + string. In SNMPv3, it is the context information. + </p> + <p><c>Logger</c> is the function used for audit trail logging. + </p> + </desc> + </func> + <func> + <name>generate_response_msg(Vsn, Pdu, MsgData, Logger) -> {ok, Packet} | {discarded, Reason}</name> + <fsummary>Generate a response packet to be sent to the network</fsummary> + <type> + <v>Vsn = 'version-1' | 'version-2' | 'version-3'</v> + <v>Pdu = #pdu</v> + <v>MsgData = term()</v> + <v>Logger = function()</v> + <v>Packet = binary()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>Generates a possibly encrypted response packet to be sent to the + network. + </p> + <p><c>MsgData</c> is the message specific data used in the SNMP + message. This value is received from the + <seealso marker="snmpm_mpd#process_msg">process_msg</seealso> + function. + </p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmpm_network_interface.xml b/lib/snmp/doc/src/snmpm_network_interface.xml new file mode 100644 index 0000000000..33eb736b8f --- /dev/null +++ b/lib/snmp/doc/src/snmpm_network_interface.xml @@ -0,0 +1,252 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2004</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpm_network_interface</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpm_network_interface.xml</file> + </header> + <module>snmpm_network_interface</module> + <modulesummary>Behaviour module for the SNMP manager network interface.</modulesummary> + <description> + <p>This module defines the behaviour of the manager network + interface. A <c>snmpm_network_interface</c> compliant module + must export the following functions: </p> + <list type="bulleted"> + <item> + <p><seealso marker="#start_link">start_link/2</seealso></p> + </item> + <item> + <p><seealso marker="#stop">stop/1</seealso></p> + </item> + <item> + <p><seealso marker="#send_pdu">send_pdu/7</seealso></p> + </item> + <item> + <p><seealso marker="#inform_response">inform_response/4</seealso></p> + </item> + <item> + <p><seealso marker="#note_store">note_store/2</seealso></p> + </item> + <item> + <p><seealso marker="#info">info/1</seealso></p> + </item> + <item> + <p><seealso marker="#get_log_type">get_log_type/1</seealso></p> + </item> + <item> + <p><seealso marker="#set_log_type">set_log_type/2</seealso></p> + </item> + <item> + <p><seealso marker="#verbosity">verbosity/2</seealso></p> + </item> + </list> + <p>The semantics of them and their exact signatures are explained + below. </p> + + <marker id="start_link"></marker> + </description> + + <funcs> + <func> + <name>start_link(Server, NoteStore) -> {ok, Pid} | {error, Reason}</name> + <fsummary>Start-link the network interface process</fsummary> + <type> + <v>Server = pid()</v> + <v>NoteStore = pid()</v> + </type> + <desc> + <p>Start-link the network interface process.</p> + <p><c>Server</c> is the pid of the managing process.</p> + <p><c>NoteStore</c> is the pid of the note-store process.</p> + + <marker id="stop"></marker> + </desc> + </func> + + <func> + <name>stop(Pid) -> void()</name> + <fsummary>Stop the network interface process</fsummary> + <type> + <v>Pid = pid()</v> + </type> + <desc> + <p>Stop the network interface process.</p> + + <marker id="send_pdu"></marker> + </desc> + </func> + + <func> + <name>send_pdu(Pid, Pdu, Vsn, MsgData, Addr, Port, ExtraInfo) -> void()</name> + <fsummary>Request the network interface process to send this pdu</fsummary> + <type> + <v>Pid = pid()</v> + <v>Pdu = pdu()</v> + <v>Vsn = 'version-1' | 'version-2' | 'version-3'</v> + <v>MsgData = term()</v> + <v>Addr = address()</v> + <v>Port = integer()</v> + <v>ExtraInfo = term()</v> + </type> + <desc> + <p>Request the network interface process (<c>Pid</c>) to send + this pdu (<c>Pdu</c>).</p> + <p><c>ExtraInfo</c> is some opaque data that is passed to the + net-if process. It originates from the <c>ExtraInfo</c> + parameter in the calls to the + <seealso marker="snmpm#sync_get">synchronous get-request</seealso>, + <seealso marker="snmpm#async_get">asynchronous get-request</seealso>, + <seealso marker="snmpm#sync_get_next">synchronous get-next-request</seealso>, + <seealso marker="snmpm#async_get_next">asynchronous get-next-request</seealso>, + <seealso marker="snmpm#sync_set">synchronous set-request</seealso> + and + <seealso marker="snmpm#async_set">asynchronous set-request</seealso> + functions. + Whether the net-if process chooses + to use this is implementation dependent. The net-if process + included in this application ignores it. </p> + + <marker id="inform_response"></marker> + </desc> + </func> + + <func> + <name>inform_response(Pid, Ref, Addr, Port) -> void()</name> + <fsummary>Send the inform-request ack</fsummary> + <type> + <v>Pid = pid()</v> + <v>Ref = term()</v> + <v>Addr = address()</v> + <v>Port = integer()</v> + </type> + <desc> + <p>Instruct the network interface process to send the response + (acknowledgment) to an inform-request.</p> + <p><c>Ref</c> is something that can be used to identify the + inform-request, e.g. request-id of the inform-request.</p> + <p><c>Addr</c> and <c>Port</c> identifies the agent, from + which the inform-request originated.</p> + + <marker id="note_store"></marker> + </desc> + </func> + + <func> + <name>note_store(Pid, NoteStore) -> void()</name> + <fsummary>Change the verbosity of the network interface process</fsummary> + <type> + <v>Pid = pid()</v> + <v>NoteStore = pid()</v> + </type> + <desc> + <p>Change the pid of the note-store process. + This is used when the server re-starts the note_store + (e.g. after a crach).</p> + + <marker id="info"></marker> + </desc> + </func> + + <func> + <name>info(Pid) -> [{Key, Value}]</name> + <fsummary>Return information about the running network interface process</fsummary> + <type> + <v>Pid = pid()</v> + </type> + <desc> + <p>The info returned is basically up to the implementer to decide. + The implementation provided by this application provides info about + memory allocation and various socket information.</p> + <p>The info returned by this function is returned together with other + info collected by the manager when the + <seealso marker="snmpm#info">info</seealso> function is called + (tagged with the key <c>net_if</c>).</p> + + <marker id="verbosity"></marker> + </desc> + </func> + + <func> + <name>verbosity(Pid, Verbosity) -> void()</name> + <fsummary>Change the verbosity of the network interface process</fsummary> + <type> + <v>Pid = pid()</v> + <v>Verbosity = verbosity()</v> + </type> + <desc> + <p>Change the verbosity of the network interface process.</p> + + <marker id="get_log_type"></marker> + </desc> + </func> + + <func> + <name>get_log_type(Pid) -> {ok, LogType} | {error, Reason}</name> + <fsummary>Get the Audit Trail Log type</fsummary> + <type> + <v>Pid = pid()</v> + <v>LogType = atl_type()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>The Audit Trail Log is managed by the network interface process. + So, it is this process that has to return the actual log-type. </p> +<!-- + <p>See + <seealso marker="snmpm#get_log_type">get_log_type</seealso> + for more info. </p> +--> + + <marker id="set_log_type"></marker> + </desc> + </func> + + <func> + <name>set_log_type(Pid, NewType) -> {ok, OldType} | {error, Reason}</name> + <fsummary>Change the Audit Trail Log type</fsummary> + <type> + <v>Pid = pid()</v> + <v>NewType = OldType = atl_type()</v> + <v>Reason = term()</v> + </type> + <desc> + <p>The Audit Trail Log is managed by the network interface process. + So, it is this process that has to do the actual changing of the + type. </p> + <p>See + <seealso marker="snmpm#set_log_type">set_log_type</seealso> + for more info. </p> + </desc> + </func> + + </funcs> + + +</erlref> + diff --git a/lib/snmp/doc/src/snmpm_network_interface_filter.xml b/lib/snmp/doc/src/snmpm_network_interface_filter.xml new file mode 100644 index 0000000000..ea1e183848 --- /dev/null +++ b/lib/snmp/doc/src/snmpm_network_interface_filter.xml @@ -0,0 +1,158 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2007</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpm_network_interface_filter</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpm_network_interface_filter.xml</file> + </header> + <module>snmpm_network_interface_filter</module> + <modulesummary>Behaviour module for the SNMP manager network-interface filter.</modulesummary> + <description> + <p>This module defines the behaviour of the manager network interface + filter. A <c>snmpm_network_interface_filter</c> compliant module + must export the following functions: </p> + <list type="bulleted"> + <item> + <p><seealso marker="#accept_recv">accept_recv/2</seealso></p> + </item> + <item> + <p><seealso marker="#accept_send">accept_send/2</seealso></p> + </item> + <item> + <p><seealso marker="#accept_recv_pdu">accept_recv_pdu/3</seealso></p> + </item> + <item> + <p><seealso marker="#accept_send_pdu">accept_send_pdu/2</seealso></p> + </item> + </list> + <p>The semantics of them and their exact signatures are explained + below. </p> + <p>The purpose of the network interface filter is to allow for filtering + of messages (accept or reject) receive and send. This is done + on two levels: </p> + <list type="bulleted"> + <item> + <p>The first level is at the UDP entry / exit point, i.e. + immediately after the receipt of the message, before any message + processing is done (accept_recv) and + immediately before sending the message, after all message + processing is done (accept_send).</p> + </item> + <item> + <p>The second level is at the MPD entry / exit point, i.e. + immediately after the basic message processing (accept_recv_pdu) / + immediately before the basic message processing (accept_send_pdu).</p> + </item> + </list> + <p>Note that the network interface filter is something which is used + by the network interface implementation provided by the application + (<c>snmpm_net_if</c>). The default filter accepts all messages.</p> + <p>A network interface filter can e.g. be used during testing or for load + regulation. </p> + </description> + + <section> + <title>DATA TYPES</title> + <code type="none"> +port() = integer() > 0 +pdu_type() = 'get-request' | 'get-next-request' | 'get-response' | 'set-request' | trap | 'get-bulk-request' | 'inform-request' | report | trappdu + </code> + <marker id="accept_recv"></marker> + </section> + + <funcs> + <func> + <name>accept_recv(Addr, Port) -> boolean()</name> + <fsummary>Shall the received message be accepted</fsummary> + <type> + <v>Addr = ip_address()</v> + <v>Port = port()</v> + </type> + <desc> + <p>Called at the reception of a message (before <em>any</em> processing + has been done).</p> + <p>For the message to be rejected, the function <em>must</em> return + <em>false</em>. </p> + <marker id="accept_send"></marker> + </desc> + </func> + + <func> + <name>accept_send(Addr, Port) -> boolean()</name> + <fsummary>Shall the message be sent</fsummary> + <type> + <v>Addr = ip_address()</v> + <v>Port = port()</v> + </type> + <desc> + <p>Called before the sending of a message (after <em>all</em> processing + has been done).</p> + <p>For the message to be rejected, the function <em>must</em> return + <em>false</em>. </p> + <marker id="accept_recv_pdu"></marker> + </desc> + </func> + + <func> + <name>accept_recv_pdu(Addr, Port, PduType) -> boolean()</name> + <fsummary>Shall the received pdu be accepted</fsummary> + <type> + <v>Addr = ip_address()</v> + <v>Port = port()</v> + <v>PduType = pdu_type()</v> + </type> + <desc> + <p>Called after the basic message processing (MPD) has been done, + but before the pdu is handed over to the server for primary + processing.</p> + <p>For the pdu to be rejected, the function <em>must</em> return + <em>false</em>. </p> + <marker id="accept_send_pdu"></marker> + </desc> + </func> + + <func> + <name>accept_send_pdu(Addr, Port, PduType) -> boolean()</name> + <fsummary>Shall the pdu be sent</fsummary> + <type> + <v>Addr = ip_address()</v> + <v>Port = port()</v> + <v>PduType = pdu_type() > 0</v> + </type> + <desc> + <p>Called before the basic message processing (MPD) is done, + when a pdu has been received from the master-agent.</p> + <p>For the message to be rejected, the function <em>must</em> return + <em>false</em>. </p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/snmpm_user.xml b/lib/snmp/doc/src/snmpm_user.xml new file mode 100644 index 0000000000..1823e0c815 --- /dev/null +++ b/lib/snmp/doc/src/snmpm_user.xml @@ -0,0 +1,276 @@ +<?xml version="1.0" encoding="latin1" ?> +<!DOCTYPE erlref SYSTEM "erlref.dtd"> + +<erlref> + <header> + <copyright> + <year>2004</year><year>2009</year> + <holder>Ericsson AB. All Rights Reserved.</holder> + </copyright> + <legalnotice> + The contents of this file are subject to the Erlang Public License, + Version 1.1, (the "License"); you may not use this file except in + compliance with the License. You should have received a copy of the + Erlang Public License along with this software. If not, it can be + retrieved online at http://www.erlang.org/. + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + the License for the specific language governing rights and limitations + under the License. + + </legalnotice> + + <title>snmpm_user</title> + <prepared></prepared> + <responsible></responsible> + <docno></docno> + <approved></approved> + <checked></checked> + <date></date> + <rev></rev> + <file>snmpm_user.xml</file> + </header> + <module>snmpm_user</module> + <modulesummary>Behaviour module for the SNMP manager user.</modulesummary> + <description> + <p>This module defines the behaviour of the manager user. + A <c>snmpm_user</c> compliant module + must export the following functions: </p> + <list type="bulleted"> + <item> + <p>handle_error/3</p> + </item> + <item> + <p>handle_agent/4</p> + </item> + <item> + <p>handle_pdu/4</p> + </item> + <item> + <p>handle_trap/3</p> + </item> + <item> + <p>handle_inform/3</p> + </item> + <item> + <p>handle_report/3</p> + </item> + </list> + <p>The semantics of them and their exact signatures are explained + below. </p> + <p>Note that if an agent is registered using the old, no longer + documented, functions (using Addr and Port), the old variant of the + callback functions, handle_pdu, handle_trap, handle_inform and + handle_report, will be called. </p> + + <marker id="handle_error"></marker> + </description> + <funcs> + <func> + <name>handle_error(ReqId, Reason, UserData) -> Reply</name> + <fsummary>Handle error</fsummary> + <type> + <v>ReqId = integer()</v> + <v>Reason = {unexpected_pdu, SnmpInfo} | {invalid_sec_info, SecInfo, SnmpInfo} | {empty_message, Addr, Port} | term()</v> + <v>Addr = ip_address()</v> + <v>Port = integer()</v> + <v>UserData = term()</v> + <v>Reply = ignore</v> + </type> + <desc> + <p>This function is called when the manager needs to + communicate an "asynchronous" error, to the user: + e.g. failure to send an asynchronous message (i.e. encoding + error), a received message was discarded due to security + error, the manager failed to generate a response message to + a received inform-request, or when receiving an unexpected + PDU from an agent (could be an expired async request). </p> + <p>If <c>ReqId</c> is less then 0, it means that this + information was not available to the manager (that info was + never retrieved before the message was discarded). + </p> + <p>For <c>SnmpInfo</c> see handle_agent below.</p> + + <marker id="handle_agent"></marker> + </desc> + </func> + + <func> + <name>handle_agent(Addr, Port, Type, SnmpInfo, UserData) -> Reply</name> + <fsummary>Handle agent</fsummary> + <type> + <v>Addr = ip_address()</v> + <v>Port = integer()</v> + <v>Type = pdu | trap | report | inform</v> + <v>SnmpInfo = SnmpPduInfo | SnmpTrapInfo | SnmpReportInfo | SnmpInformInfo</v> + <v>ErrorStatus = atom()</v> + <v>ErrorIndex = integer()</v> + <v>Varbinds = [varbind()]</v> + <v>varbind() = #varbind</v> + <v>UserData = term()</v> + <v>Reply = ignore | {register, UserId, TargetName, agent_info()}</v> + <v>UserId = term()</v> + <v>TargetName = target_name()</v> + <v>agent_info() = [{agent_info_item(), agent_info_value()}]</v> + </type> + <desc> + <p>This function is called when a message is received from an + unknown agent.</p> + <p>Note that this will always be the default user that is called.</p> + <p>For more info about the <c>agent_info()</c>, see + <seealso marker="snmpm#register_agent">register_agent</seealso>.</p> + + <p>The arguments <c>Type</c> and <c>SnmpInfo</c> relates in the + following way: </p> + + <list type="bulleted"> + <item> + <p><c>pdu</c> - <c>SnmpPduInfo</c> + (see <seealso marker="#handle_pdu">handle_pdu</seealso> + for more info).</p> + </item> + <item> + <p><c>trap</c> - <c>SnmpTrapInfo</c> + (see <seealso marker="#handle_trap">handle_trap</seealso> + for more info).</p> + </item> + <item> + <p><c>report</c> - <c>SnmpReportInfo</c> + (see <seealso marker="#handle_report">handle_report</seealso> + for more info).</p> + </item> + <item> + <p><c>inform</c> - <c>SnmpInformInfo</c> + (see <seealso marker="#handle_inform">handle_inform</seealso> + for more info).</p> + </item> + </list> + + <p>The only user which would return + <c>{register, UserId, TargetName, agent_info()}</c> is the + <em>default user</em>.</p> + + <marker id="handle_pdu"></marker> + </desc> + </func> + + <func> + <name>handle_pdu(TargetName, ReqId, SnmpPduInfo, UserData) -> Reply</name> + <fsummary>Handle the reply to an asynchronous request</fsummary> + <type> + <v>TargetName = target_name()</v> + <v>ReqId = term()</v> + <v>SnmpPduInfo = {ErrorStatus, ErrorIndex, Varbinds}</v> + <v>ErrorStatus = atom()</v> + <v>ErrorIndex = integer()</v> + <v>Varbinds = [varbind()]</v> + <v>varbind() = #varbind</v> + <v>UserData = term()</v> + <v>Reply = ignore</v> + </type> + <desc> + <p>Handle the reply to an asynchronous request, such as + <seealso marker="snmpm#async_get">async_get</seealso>, + <seealso marker="snmpm#async_get_next">async_get_next</seealso> or + <seealso marker="snmpm#async_set">async_set</seealso>.</p> + <p>It could also be a late reply to a synchronous request.</p> + <p><c>ReqId</c> is returned by the asynchronous request function.</p> + + <marker id="handle_trap"></marker> + </desc> + </func> + + <func> + <name>handle_trap(TargetName, SnmpTrapInfo, UserData) -> Reply</name> + <fsummary>Handle a trap/notification message</fsummary> + <type> + <v>TargetName = TargetName2 = target_name()</v> + <v>SnmpTrapInfo = {Enteprise, Generic, Spec, Timestamp, Varbinds} | {ErrorStatus, ErrorIndex, Varbinds}</v> + <v>Enterprise = oid()</v> + <v>Generic = integer()</v> + <v>Spec = integer()</v> + <v>Timestamp = integer()</v> + <v>ErrorStatus = atom()</v> + <v>ErrorIndex = integer()</v> + <v>Varbinds = [varbind()]</v> + <v>varbind() = #varbind</v> + <v>UserData = term()</v> + <v>Reply = ignore | unregister | {register, UserId, TargetName2, agent_info()}</v> + <v>UserId = term()</v> + <v>agent_info() = [{agent_info_item(), agent_info_value()}]</v> + </type> + <desc> + <p>Handle a trap/notification message from an agent.</p> + <p>For more info about the <c>agent_info()</c>, see + <seealso marker="snmpm#register_agent">register_agent</seealso></p> + <p>The only user which would return + <c>{register, UserId, TargetName2, agent_info()}</c> is the + <em>default user</em>.</p> + + <marker id="handle_inform"></marker> + </desc> + </func> + + <func> + <name>handle_inform(TargetName, SnmpInformInfo, UserData) -> Reply</name> + <fsummary>Handle a inform message</fsummary> + <type> + <v>TargetName = TargetName2 = target_name()</v> + <v>SnmpInformInfo = {ErrorStatus, ErrorIndex, Varbinds}</v> + <v>ErrorStatus = atom()</v> + <v>ErrorIndex = integer()</v> + <v>Varbinds = [varbind()]</v> + <v>varbind() = #varbind</v> + <v>UserData = term()</v> + <v>Reply = ignore | unregister | {register, UserId, TargetName2, agent_info()}</v> + <v>UserId = term()</v> + <v>agent_info() = [{agent_info_item(), agent_info_value()}]</v> + </type> + <desc> + <p>Handle a inform message.</p> + <p>For more info about the <c>agent_info()</c>, see + <seealso marker="snmpm#register_agent">register_agent</seealso></p> + <p>The only user which would return + <c>{register, UserId, TargetName2, agent_info()}</c> is the + <em>default user</em>.</p> + <p>If the + <seealso marker="snmp_app">inform request behaviour</seealso> + configuration option is set to <c>user</c> or + <c>{user, integer()}</c>, the response (acknowledgment) to this + inform-request will be sent when this function returns.</p> + + <marker id="handle_report"></marker> + </desc> + </func> + + <func> + <name>handle_report(TargetName, SnmpReportInfo, UserData) -> Reply</name> + <fsummary>Handle a report message</fsummary> + <type> + <v>TargetName = TargetName2 = target_name()</v> + <v>Addr = ip_address()</v> + <v>Port = integer()</v> + <v>SnmpReportInfo = {ErrorStatus, ErrorIndex, Varbinds}</v> + <v>ErrorStatus = atom()</v> + <v>ErrorIndex = integer()</v> + <v>Varbinds = [varbind()]</v> + <v>varbind() = #varbind</v> + <v>UserData = term()</v> + <v>Reply = ignore | unregister | {register, UserId, TargetName2, agent_info()}</v> + <v>UserId = term()</v> + <v>agent_info() = [{agent_info_item(), agent_info_value()}]</v> + </type> + <desc> + <p>Handle a report message.</p> + <p>For more info about the <c>agent_info()</c>, see + <seealso marker="snmpm#register_agent">register_agent</seealso></p> + <p>The only user which would return + <c>{register, UserId, TargetName2, agent_info()}</c> is the + <em>default user</em>.</p> + </desc> + </func> + </funcs> + +</erlref> + diff --git a/lib/snmp/doc/src/structure.fig b/lib/snmp/doc/src/structure.fig new file mode 100644 index 0000000000..c7feff6f47 --- /dev/null +++ b/lib/snmp/doc/src/structure.fig @@ -0,0 +1,46 @@ +#FIG 3.1 +Landscape +Center +Inches +1200 2 +6 5850 2400 8100 3075 +4 0 -1 0 0 0 12 0.0000 4 180 2025 5850 2550 (associate a MIB object with\001 +4 0 -1 0 0 0 12 0.0000 4 180 1815 5850 2775 snmp_generic:table_funct\001 +4 0 -1 0 0 0 12 0.0000 4 180 2055 5850 3000 snmp_generic:variable_func)\001 +-6 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 4200 3150 4200 3450 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 3600 1275 4800 1275 4800 1725 3600 1725 3600 1275 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 3600 1725 4800 1725 4800 2100 3600 2100 3600 1725 +2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2 + 4200 2100 4200 2775 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 3000 3450 5400 3450 5400 3975 3000 3975 3000 3450 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 4200 3975 5400 3975 5400 4500 4200 4500 4200 3975 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 3000 5025 4200 5025 4200 5550 3000 5550 3000 5025 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 3000 3975 4200 3975 4200 4500 3000 4500 3000 3975 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 3000 4500 4200 4500 4200 5025 3000 5025 3000 4500 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 2400 900 8625 900 8625 6000 2400 6000 2400 900 +2 2 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5 + 8625 6000 8625 6000 8625 6000 8625 6000 8625 6000 +4 0 -1 0 0 0 12 0.0000 4 135 1230 3525 3000 Assosiacition file\001 +4 0 -1 0 0 0 12 0.0000 4 180 990 3750 1575 SNMP Agent\001 +4 0 -1 0 0 0 12 0.0000 4 135 345 4050 1950 MIB\001 +4 0 -1 0 0 0 12 0.0000 4 180 1080 3075 4275 snmp_local_db\001 +4 0 -1 0 0 0 12 0.0000 4 135 525 4500 4275 Mnesia\001 +4 0 -1 0 0 0 12 0.0000 4 165 285 3450 4800 pets\001 +4 0 -1 0 0 0 12 0.0000 4 120 195 3450 5325 ets\001 +4 0 -1 0 0 0 12 0.0000 4 180 990 3600 3825 snmp_generic\001 +4 0 -1 0 0 0 12 0.0000 4 180 1530 5925 3600 Support for get-next,\001 +4 0 -1 0 0 0 12 0.0000 4 180 1560 5925 3825 RowStatus operations\001 +4 0 -1 0 0 0 12 0.0000 4 135 645 6000 4275 Database\001 +4 0 -1 0 0 0 12 0.0000 4 180 1860 6000 4800 Adds persistent properties\001 +4 0 -1 0 0 0 12 0.0000 4 120 375 6000 5025 to ets\001 +4 0 -1 0 0 0 12 0.0000 4 180 1995 6000 5475 The standard Erlang module\001 diff --git a/lib/snmp/doc/src/structure.gif b/lib/snmp/doc/src/structure.gif Binary files differnew file mode 100644 index 0000000000..69ce000357 --- /dev/null +++ b/lib/snmp/doc/src/structure.gif diff --git a/lib/snmp/doc/src/structure.ps b/lib/snmp/doc/src/structure.ps new file mode 100644 index 0000000000..ffb345eb6a --- /dev/null +++ b/lib/snmp/doc/src/structure.ps @@ -0,0 +1,170 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: bild2.fig +%%Creator: fig2dev Version 3.1 Patchlevel 2 +%%CreationDate: Mon Jan 3 10:34:34 2000 +%%For: nibe@gundor (Bengt Nilsson, ETX/DN/SP) +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 376 308 +%%Pages: 0 +%%BeginSetup +%%IncludeFeature: *PageSize Letter +%%EndSetup +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-143.0 361.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def +%%EndProlog + +$F2psBegin +10 setmiterlimit +n 0 792 m 0 0 l 612 0 l 612 792 l cp clip + 0.06000 0.06000 sc +/Times-Roman ff 180.00 scf sf +5850 2550 m +gs 1 -1 sc (\(associate a MIB object with) col-1 sh gr +/Times-Roman ff 180.00 scf sf +5850 2775 m +gs 1 -1 sc (snmp_generic:table_funct) col-1 sh gr +/Times-Roman ff 180.00 scf sf +5850 3000 m +gs 1 -1 sc (snmp_generic:variable_func\)) col-1 sh gr +7.500 slw +% Polyline +n 4200 3150 m 4200 3450 l gs col-1 s gr +% Polyline +n 3600 1275 m 4800 1275 l 4800 1725 l 3600 1725 l cp gs col-1 s gr +% Polyline +n 3600 1725 m 4800 1725 l 4800 2100 l 3600 2100 l cp gs col-1 s gr +% Polyline +n 4200 2100 m 4200 2775 l gs col-1 s gr +% Polyline +n 3000 3450 m 5400 3450 l 5400 3975 l 3000 3975 l cp gs col-1 s gr +% Polyline +n 4200 3975 m 5400 3975 l 5400 4500 l 4200 4500 l cp gs col-1 s gr +% Polyline +n 3000 5025 m 4200 5025 l 4200 5550 l 3000 5550 l cp gs col-1 s gr +% Polyline +n 3000 3975 m 4200 3975 l 4200 4500 l 3000 4500 l cp gs col-1 s gr +% Polyline +n 3000 4500 m 4200 4500 l 4200 5025 l 3000 5025 l cp gs col-1 s gr +% Polyline +n 2400 900 m 8625 900 l 8625 6000 l 2400 6000 l cp gs col-1 s gr +% Polyline +n 8625 6000 m 8625 6000 l 8625 6000 l 8625 6000 l cp gs col-1 s gr +/Times-Roman ff 180.00 scf sf +3525 3000 m +gs 1 -1 sc (Assosiacition file) col-1 sh gr +/Times-Roman ff 180.00 scf sf +3750 1575 m +gs 1 -1 sc (SNMP Agent) col-1 sh gr +/Times-Roman ff 180.00 scf sf +4050 1950 m +gs 1 -1 sc (MIB) col-1 sh gr +/Times-Roman ff 180.00 scf sf +3075 4275 m +gs 1 -1 sc (snmp_local_db) col-1 sh gr +/Times-Roman ff 180.00 scf sf +4500 4275 m +gs 1 -1 sc (Mnesia) col-1 sh gr +/Times-Roman ff 180.00 scf sf +3450 4800 m +gs 1 -1 sc (pets) col-1 sh gr +/Times-Roman ff 180.00 scf sf +3450 5325 m +gs 1 -1 sc (ets) col-1 sh gr +/Times-Roman ff 180.00 scf sf +3600 3825 m +gs 1 -1 sc (snmp_generic) col-1 sh gr +/Times-Roman ff 180.00 scf sf +5925 3600 m +gs 1 -1 sc (Support for get-next,) col-1 sh gr +/Times-Roman ff 180.00 scf sf +5925 3825 m +gs 1 -1 sc (RowStatus operations) col-1 sh gr +/Times-Roman ff 180.00 scf sf +6000 4275 m +gs 1 -1 sc (Database) col-1 sh gr +/Times-Roman ff 180.00 scf sf +6000 4800 m +gs 1 -1 sc (Adds persistent properties) col-1 sh gr +/Times-Roman ff 180.00 scf sf +6000 5025 m +gs 1 -1 sc (to ets) col-1 sh gr +/Times-Roman ff 180.00 scf sf +6000 5475 m +gs 1 -1 sc (The standard Erlang module) col-1 sh gr +$F2psEnd +rs diff --git a/lib/snmp/doc/src/summary.html.src b/lib/snmp/doc/src/summary.html.src new file mode 100644 index 0000000000..9bad4adbeb --- /dev/null +++ b/lib/snmp/doc/src/summary.html.src @@ -0,0 +1 @@ +Simple Network Management Protocol (SNMP) support including a MIB compiler, a simple SNMP manager and tools for creating SNMP agents diff --git a/lib/snmp/doc/src/user_guide.gif b/lib/snmp/doc/src/user_guide.gif Binary files differnew file mode 100644 index 0000000000..e6275a803d --- /dev/null +++ b/lib/snmp/doc/src/user_guide.gif diff --git a/lib/snmp/doc/src/warning.gif b/lib/snmp/doc/src/warning.gif Binary files differnew file mode 100644 index 0000000000..96af52360e --- /dev/null +++ b/lib/snmp/doc/src/warning.gif |