Whamcloud - gitweb
- merge 0.7rc1 from b_devel to HEAD (20030612 merge point)
authorpschwan <pschwan>
Thu, 12 Jun 2003 07:12:50 +0000 (07:12 +0000)
committerpschwan <pschwan>
Thu, 12 Jun 2003 07:12:50 +0000 (07:12 +0000)
- remove extN/ files

726 files changed:
lnet/.cvsignore [moved from lustre/lib/.cvsignore with 60% similarity]
lnet/AUTHORS [new file with mode: 0644]
lnet/ChangeLog [new file with mode: 0644]
lnet/Kernelenv.in [new file with mode: 0644]
lnet/Kernelenv.mk [new file with mode: 0644]
lnet/Makefile.am [new file with mode: 0644]
lnet/Makefile.mk [new file with mode: 0644]
lnet/NEWS [new file with mode: 0644]
lnet/README [new file with mode: 0644]
lnet/Rules.linux [new file with mode: 0644]
lnet/archdep.m4 [new file with mode: 0644]
lnet/autogen.sh [new file with mode: 0644]
lnet/build.m4 [new file with mode: 0644]
lnet/configure.in [new file with mode: 0644]
lnet/doc/.cvsignore [new file with mode: 0644]
lnet/doc/Data-structures [new file with mode: 0644]
lnet/doc/Makefile.am [new file with mode: 0644]
lnet/doc/Message-life-cycle [new file with mode: 0644]
lnet/doc/NAL-HOWTO [new file with mode: 0644]
lnet/doc/file.fig [new file with mode: 0644]
lnet/doc/flow_new.fig [new file with mode: 0644]
lnet/doc/get.fig [new file with mode: 0644]
lnet/doc/ieee.bst [new file with mode: 0644]
lnet/doc/mpi.fig [new file with mode: 0644]
lnet/doc/portals.fig [new file with mode: 0644]
lnet/doc/portals3.bib [new file with mode: 0644]
lnet/doc/portals3.lyx [new file with mode: 0644]
lnet/doc/put.fig [new file with mode: 0644]
lnet/include/.cvsignore [new file with mode: 0644]
lnet/include/Makefile.am [new file with mode: 0644]
lnet/include/config.h.in [new file with mode: 0644]
lnet/include/linux/Makefile.am [new file with mode: 0644]
lnet/include/linux/kp30.h [new file with mode: 0644]
lnet/include/linux/portals_compat25.h [new file with mode: 0644]
lnet/include/linux/portals_lib.h [new file with mode: 0644]
lnet/include/lnet/Makefile.am [new file with mode: 0644]
lnet/include/lnet/api-support.h [new file with mode: 0644]
lnet/include/lnet/api.h [new file with mode: 0644]
lnet/include/lnet/arg-blocks.h [new file with mode: 0644]
lnet/include/lnet/defines.h [new file with mode: 0644]
lnet/include/lnet/errno.h [new file with mode: 0644]
lnet/include/lnet/internal.h [new file with mode: 0644]
lnet/include/lnet/lib-dispatch.h [new file with mode: 0644]
lnet/include/lnet/lib-lnet.h [new file with mode: 0644]
lnet/include/lnet/lib-nal.h [new file with mode: 0644]
lnet/include/lnet/lib-p30.h [new file with mode: 0644]
lnet/include/lnet/lib-types.h [new file with mode: 0644]
lnet/include/lnet/list.h [new file with mode: 0644]
lnet/include/lnet/lltrace.h [new file with mode: 0644]
lnet/include/lnet/lnet.h [new file with mode: 0644]
lnet/include/lnet/lnetctl.h [new file with mode: 0644]
lnet/include/lnet/myrnal.h [new file with mode: 0644]
lnet/include/lnet/nal.h [new file with mode: 0644]
lnet/include/lnet/nalids.h [new file with mode: 0644]
lnet/include/lnet/p30.h [new file with mode: 0644]
lnet/include/lnet/ppid.h [new file with mode: 0644]
lnet/include/lnet/ptlctl.h [new file with mode: 0644]
lnet/include/lnet/stringtab.h [new file with mode: 0644]
lnet/include/lnet/types.h [new file with mode: 0644]
lnet/klnds/.cvsignore [new file with mode: 0644]
lnet/klnds/Makefile.am [new file with mode: 0644]
lnet/klnds/Makefile.mk [new file with mode: 0644]
lnet/klnds/gmlnd/.cvsignore [new file with mode: 0644]
lnet/klnds/gmlnd/Makefile.am [new file with mode: 0644]
lnet/klnds/gmlnd/gm-1.5.2.1-exports.patch [new file with mode: 0644]
lnet/klnds/gmlnd/gmlnd.h [new file with mode: 0644]
lnet/klnds/gmlnd/gmlnd_cb.c [new file with mode: 0644]
lnet/klnds/gmlnd/gmnal.c [new file with mode: 0644]
lnet/klnds/qswlnd/.cvsignore [new file with mode: 0644]
lnet/klnds/qswlnd/Makefile.am [new file with mode: 0644]
lnet/klnds/qswlnd/qswlnd.c [new file with mode: 0644]
lnet/klnds/qswlnd/qswlnd.h [new file with mode: 0644]
lnet/klnds/qswlnd/qswlnd_cb.c [new file with mode: 0644]
lnet/klnds/scimaclnd/.cvsignore [new file with mode: 0644]
lnet/klnds/scimaclnd/Makefile.am [new file with mode: 0644]
lnet/klnds/scimaclnd/README.scimacnal [new file with mode: 0644]
lnet/klnds/scimaclnd/scimac.conf [new file with mode: 0644]
lnet/klnds/scimaclnd/scimacnal.c [new file with mode: 0644]
lnet/klnds/scimaclnd/scimacnal.h [new file with mode: 0644]
lnet/klnds/scimaclnd/scimacnal_cb.c [new file with mode: 0644]
lnet/klnds/socklnd/.cvsignore [new file with mode: 0644]
lnet/klnds/socklnd/Makefile.am [new file with mode: 0644]
lnet/klnds/socklnd/Makefile.mk [new file with mode: 0644]
lnet/klnds/socklnd/socklnd.c [new file with mode: 0644]
lnet/klnds/socklnd/socklnd.h [new file with mode: 0644]
lnet/klnds/socklnd/socklnd_cb.c [new file with mode: 0644]
lnet/klnds/toelnd/.cvsignore [new file with mode: 0644]
lnet/klnds/toelnd/Makefile.am [new file with mode: 0644]
lnet/klnds/toelnd/toenal.c [new file with mode: 0644]
lnet/klnds/toelnd/toenal.h [new file with mode: 0644]
lnet/klnds/toelnd/toenal_cb.c [new file with mode: 0644]
lnet/libcfs/.cvsignore [new file with mode: 0644]
lnet/libcfs/Makefile.am [new file with mode: 0644]
lnet/libcfs/Makefile.mk [new file with mode: 0644]
lnet/libcfs/debug.c [new file with mode: 0644]
lnet/libcfs/module.c [new file with mode: 0644]
lnet/libcfs/proc.c [new file with mode: 0644]
lnet/lnet/.cvsignore [new file with mode: 0644]
lnet/lnet/Makefile.am [new file with mode: 0644]
lnet/lnet/Makefile.mk [new file with mode: 0644]
lnet/lnet/api-eq.c [new file with mode: 0644]
lnet/lnet/api-errno.c [new file with mode: 0644]
lnet/lnet/api-init.c [new file with mode: 0644]
lnet/lnet/api-me.c [new file with mode: 0644]
lnet/lnet/api-ni.c [new file with mode: 0644]
lnet/lnet/api-wrap.c [new file with mode: 0644]
lnet/lnet/lib-dispatch.c [new file with mode: 0644]
lnet/lnet/lib-eq.c [new file with mode: 0644]
lnet/lnet/lib-init.c [new file with mode: 0644]
lnet/lnet/lib-md.c [new file with mode: 0644]
lnet/lnet/lib-me.c [new file with mode: 0644]
lnet/lnet/lib-move.c [new file with mode: 0644]
lnet/lnet/lib-msg.c [new file with mode: 0644]
lnet/lnet/lib-ni.c [new file with mode: 0644]
lnet/lnet/lib-pid.c [new file with mode: 0644]
lnet/packaging/.cvsignore [new file with mode: 0644]
lnet/packaging/Makefile.am [new file with mode: 0644]
lnet/packaging/portals.spec.in [new file with mode: 0644]
lnet/router/.cvsignore [new file with mode: 0644]
lnet/router/Makefile.am [new file with mode: 0644]
lnet/router/Makefile.mk [new file with mode: 0644]
lnet/router/proc.c [new file with mode: 0644]
lnet/router/router.c [new file with mode: 0644]
lnet/router/router.h [new file with mode: 0644]
lnet/tests/.cvsignore [new file with mode: 0644]
lnet/tests/Makefile.am [new file with mode: 0644]
lnet/tests/ping.h [new file with mode: 0644]
lnet/tests/ping_cli.c [new file with mode: 0644]
lnet/tests/ping_srv.c [new file with mode: 0644]
lnet/tests/sping_cli.c [new file with mode: 0644]
lnet/tests/sping_srv.c [new file with mode: 0644]
lnet/tests/startclient.sh [new file with mode: 0644]
lnet/tests/startserver.sh [new file with mode: 0644]
lnet/tests/stopclient.sh [new file with mode: 0644]
lnet/tests/stopserver.sh [new file with mode: 0644]
lnet/ulnds/.cvsignore [new file with mode: 0644]
lnet/ulnds/Makefile.am [new file with mode: 0644]
lnet/ulnds/README [new file with mode: 0644]
lnet/ulnds/address.c [new file with mode: 0644]
lnet/ulnds/bridge.h [new file with mode: 0644]
lnet/ulnds/connection.c [new file with mode: 0644]
lnet/ulnds/connection.h [new file with mode: 0644]
lnet/ulnds/debug.c [new file with mode: 0644]
lnet/ulnds/dispatch.h [new file with mode: 0644]
lnet/ulnds/ipmap.h [new file with mode: 0644]
lnet/ulnds/pqtimer.c [new file with mode: 0644]
lnet/ulnds/pqtimer.h [new file with mode: 0644]
lnet/ulnds/procapi.c [new file with mode: 0644]
lnet/ulnds/procbridge.h [new file with mode: 0644]
lnet/ulnds/proclib.c [new file with mode: 0644]
lnet/ulnds/select.c [new file with mode: 0644]
lnet/ulnds/socklnd/Makefile.am [new file with mode: 0644]
lnet/ulnds/socklnd/README [new file with mode: 0644]
lnet/ulnds/socklnd/address.c [new file with mode: 0644]
lnet/ulnds/socklnd/bridge.h [new file with mode: 0644]
lnet/ulnds/socklnd/connection.c [new file with mode: 0644]
lnet/ulnds/socklnd/connection.h [new file with mode: 0644]
lnet/ulnds/socklnd/debug.c [new file with mode: 0644]
lnet/ulnds/socklnd/dispatch.h [new file with mode: 0644]
lnet/ulnds/socklnd/ipmap.h [new file with mode: 0644]
lnet/ulnds/socklnd/pqtimer.c [new file with mode: 0644]
lnet/ulnds/socklnd/pqtimer.h [new file with mode: 0644]
lnet/ulnds/socklnd/procapi.c [new file with mode: 0644]
lnet/ulnds/socklnd/procbridge.h [new file with mode: 0644]
lnet/ulnds/socklnd/proclib.c [new file with mode: 0644]
lnet/ulnds/socklnd/select.c [new file with mode: 0644]
lnet/ulnds/socklnd/table.c [new file with mode: 0644]
lnet/ulnds/socklnd/table.h [new file with mode: 0644]
lnet/ulnds/socklnd/tcplnd.c [new file with mode: 0644]
lnet/ulnds/socklnd/timer.h [new file with mode: 0644]
lnet/ulnds/socklnd/utypes.h [new file with mode: 0644]
lnet/ulnds/table.c [new file with mode: 0644]
lnet/ulnds/table.h [new file with mode: 0644]
lnet/ulnds/tcplnd.c [new file with mode: 0644]
lnet/ulnds/timer.h [new file with mode: 0644]
lnet/ulnds/utypes.h [new file with mode: 0644]
lnet/utils/.cvsignore [new file with mode: 0644]
lnet/utils/Makefile.am [new file with mode: 0644]
lnet/utils/acceptor.c [new file with mode: 0644]
lnet/utils/debug.c [new file with mode: 0644]
lnet/utils/debugctl.c [new file with mode: 0644]
lnet/utils/l_ioctl.c [new file with mode: 0644]
lnet/utils/parser.c [new file with mode: 0644]
lnet/utils/parser.h [new file with mode: 0644]
lnet/utils/portals.c [new file with mode: 0644]
lnet/utils/ptlctl.c [new file with mode: 0644]
lnet/utils/routerstat.c [new file with mode: 0644]
lnet/utils/wirecheck.c [new file with mode: 0644]
lustre/.cvsignore
lustre/ChangeLog
lustre/Makefile.am
lustre/Makefile.mk [new file with mode: 0644]
lustre/README
lustre/Rules
lustre/archdep.m4 [deleted file]
lustre/autogen.sh
lustre/cobd/cache_obd.c
lustre/cobd/lproc_cache.c
lustre/conf/lustre.dtd
lustre/conf/lustre2ldif.xsl
lustre/conf/slapd-lustre.conf
lustre/configure.in
lustre/doc/lconf.lyx
lustre/doc/lctl.lyx
lustre/doc/lmc.lyx
lustre/extN/Makefile.am [deleted file]
lustre/extN/ext3-largefile.diff [deleted file]
lustre/extN/ext3-unmount_sync.diff [deleted file]
lustre/extN/extN-2.4.18-exports.diff [deleted file]
lustre/extN/extN-2.4.18-ino_sb_fixup.diff [deleted file]
lustre/extN/extN-san.diff [deleted file]
lustre/extN/extN-wantedi.diff [deleted file]
lustre/include/.cvsignore
lustre/include/ioctl.h [new file with mode: 0644]
lustre/include/liblustre.h
lustre/include/linux/lprocfs_status.h
lustre/include/linux/lustre_compat25.h [new file with mode: 0644]
lustre/include/linux/lustre_dlm.h
lustre/include/linux/lustre_export.h
lustre/include/linux/lustre_fsfilt.h
lustre/include/linux/lustre_ha.h
lustre/include/linux/lustre_idl.h
lustre/include/linux/lustre_import.h
lustre/include/linux/lustre_lib.h
lustre/include/linux/lustre_lite.h
lustre/include/linux/lustre_mds.h
lustre/include/linux/lustre_net.h
lustre/include/linux/obd.h
lustre/include/linux/obd_class.h
lustre/include/linux/obd_echo.h
lustre/include/linux/obd_filter.h
lustre/include/linux/obd_lov.h
lustre/include/linux/obd_ost.h
lustre/include/linux/obd_ptlbd.h
lustre/include/linux/obd_support.h
lustre/kernel_patches/README
lustre/kernel_patches/kernel_configs/config-linux-2.4.18-i386 [new file with mode: 0644]
lustre/kernel_patches/kernel_configs/config-linux-2.4.18-p4smp-61chaos [new file with mode: 0644]
lustre/kernel_patches/kernel_configs/config-linux-2.4.18-uml [new file with mode: 0644]
lustre/kernel_patches/kernel_configs/config-linux-2.4.20-i386-rh [new file with mode: 0644]
lustre/kernel_patches/kernel_configs/config-linux-2.4.20-uml [new file with mode: 0644]
lustre/kernel_patches/kernel_configs/jdike-2.5.69-uml.config [new file with mode: 0644]
lustre/kernel_patches/patches/dev_read_only_2.4.20-rh.patch [new file with mode: 0644]
lustre/kernel_patches/patches/dev_read_only_2.4.20.patch [moved from lustre/kernel_patches/patches/dev_read_only_hp.patch with 62% similarity]
lustre/kernel_patches/patches/dev_read_only_hp_2.4.20.patch [new file with mode: 0644]
lustre/kernel_patches/patches/dsp.patch [new file with mode: 0644]
lustre/kernel_patches/patches/export-truncate-2.5.63.patch [new file with mode: 0644]
lustre/kernel_patches/patches/export-truncate.patch [new file with mode: 0644]
lustre/kernel_patches/patches/exports.patch
lustre/kernel_patches/patches/exports_2.4.20-rh-hp.patch [moved from lustre/kernel_patches/patches/exports_hp.patch with 61% similarity]
lustre/kernel_patches/patches/exports_2.4.20.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext-2.4-patch-1-chaos.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext-2.4-patch-1.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext-2.4-patch-2.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext-2.4-patch-3.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext-2.4-patch-4.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-2.4-ino_t.patch [moved from lustre/extN/ext3-2.4-ino_t.diff with 73% similarity]
lustre/kernel_patches/patches/ext3-2.4.18-fixes.patch [moved from lustre/extN/ext3-2.4.18-fixes.diff with 100% similarity]
lustre/kernel_patches/patches/ext3-2.4.18-ino_sb_macro.patch [moved from lustre/extN/ext3-2.4.18-ino_sb_macro.diff with 99% similarity]
lustre/kernel_patches/patches/ext3-2.4.20-fixes.patch [moved from lustre/extN/patch-2.4.18-chaos22 with 60% similarity]
lustre/kernel_patches/patches/ext3-2.5-noread.patch [moved from lustre/extN/ext3-2.5-noread.diff with 99% similarity]
lustre/kernel_patches/patches/ext3-2.5.63.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-delete_thread-2.4.18.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-delete_thread-2.4.20.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-largefile.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-noread-2.4.20.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-orphan_lock.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-san-2.4.20.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-truncate_blocks-chaos.patch.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-truncate_blocks.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-unmount_sync.patch [new file with mode: 0644]
lustre/kernel_patches/patches/ext3-use-after-free.patch [moved from lustre/extN/ext3-use-after-free.diff with 56% similarity]
lustre/kernel_patches/patches/ext3-xattr-2.5.patch [deleted file]
lustre/kernel_patches/patches/ext3_orphan_lock-2.4.20-rh.patch [new file with mode: 0644]
lustre/kernel_patches/patches/extN-2.4.18-ino_sb_fixup.patch [new file with mode: 0644]
lustre/kernel_patches/patches/extN-delete_thread.patch [new file with mode: 0644]
lustre/kernel_patches/patches/extN-iget-debug.patch [moved from lustre/extN/extN-iget-debug.diff with 78% similarity]
lustre/kernel_patches/patches/extN-misc-fixup.patch [moved from lustre/extN/extN-misc-fixup.diff with 58% similarity]
lustre/kernel_patches/patches/extN-noread.patch [moved from lustre/extN/extN-noread.diff with 54% similarity]
lustre/kernel_patches/patches/extN-san.patch [new file with mode: 0644]
lustre/kernel_patches/patches/extN-wantedi.patch [new file with mode: 0644]
lustre/kernel_patches/patches/htree-ext3-2.4.18.patch [moved from lustre/extN/htree-ext3-2.4.18.diff with 99% similarity]
lustre/kernel_patches/patches/invalidate_show-2.4.20-rh.patch [new file with mode: 0644]
lustre/kernel_patches/patches/invalidate_show.patch
lustre/kernel_patches/patches/iod-rmap-exports-2.4.20.patch [new file with mode: 0644]
lustre/kernel_patches/patches/iod-rmap-exports.patch
lustre/kernel_patches/patches/iod-stock-24-exports.patch [new file with mode: 0644]
lustre/kernel_patches/patches/iod-stock-24-exports_hp.patch
lustre/kernel_patches/patches/iopen-2.4.18.patch [new file with mode: 0644]
lustre/kernel_patches/patches/iopen-2.4.20.patch [new file with mode: 0644]
lustre/kernel_patches/patches/kmem_cache_validate_2.4.20-rh.patch [new file with mode: 0644]
lustre/kernel_patches/patches/kmem_cache_validate_2.4.20.patch [new file with mode: 0644]
lustre/kernel_patches/patches/kmem_cache_validate_hp.patch
lustre/kernel_patches/patches/linux-2.4.18ea-0.8.26.patch [moved from lustre/extN/linux-2.4.18ea-0.8.26.diff with 93% similarity]
lustre/kernel_patches/patches/linux-2.4.20-xattr-0.8.54-chaos.patch [new file with mode: 0644]
lustre/kernel_patches/patches/linux-2.4.20-xattr-0.8.54-hp.patch [new file with mode: 0644]
lustre/kernel_patches/patches/linux-2.4.20-xattr-0.8.54.patch [new file with mode: 0644]
lustre/kernel_patches/patches/lustre-2.5.63.patch [new file with mode: 0644]
lustre/kernel_patches/patches/lustre-2.5.patch [deleted file]
lustre/kernel_patches/patches/lustre_version.patch
lustre/kernel_patches/patches/mcore-2.4.20-8.patch [new file with mode: 0644]
lustre/kernel_patches/patches/patch-2.4.18-hp1_pnnl18.2.8qsnet.patch [deleted file]
lustre/kernel_patches/patches/tcp-zero-copy.patch [new file with mode: 0644]
lustre/kernel_patches/patches/uml-patch-2.4.20-4.patch [new file with mode: 0644]
lustre/kernel_patches/patches/uml_check_get_page.patch
lustre/kernel_patches/patches/uml_no_panic.patch
lustre/kernel_patches/patches/vanilla-2.4.18.patch [deleted file]
lustre/kernel_patches/patches/vanilla-2.4.19.patch [deleted file]
lustre/kernel_patches/patches/vfs_intent-2.4.18-18.patch
lustre/kernel_patches/patches/vfs_intent-2.4.20-rh.patch [moved from lustre/kernel_patches/patches/vfs_intent.patch with 50% similarity]
lustre/kernel_patches/patches/vfs_intent-2.4.20-vanilla.patch [moved from lustre/kernel_patches/patches/vfs_intent_hp.patch with 76% similarity]
lustre/kernel_patches/pc/dev_read_only_2.4.20-rh.pc [moved from lustre/kernel_patches/pc/dev_read_only_hp.pc with 100% similarity]
lustre/kernel_patches/pc/dev_read_only_2.4.20.pc [new file with mode: 0644]
lustre/kernel_patches/pc/dev_read_only_hp_2.4.20.pc [new file with mode: 0644]
lustre/kernel_patches/pc/dsp.pc [new file with mode: 0644]
lustre/kernel_patches/pc/export-truncate-2.5.63.pc [new file with mode: 0644]
lustre/kernel_patches/pc/export-truncate.pc [new file with mode: 0644]
lustre/kernel_patches/pc/exports_2.4.20-rh-hp.pc [moved from lustre/kernel_patches/pc/exports_hp.pc with 100% similarity]
lustre/kernel_patches/pc/exports_2.4.20.pc [new file with mode: 0644]
lustre/kernel_patches/pc/exports_hp_2.4.20.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext-2.4-patch-1-chaos.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext-2.4-patch-1.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext-2.4-patch-2.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext-2.4-patch-3.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext-2.4-patch-4.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext3-2.4-ino_t.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext3-2.4.18-fixes.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext3-2.4.18-ino_sb_macro.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext3-2.4.20-fixes.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext3-2.5-noread.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext3-2.5.63.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext3-delete_thread-2.4.18.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext3-delete_thread-2.4.20.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext3-largefile.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext3-noread-2.4.20.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext3-orphan_lock.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext3-san-2.4.20.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext3-truncate_blocks-chaos.patch.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext3-truncate_blocks.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext3-unmount_sync.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext3-use-after-free.pc [new file with mode: 0644]
lustre/kernel_patches/pc/ext3_orphan_lock-2.4.20-rh.pc [new file with mode: 0644]
lustre/kernel_patches/pc/extN-2.4.18-ino_sb_fixup.pc [new file with mode: 0644]
lustre/kernel_patches/pc/extN-delete_thread.pc [new file with mode: 0644]
lustre/kernel_patches/pc/extN-iget-debug.pc [new file with mode: 0644]
lustre/kernel_patches/pc/extN-misc-fixup.pc [new file with mode: 0644]
lustre/kernel_patches/pc/extN-noread.pc [new file with mode: 0644]
lustre/kernel_patches/pc/extN-san.pc [new file with mode: 0644]
lustre/kernel_patches/pc/extN-wantedi.pc [new file with mode: 0644]
lustre/kernel_patches/pc/htree-ext3-2.4.18.pc [new file with mode: 0644]
lustre/kernel_patches/pc/invalidate_show-2.4.20-rh.pc [new file with mode: 0644]
lustre/kernel_patches/pc/invalidate_show.pc
lustre/kernel_patches/pc/iod-rmap-exports-2.4.20.pc [new file with mode: 0644]
lustre/kernel_patches/pc/iod-rmap-exports.pc
lustre/kernel_patches/pc/iod-stock-24-exports.pc [new file with mode: 0644]
lustre/kernel_patches/pc/iod-stock-24-exports_hp.pc [new file with mode: 0644]
lustre/kernel_patches/pc/iopen-2.4.18.pc [new file with mode: 0644]
lustre/kernel_patches/pc/iopen-2.4.20.pc [new file with mode: 0644]
lustre/kernel_patches/pc/kmem_cache_validate_2.4.20-rh.pc [new file with mode: 0644]
lustre/kernel_patches/pc/kmem_cache_validate_2.4.20.pc [new file with mode: 0644]
lustre/kernel_patches/pc/kmem_cache_validate_hp.pc
lustre/kernel_patches/pc/linux-2.4.18ea-0.8.26.pc [new file with mode: 0644]
lustre/kernel_patches/pc/linux-2.4.20-xattr-0.8.54-chaos.pc [new file with mode: 0644]
lustre/kernel_patches/pc/linux-2.4.20-xattr-0.8.54-hp.pc [new file with mode: 0644]
lustre/kernel_patches/pc/linux-2.4.20-xattr-0.8.54.pc [new file with mode: 0644]
lustre/kernel_patches/pc/lustre-2.5.63.pc [new file with mode: 0644]
lustre/kernel_patches/pc/mcore-2.4.20-8.pc [new file with mode: 0644]
lustre/kernel_patches/pc/patch-2.4.18-hp1_pnnl18.2.8qsnet.pc [deleted file]
lustre/kernel_patches/pc/tcp-zero-copy.pc [new file with mode: 0644]
lustre/kernel_patches/pc/uml-patch-2.4.20-4.pc [new file with mode: 0644]
lustre/kernel_patches/pc/uml_check_get_page.pc
lustre/kernel_patches/pc/uml_compile_fixes.pc
lustre/kernel_patches/pc/uml_no_panic.pc
lustre/kernel_patches/pc/vanilla-2.4.18.pc [deleted file]
lustre/kernel_patches/pc/vanilla-2.4.19.pc [deleted file]
lustre/kernel_patches/pc/vfs_intent-2.4.18-18.pc
lustre/kernel_patches/pc/vfs_intent-2.4.20-rh.pc [moved from lustre/kernel_patches/pc/vfs_intent.pc with 82% similarity]
lustre/kernel_patches/pc/vfs_intent-2.4.20-vanilla.pc [moved from lustre/kernel_patches/pc/vfs_intent_hp.pc with 82% similarity]
lustre/kernel_patches/prepare_tree.sh
lustre/kernel_patches/scripts/apatch
lustre/kernel_patches/scripts/cat-series [new file with mode: 0755]
lustre/kernel_patches/scripts/combine-applied
lustre/kernel_patches/scripts/forkpatch [new file with mode: 0755]
lustre/kernel_patches/scripts/join-patch [new file with mode: 0755]
lustre/kernel_patches/scripts/patchfns
lustre/kernel_patches/scripts/poppatch
lustre/kernel_patches/scripts/pushpatch
lustre/kernel_patches/scripts/refpatch
lustre/kernel_patches/scripts/rpatch
lustre/kernel_patches/scripts/sum-series [new file with mode: 0755]
lustre/kernel_patches/scripts/trypatch [new file with mode: 0755]
lustre/kernel_patches/scripts/unused-patches [new file with mode: 0755]
lustre/kernel_patches/series/chaos
lustre/kernel_patches/series/hp-pnnl [deleted file]
lustre/kernel_patches/series/hp-pnnl-2.4.20 [new file with mode: 0644]
lustre/kernel_patches/series/rh-2.4.18-18
lustre/kernel_patches/series/rh-2.4.20 [new file with mode: 0644]
lustre/kernel_patches/series/vanilla-2.4.18 [deleted file]
lustre/kernel_patches/series/vanilla-2.4.19 [deleted file]
lustre/kernel_patches/series/vanilla-2.4.20 [new file with mode: 0644]
lustre/kernel_patches/series/vanilla-2.5
lustre/kernel_patches/txt/ext3-2.4.20-fixes.txt [new file with mode: 0644]
lustre/kernel_patches/txt/vfs_intent.txt [deleted file]
lustre/kernel_patches/which_patch
lustre/ldlm/Makefile.am
lustre/ldlm/ldlm_extent.c
lustre/ldlm/ldlm_internal.h [new file with mode: 0644]
lustre/ldlm/ldlm_lib.c [new file with mode: 0644]
lustre/ldlm/ldlm_lock.c
lustre/ldlm/ldlm_lockd.c
lustre/ldlm/ldlm_request.c
lustre/ldlm/ldlm_resource.c
lustre/lib/Makefile.am [deleted file]
lustre/lib/client.c [deleted file]
lustre/lib/mds_updates.c [deleted file]
lustre/lib/obd_pack.c [deleted file]
lustre/lib/target.c [deleted file]
lustre/liblustre/Makefile.am
lustre/liblustre/file.c [new file with mode: 0644]
lustre/liblustre/libtest.c
lustre/liblustre/llite_lib.c [new file with mode: 0644]
lustre/liblustre/llite_lib.h [new file with mode: 0644]
lustre/liblustre/lltest.c [new file with mode: 0644]
lustre/liblustre/rw.c [new file with mode: 0644]
lustre/liblustre/super.c [new file with mode: 0644]
lustre/llite/Makefile.am
lustre/llite/commit_callback.c
lustre/llite/dcache.c
lustre/llite/dir.c
lustre/llite/file.c
lustre/llite/iod.c
lustre/llite/llite_internal.h [new file with mode: 0644]
lustre/llite/lproc_llite.c
lustre/llite/namei.c
lustre/llite/recover.c [deleted file]
lustre/llite/rw.c
lustre/llite/super.c
lustre/llite/super25.c
lustre/llite/symlink.c
lustre/lov/Makefile.am
lustre/lov/lov_obd.c
lustre/lov/lov_pack.c
lustre/mdc/Makefile.am
lustre/mdc/mdc_internal.h [new file with mode: 0644]
lustre/mdc/mdc_lib.c [new file with mode: 0644]
lustre/mdc/mdc_reint.c
lustre/mdc/mdc_request.c
lustre/mds/Makefile.am
lustre/mds/Makefile.mk [new file with mode: 0644]
lustre/mds/handler.c
lustre/mds/lproc_mds.c
lustre/mds/mds_fs.c
lustre/mds/mds_internal.h [new file with mode: 0644]
lustre/mds/mds_lib.c [new file with mode: 0644]
lustre/mds/mds_lov.c
lustre/mds/mds_open.c
lustre/mds/mds_reint.c
lustre/obdclass/Makefile.am
lustre/obdclass/class_obd.c
lustre/obdclass/debug.c
lustre/obdclass/fsfilt.c
lustre/obdclass/fsfilt_ext3.c
lustre/obdclass/fsfilt_extN.c
lustre/obdclass/fsfilt_reiserfs.c
lustre/obdclass/genops.c
lustre/obdclass/lprocfs_status.c
lustre/obdclass/lustre_handles.c
lustre/obdclass/simple.c [moved from lustre/lib/simple.c with 83% similarity]
lustre/obdclass/statfs_pack.c
lustre/obdclass/sysctl.c
lustre/obdclass/uuid.c
lustre/obdecho/Makefile.am
lustre/obdecho/echo.c
lustre/obdecho/echo_client.c
lustre/obdfilter/Makefile.am
lustre/obdfilter/filter.c
lustre/obdfilter/lproc_obdfilter.c
lustre/osc/Makefile.am
lustre/osc/osc_lib.c [new file with mode: 0644]
lustre/osc/osc_request.c
lustre/ost/Makefile.am
lustre/ost/ost_handler.c
lustre/portals/.cvsignore [new file with mode: 0644]
lustre/portals/AUTHORS [new file with mode: 0644]
lustre/portals/ChangeLog [new file with mode: 0644]
lustre/portals/Kernelenv.in [new file with mode: 0644]
lustre/portals/Kernelenv.mk [new file with mode: 0644]
lustre/portals/Makefile.am [new file with mode: 0644]
lustre/portals/Makefile.mk [new file with mode: 0644]
lustre/portals/NEWS [new file with mode: 0644]
lustre/portals/README [new file with mode: 0644]
lustre/portals/Rules.linux [new file with mode: 0644]
lustre/portals/archdep.m4 [new file with mode: 0644]
lustre/portals/autogen.sh [new file with mode: 0755]
lustre/portals/build.m4 [new file with mode: 0644]
lustre/portals/configure.in [new file with mode: 0644]
lustre/portals/doc/.cvsignore [new file with mode: 0644]
lustre/portals/doc/Data-structures [new file with mode: 0644]
lustre/portals/doc/Makefile.am [new file with mode: 0644]
lustre/portals/doc/Message-life-cycle [new file with mode: 0644]
lustre/portals/doc/NAL-HOWTO [new file with mode: 0644]
lustre/portals/doc/file.fig [new file with mode: 0644]
lustre/portals/doc/flow_new.fig [new file with mode: 0644]
lustre/portals/doc/get.fig [new file with mode: 0644]
lustre/portals/doc/ieee.bst [new file with mode: 0644]
lustre/portals/doc/mpi.fig [new file with mode: 0644]
lustre/portals/doc/portals.fig [new file with mode: 0644]
lustre/portals/doc/portals3.bib [new file with mode: 0644]
lustre/portals/doc/portals3.lyx [new file with mode: 0644]
lustre/portals/doc/put.fig [new file with mode: 0644]
lustre/portals/include/.cvsignore [new file with mode: 0644]
lustre/portals/include/Makefile.am [new file with mode: 0644]
lustre/portals/include/config.h.in [new file with mode: 0644]
lustre/portals/include/linux/Makefile.am [new file with mode: 0644]
lustre/portals/include/linux/kp30.h [new file with mode: 0644]
lustre/portals/include/linux/portals_compat25.h [new file with mode: 0644]
lustre/portals/include/linux/portals_lib.h [new file with mode: 0644]
lustre/portals/include/portals/Makefile.am [new file with mode: 0644]
lustre/portals/include/portals/api-support.h [new file with mode: 0644]
lustre/portals/include/portals/api.h [new file with mode: 0644]
lustre/portals/include/portals/arg-blocks.h [new file with mode: 0644]
lustre/portals/include/portals/defines.h [new file with mode: 0644]
lustre/portals/include/portals/errno.h [new file with mode: 0644]
lustre/portals/include/portals/internal.h [new file with mode: 0644]
lustre/portals/include/portals/lib-dispatch.h [new file with mode: 0644]
lustre/portals/include/portals/lib-nal.h [new file with mode: 0644]
lustre/portals/include/portals/lib-p30.h [new file with mode: 0644]
lustre/portals/include/portals/lib-types.h [new file with mode: 0644]
lustre/portals/include/portals/list.h [new file with mode: 0644]
lustre/portals/include/portals/lltrace.h [new file with mode: 0644]
lustre/portals/include/portals/myrnal.h [new file with mode: 0644]
lustre/portals/include/portals/nal.h [new file with mode: 0644]
lustre/portals/include/portals/nalids.h [new file with mode: 0644]
lustre/portals/include/portals/p30.h [new file with mode: 0644]
lustre/portals/include/portals/ppid.h [new file with mode: 0644]
lustre/portals/include/portals/ptlctl.h [new file with mode: 0644]
lustre/portals/include/portals/stringtab.h [new file with mode: 0644]
lustre/portals/include/portals/types.h [new file with mode: 0644]
lustre/portals/knals/.cvsignore [new file with mode: 0644]
lustre/portals/knals/Makefile.am [new file with mode: 0644]
lustre/portals/knals/Makefile.mk [new file with mode: 0644]
lustre/portals/knals/gmnal/.cvsignore [new file with mode: 0644]
lustre/portals/knals/gmnal/Makefile.am [new file with mode: 0644]
lustre/portals/knals/gmnal/gm-1.5.2.1-exports.patch [new file with mode: 0644]
lustre/portals/knals/gmnal/gmnal.c [new file with mode: 0644]
lustre/portals/knals/gmnal/gmnal.h [new file with mode: 0644]
lustre/portals/knals/gmnal/gmnal_cb.c [new file with mode: 0644]
lustre/portals/knals/qswnal/.cvsignore [new file with mode: 0644]
lustre/portals/knals/qswnal/Makefile.am [new file with mode: 0644]
lustre/portals/knals/qswnal/qswnal.c [new file with mode: 0644]
lustre/portals/knals/qswnal/qswnal.h [new file with mode: 0644]
lustre/portals/knals/qswnal/qswnal_cb.c [new file with mode: 0644]
lustre/portals/knals/scimacnal/.cvsignore [new file with mode: 0644]
lustre/portals/knals/scimacnal/Makefile.am [new file with mode: 0644]
lustre/portals/knals/scimacnal/README.scimacnal [new file with mode: 0644]
lustre/portals/knals/scimacnal/scimac.conf [new file with mode: 0644]
lustre/portals/knals/scimacnal/scimacnal.c [new file with mode: 0644]
lustre/portals/knals/scimacnal/scimacnal.h [new file with mode: 0644]
lustre/portals/knals/scimacnal/scimacnal_cb.c [new file with mode: 0644]
lustre/portals/knals/socknal/.cvsignore [new file with mode: 0644]
lustre/portals/knals/socknal/Makefile.am [new file with mode: 0644]
lustre/portals/knals/socknal/Makefile.mk [new file with mode: 0644]
lustre/portals/knals/socknal/socknal.c [new file with mode: 0644]
lustre/portals/knals/socknal/socknal.h [new file with mode: 0644]
lustre/portals/knals/socknal/socknal_cb.c [new file with mode: 0644]
lustre/portals/knals/toenal/.cvsignore [new file with mode: 0644]
lustre/portals/knals/toenal/Makefile.am [new file with mode: 0644]
lustre/portals/knals/toenal/toenal.c [new file with mode: 0644]
lustre/portals/knals/toenal/toenal.h [new file with mode: 0644]
lustre/portals/knals/toenal/toenal_cb.c [new file with mode: 0644]
lustre/portals/libcfs/.cvsignore [new file with mode: 0644]
lustre/portals/libcfs/Makefile.am [new file with mode: 0644]
lustre/portals/libcfs/Makefile.mk [new file with mode: 0644]
lustre/portals/libcfs/debug.c [new file with mode: 0644]
lustre/portals/libcfs/module.c [new file with mode: 0644]
lustre/portals/libcfs/proc.c [new file with mode: 0644]
lustre/portals/packaging/.cvsignore [new file with mode: 0644]
lustre/portals/packaging/Makefile.am [new file with mode: 0644]
lustre/portals/packaging/portals.spec.in [new file with mode: 0644]
lustre/portals/portals/.cvsignore [new file with mode: 0644]
lustre/portals/portals/Makefile.am [new file with mode: 0644]
lustre/portals/portals/Makefile.mk [new file with mode: 0644]
lustre/portals/portals/api-eq.c [new file with mode: 0644]
lustre/portals/portals/api-errno.c [new file with mode: 0644]
lustre/portals/portals/api-init.c [new file with mode: 0644]
lustre/portals/portals/api-me.c [new file with mode: 0644]
lustre/portals/portals/api-ni.c [new file with mode: 0644]
lustre/portals/portals/api-wrap.c [new file with mode: 0644]
lustre/portals/portals/lib-dispatch.c [new file with mode: 0644]
lustre/portals/portals/lib-eq.c [new file with mode: 0644]
lustre/portals/portals/lib-init.c [new file with mode: 0644]
lustre/portals/portals/lib-md.c [new file with mode: 0644]
lustre/portals/portals/lib-me.c [new file with mode: 0644]
lustre/portals/portals/lib-move.c [new file with mode: 0644]
lustre/portals/portals/lib-msg.c [new file with mode: 0644]
lustre/portals/portals/lib-ni.c [new file with mode: 0644]
lustre/portals/portals/lib-pid.c [new file with mode: 0644]
lustre/portals/router/.cvsignore [new file with mode: 0644]
lustre/portals/router/Makefile.am [new file with mode: 0644]
lustre/portals/router/Makefile.mk [new file with mode: 0644]
lustre/portals/router/proc.c [new file with mode: 0644]
lustre/portals/router/router.c [new file with mode: 0644]
lustre/portals/router/router.h [new file with mode: 0644]
lustre/portals/tests/.cvsignore [new file with mode: 0644]
lustre/portals/tests/Makefile.am [new file with mode: 0644]
lustre/portals/tests/ping.h [new file with mode: 0644]
lustre/portals/tests/ping_cli.c [new file with mode: 0644]
lustre/portals/tests/ping_srv.c [new file with mode: 0644]
lustre/portals/tests/sping_cli.c [new file with mode: 0644]
lustre/portals/tests/sping_srv.c [new file with mode: 0644]
lustre/portals/tests/startclient.sh [new file with mode: 0755]
lustre/portals/tests/startserver.sh [new file with mode: 0755]
lustre/portals/tests/stopclient.sh [new file with mode: 0755]
lustre/portals/tests/stopserver.sh [new file with mode: 0644]
lustre/portals/unals/.cvsignore [new file with mode: 0644]
lustre/portals/unals/Makefile.am [new file with mode: 0644]
lustre/portals/unals/README [new file with mode: 0644]
lustre/portals/unals/address.c [new file with mode: 0644]
lustre/portals/unals/bridge.h [new file with mode: 0644]
lustre/portals/unals/connection.c [new file with mode: 0644]
lustre/portals/unals/connection.h [new file with mode: 0644]
lustre/portals/unals/debug.c [new file with mode: 0644]
lustre/portals/unals/dispatch.h [new file with mode: 0644]
lustre/portals/unals/ipmap.h [new file with mode: 0644]
lustre/portals/unals/pqtimer.c [new file with mode: 0644]
lustre/portals/unals/pqtimer.h [new file with mode: 0644]
lustre/portals/unals/procapi.c [new file with mode: 0644]
lustre/portals/unals/procbridge.h [new file with mode: 0644]
lustre/portals/unals/proclib.c [new file with mode: 0644]
lustre/portals/unals/select.c [new file with mode: 0644]
lustre/portals/unals/table.c [new file with mode: 0644]
lustre/portals/unals/table.h [new file with mode: 0644]
lustre/portals/unals/tcpnal.c [new file with mode: 0644]
lustre/portals/unals/timer.h [new file with mode: 0644]
lustre/portals/unals/utypes.h [new file with mode: 0644]
lustre/portals/utils/.cvsignore [new file with mode: 0644]
lustre/portals/utils/Makefile.am [new file with mode: 0644]
lustre/portals/utils/acceptor.c [new file with mode: 0644]
lustre/portals/utils/debug.c [new file with mode: 0644]
lustre/portals/utils/debugctl.c [new file with mode: 0644]
lustre/portals/utils/l_ioctl.c [new file with mode: 0644]
lustre/portals/utils/parser.c [new file with mode: 0644]
lustre/portals/utils/parser.h [new file with mode: 0644]
lustre/portals/utils/portals.c [new file with mode: 0644]
lustre/portals/utils/ptlctl.c [new file with mode: 0644]
lustre/portals/utils/routerstat.c [new file with mode: 0644]
lustre/portals/utils/wirecheck.c [new file with mode: 0644]
lustre/ptlbd/blk.c
lustre/ptlbd/client.c
lustre/ptlbd/rpc.c
lustre/ptlbd/server.c
lustre/ptlrpc/Makefile.am
lustre/ptlrpc/client.c
lustre/ptlrpc/connection.c
lustre/ptlrpc/events.c
lustre/ptlrpc/lproc_ptlrpc.c
lustre/ptlrpc/niobuf.c
lustre/ptlrpc/pack_generic.c
lustre/ptlrpc/pinger.c [new file with mode: 0644]
lustre/ptlrpc/ptlrpc_internal.h [new file with mode: 0644]
lustre/ptlrpc/ptlrpc_lib.c [new file with mode: 0644]
lustre/ptlrpc/ptlrpc_module.c [new file with mode: 0644]
lustre/ptlrpc/recovd.c [deleted file]
lustre/ptlrpc/recover.c
lustre/ptlrpc/rpc.c [deleted file]
lustre/ptlrpc/service.c
lustre/scripts/llite-group.sh [new file with mode: 0644]
lustre/scripts/lustre.spec.in
lustre/scripts/version_tag.pl
lustre/tests/.cvsignore
lustre/tests/Makefile.am
lustre/tests/acceptance-small.sh
lustre/tests/ba-echo.sh
lustre/tests/checkstat.c
lustre/tests/cobd.sh
lustre/tests/createtest.c
lustre/tests/directio.c
lustre/tests/echo.sh
lustre/tests/fchdir_test.c [new file with mode: 0644]
lustre/tests/llecho.sh
lustre/tests/llmount.sh
lustre/tests/llmountcleanup.sh
lustre/tests/llrmount.sh
lustre/tests/local.sh
lustre/tests/mcr-routed-config.sh
lustre/tests/mkdirdeep.c [new file with mode: 0644]
lustre/tests/opendevunlink.c [new file with mode: 0644]
lustre/tests/opendirunlink.c [new file with mode: 0644]
lustre/tests/openfile.c [new file with mode: 0644]
lustre/tests/recovery-cleanup.sh
lustre/tests/recovery-small-upcall.sh [new file with mode: 0755]
lustre/tests/recovery-small.sh
lustre/tests/runas.c
lustre/tests/runobdstat [new file with mode: 0644]
lustre/tests/runvmstat
lustre/tests/sanity-ldlm.sh [new file with mode: 0644]
lustre/tests/sanity.sh
lustre/tests/sanityN.sh
lustre/tests/test_brw.c
lustre/tests/uml.sh
lustre/tests/unlinkmany.c [new file with mode: 0644]
lustre/tests/writeme.c
lustre/utils/.cvsignore
lustre/utils/Lustre/.cvsignore [new file with mode: 0644]
lustre/utils/Lustre/Makefile.am [new file with mode: 0644]
lustre/utils/Lustre/__init__.py [new file with mode: 0644]
lustre/utils/Lustre/cmdline.py [new file with mode: 0644]
lustre/utils/Lustre/error.py [new file with mode: 0644]
lustre/utils/Lustre/lustredb.py [new file with mode: 0644]
lustre/utils/Makefile.am
lustre/utils/lactive [new file with mode: 0644]
lustre/utils/lconf [moved from lustre/utils/lconf.in with 60% similarity]
lustre/utils/lctl.c
lustre/utils/llparser.pm [deleted file]
lustre/utils/llstat.pl [new file with mode: 0755]
lustre/utils/lmc
lustre/utils/load_ldap.sh [new file with mode: 0755]
lustre/utils/lstripe.c
lustre/utils/obd.c
lustre/utils/obdctl.c
lustre/utils/obdctl.h
lustre/utils/obdiolib.c
lustre/utils/obdiolib.h
lustre/utils/obdstat.c
lustre/utils/parser.c
lustre/utils/wirecheck.c [new file with mode: 0644]

similarity index 60%
rename from lustre/lib/.cvsignore
rename to lnet/.cvsignore
index e530020..99ac885 100644 (file)
@@ -1,8 +1,8 @@
-.Xrefs
+Kernelenv
+Makefile
+Makefile.in
+aclocal.m4
+autom4te.cache
 config.log
 config.status
 configure
-Makefile
-Makefile.in
-.deps
-TAGS
diff --git a/lnet/AUTHORS b/lnet/AUTHORS
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/lnet/ChangeLog b/lnet/ChangeLog
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/lnet/Kernelenv.in b/lnet/Kernelenv.in
new file mode 100644 (file)
index 0000000..29a713f
--- /dev/null
@@ -0,0 +1 @@
+EXTRA_CFLAGS= -Ifs/lustre/include -Ifs/lustre/portals/include
diff --git a/lnet/Kernelenv.mk b/lnet/Kernelenv.mk
new file mode 100644 (file)
index 0000000..29a713f
--- /dev/null
@@ -0,0 +1 @@
+EXTRA_CFLAGS= -Ifs/lustre/include -Ifs/lustre/portals/include
diff --git a/lnet/Makefile.am b/lnet/Makefile.am
new file mode 100644 (file)
index 0000000..1a223f2
--- /dev/null
@@ -0,0 +1,12 @@
+# Copyright (C) 2001  Cluster File Systems, Inc.
+#
+# This code is issued under the GNU General Public License.
+# See the file COPYING in this distribution
+
+EXTRA_DIST = Rules.linux archdep.m4 include 
+DIST_SUBDIRS = libcfs portals knals unals utils tests doc router
+if LIBLUSTRE
+SUBDIRS = portals unals utils
+else
+SUBDIRS = libcfs portals knals unals utils tests doc router
+endif
diff --git a/lnet/Makefile.mk b/lnet/Makefile.mk
new file mode 100644 (file)
index 0000000..be0e51a
--- /dev/null
@@ -0,0 +1,6 @@
+include fs/lustre/portals/Kernelenv
+
+obj-y += portals/
+obj-y += libcfs/
+obj-y += knals/
+obj-y += router/
diff --git a/lnet/NEWS b/lnet/NEWS
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/lnet/README b/lnet/README
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/lnet/Rules.linux b/lnet/Rules.linux
new file mode 100644 (file)
index 0000000..93943b7
--- /dev/null
@@ -0,0 +1,25 @@
+# included in Linux kernel directories
+# Rules for module building
+
+if LINUX25
+
+basename=$(shell echo $< | sed -e 's/\.c//g' | sed -e 's/-//g' | sed -e 's/\.o//g')
+AM_CPPFLAGS= -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -pipe -mpreferred-stack-boundary=2  -DKBUILD_MODNAME=$(MODULE) -DKBUILD_BASENAME=$(basename)
+
+$(MODULE).o: $($(MODULE)_OBJECTS)
+       $(LD) -m $(MOD_LINK) -r -o $(MODULE).o $($(MODULE)_OBJECTS)
+
+else
+
+$(MODULE).o: $($(MODULE)_OBJECTS)
+       $(LD) -m $(MOD_LINK) -r -o $(MODULE).o $($(MODULE)_OBJECTS)
+
+endif
+
+tags:
+       rm -f $(top_srcdir)/TAGS
+       rm -f $(top_srcdir)/tags
+       find $(top_srcdir)/../portals/ -name '*.[hc]' | xargs etags -a
+       find $(top_srcdir) -name '*.[hc]' | grep -v ".orig" | xargs etags -a
+       find $(top_srcdir)/../portals/ -name '*.[hc]' | xargs ctags -a
+       find $(top_srcdir) -name '*.[hc]' | grep -v ".orig" | xargs ctags -a
diff --git a/lnet/archdep.m4 b/lnet/archdep.m4
new file mode 100644 (file)
index 0000000..7cb00cf
--- /dev/null
@@ -0,0 +1,317 @@
+
+# -------- in kernel compilation? (2.5 only) -------------
+AC_ARG_ENABLE(inkernel, [ --enable-inkernel set up 2.5 kernel makefiles])
+AM_CONDITIONAL(INKERNEL, test x$enable_inkernel = xyes)
+echo "Makefile for in kernel build: $INKERNEL"
+
+# -------- liblustre compilation --------------
+AC_ARG_WITH(lib, [  --with-lib compile lustre library], host_cpu="lib")
+
+# -------- set linuxdir ------------
+
+AC_ARG_WITH(linux, [  --with-linux=[path] set path to Linux source (default=/usr/src/linux)],LINUX=$with_linux,LINUX=/usr/src/linux)
+AC_SUBST(LINUX)
+
+# --------- UML?  --------------------
+AC_MSG_CHECKING(if you are running user mode linux for $host_cpu ...)
+if test $host_cpu = "lib" ; then 
+        host_cpu="lib"
+       AC_MSG_RESULT(no building Lustre library)
+else
+  if test -e $LINUX/include/asm-um ; then
+    if test  X`ls -id $LINUX/include/asm/ | awk '{print $1}'` = X`ls -id $LINUX/include/asm-um | awk '{print $1}'` ; then
+       host_cpu="um";
+       AC_MSG_RESULT(yes)
+    else
+       AC_MSG_RESULT(no (asm doesn't point at asm-um))
+    fi
+
+  else 
+        AC_MSG_RESULT(no (asm-um missing))
+  fi
+fi
+
+# --------- Linux 25 ------------------
+
+AC_MSG_CHECKING(if you are running linux 2.5)
+if test -e $LINUX/include/linux/namei.h ; then
+        linux25="yes"
+        AC_MSG_RESULT(yes)
+else
+        linux25="no"
+        AC_MSG_RESULT(no)
+fi
+AM_CONDITIONAL(LINUX25, test x$linux25 = xyes)
+echo "Makefiles for in linux 2.5 build: $LINUX25"
+
+# -------  Makeflags ------------------
+
+AC_MSG_CHECKING(setting make flags system architecture: )
+case ${host_cpu} in
+       lib )
+       AC_MSG_RESULT($host_cpu)
+       KCFLAGS='-g -Wall '
+       KCPPFLAGS='-D__arch_lib__ '
+       libdir='${exec_prefix}/lib/lustre'
+        MOD_LINK=elf_i386
+;;
+       um )
+       AC_MSG_RESULT($host_cpu)
+       KCFLAGS='-g -Wall -pipe -Wno-trigraphs -Wstrict-prototypes -fno-strict-aliasing -fno-common '
+        case ${linux25} in
+                yes )
+                KCPPFLAGS='-D__KERNEL__ -U__i386__ -Ui386 -DUM_FASTCALL -D__arch_um__ -DSUBARCH="i386" -DNESTING=0 -D_LARGEFILE64_SOURCE  -Derrno=kernel_errno -DPATCHLEVEL=4 -DMODULE -I$(LINUX)/arch/um/include -I$(LINUX)/arch/um/kernel/tt/include -I$(LINUX)/arch/um/kernel/skas/include -O2 -nostdinc -iwithprefix include -DKBUILD_BASENAME=$(MODULE) -DKBUILD_MODNAME=$(MODULE) '
+        ;;
+                * )
+                KCPPFLAGS='-D__KERNEL__ -U__i386__ -Ui386 -DUM_FASTCALL -D__arch_um__ -DSUBARCH="i386" -DNESTING=0 -D_LARGEFILE64_SOURCE  -Derrno=kernel_errno -DPATCHLEVEL=4 -DMODULE -I$(LINUX)/arch/um/kernel/tt/include -I$(LINUX)/arch/um/include '
+        ;;
+        esac
+
+        MOD_LINK=elf_i386
+;;
+       i*86 )
+       AC_MSG_RESULT($host_cpu)
+        KCFLAGS='-g -O2 -Wall -Wstrict-prototypes -pipe'
+        case ${linux25} in
+                yes )
+                KCPPFLAGS='-D__KERNEL__ -DMODULE -march=i686 -I$(LINUX)/include/asm-i386/mach-default -nostdinc -iwithprefix include '
+        ;;
+                * )
+                KCPPFLAGS='-D__KERNEL__ -DMODULE '
+        ;;
+        esac
+        MOD_LINK=elf_i386
+;;
+
+       alphaev6 )
+       AC_MSG_RESULT($host_cpu)
+        KCFLAGS='-g -O2  -Wall -Wstrict-prototypes -Wno-trigraphs -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mno-fp-regs -ffixed-8 -mcpu=ev5 -Wa,-mev6'
+        KCPPFLAGS='-D__KERNEL__ -DMODULE '
+        MOD_LINK=elf64alpha
+;;
+
+       alphaev67 )
+       AC_MSG_RESULT($host_cpu)
+        KCFLAGS='-g -O2  -Wall -Wstrict-prototypes -Wno-trigraphs -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mno-fp-regs -ffixed-8 -mcpu=ev5 -Wa,-mev6'
+        KCPPFLAGS='-D__KERNEL__ -DMODULE '
+        MOD_LINK=elf64alpha
+;;
+
+       alpha* )
+       AC_MSG_RESULT($host_cpu)
+        KCFLAGS='-g -O2  -Wall -Wstrict-prototypes -Wno-trigraphs -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mno-fp-regs -ffixed-8 -mcpu=ev5 -Wa,-mev5'
+        KCPPFLAGS='-D__KERNEL__ -DMODULE '
+        MOD_LINK=elf64alpha
+;;
+
+       ia64 )
+       AC_MSG_RESULT($host_cpu)
+        KCFLAGS='-gstabs -O2 -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -pipe -ffixed-r13 -mfixed-range=f10-f15,f32-f127 -falign-functions=32 -mb-step'
+       KCPPFLAGS='-D__KERNEL__ -DMODULE'
+        MOD_LINK=elf64_ia64
+;;
+
+       sparc64 )
+       AC_MSG_RESULT($host_cpu)
+        KCFLAGS='-O2 -Wall -Wstrict-prototypes -Wno-trigraphs -fomit-frame-pointer -fno-strict-aliasing -fno-common -Wno-unused -m64 -pipe -mno-fpu -mcpu=ultrasparc -mcmodel=medlow -ffixed-g4 -fcall-used-g5 -fcall-used-g7 -Wno-sign-compare -Wa,--undeclared-regs'
+        KCPPFLAGS='-D__KERNEL__'
+        MOD_LINK=elf64_sparc
+
+;;
+
+       powerpc )
+       AC_MSG_RESULT($host_cpu)
+        KCFLAGS='-O2 -Wall -Wstrict-prototypes -Wno-trigraphs -fomit-frame-pointer -fno-strict-aliasing -fno-common -D__powerpc__ -fsigned-char -msoft-float -pipe -ffixed-r2 -Wno-uninitialized -mmultiple -mstring'
+        KCPPFLAGS='-D__KERNEL__'
+        MOD_LINK=elf32ppclinux
+;;
+
+        *)
+       AC_ERROR("Unknown Linux Platform: $host_cpu")
+;;
+esac
+
+# ----------- make dep run? ------------------
+
+if test $host_cpu != "lib" ; then 
+  AC_MSG_CHECKING(if make dep has been run in kernel source (host $host_cpu) )
+  if test -f $LINUX/include/linux/config.h ; then
+  AC_MSG_RESULT(yes)
+ else
+  AC_MSG_ERROR(** cannot find $LINUX/include/linux/config.h. Run make dep in $LINUX.)
+  fi
+fi
+
+# ------------ include paths ------------------
+
+if test $host_cpu != "lib" ; then 
+    KINCFLAGS="-I\$(top_srcdir)/include -I\$(top_srcdir)/portals/include -I$LINUX/include"
+else
+    KINCFLAGS='-I$(top_srcdir)/include -I$(top_srcdir)/portals/include'
+fi
+CPPFLAGS="$KINCFLAGS $ARCHCPPFLAGS"
+
+if test $host_cpu != "lib" ; then 
+# ------------ autoconf.h ------------------
+  AC_MSG_CHECKING(if autoconf.h is in kernel source)
+  if test -f $LINUX/include/linux/autoconf.h ; then
+      AC_MSG_RESULT(yes)
+  else
+      AC_MSG_ERROR(** cannot find $LINUX/include/linux/autoconf.h. Run make config in $LINUX.)
+  fi
+
+# ------------ RELEASE and moduledir ------------------
+  AC_MSG_CHECKING(for Linux release)
+  
+  dnl We need to rid ourselves of the nasty [ ] quotes.
+  changequote(, )
+  dnl Get release from version.h
+  RELEASE="`sed -ne 's/.*UTS_RELEASE[ \"]*\([0-9.a-zA-Z_-]*\).*/\1/p' $LINUX/include/linux/version.h`"
+  changequote([, ])
+  
+  moduledir='$(libdir)/modules/'$RELEASE/kernel
+  AC_SUBST(moduledir)
+  
+  modulefsdir='$(moduledir)/fs/$(PACKAGE)'
+  AC_SUBST(modulefsdir)
+  
+  AC_MSG_RESULT($RELEASE)
+  AC_SUBST(RELEASE)
+
+# ---------- modversions? --------------------
+  AC_MSG_CHECKING(for MODVERSIONS)
+  if egrep -e 'MODVERSIONS.*1' $LINUX/include/linux/autoconf.h >/dev/null 2>&1;
+  then
+        MFLAGS="-DMODULE -DMODVERSIONS -include $LINUX/include/linux/modversions.h -DEXPORT_SYMTAB"
+        AC_MSG_RESULT(yes)
+  else
+        MFLAGS=
+        AC_MSG_RESULT(no)
+  fi
+fi
+
+# ---------- Portals flags --------------------
+
+#AC_PREFIX_DEFAULT([])
+#if test "x$prefix" = xNONE || test "x$prefix" = x; then
+#  usrprefix=/usr
+#else
+#  usrprefix='${prefix}'
+#fi
+#AC_SUBST(usrprefix)
+
+AC_MSG_CHECKING(if kernel has CPU affinity support)
+if test "$target_cpu" != ia64 ; then
+  enable_affinity_temp="-DCPU_AFFINITY=1"
+  AC_MSG_RESULT(yes)
+else
+  enable_affinity_temp=""
+  AC_MSG_RESULT(no)
+fi
+
+AC_MSG_CHECKING(if kernel has zero-copy TCP support)
+ZCCD="`grep -c zccd $LINUX/include/linux/skbuff.h`"
+if test "$ZCCD" != 0 ; then
+  enable_zerocopy_temp="-DSOCKNAL_ZC=1"
+  AC_MSG_RESULT(yes)
+else
+  enable_zerocopy_temp=""
+  AC_MSG_RESULT(no)
+fi
+
+AC_ARG_ENABLE(zerocopy, [  --enable-zerocopy enable socknal zerocopy],enable_zerocopy=$enable_zerocopy_temp, enable_zerocopy="")
+
+AC_ARG_ENABLE(affinity, [  --enable-affinity enable process/irq affinity],enable_affinity="-DCPU_AFFINITY=1", enable_affinity=$enable_affinity_temp)
+#####################################
+
+AC_MSG_CHECKING(if quadrics kernel headers are present)
+if test -d $LINUX/drivers/net/qsnet ; then
+  AC_MSG_RESULT(yes)
+  QSWNAL="qswnal"
+  with_quadrics="-I$LINUX/drivers/net/qsnet/include"
+  :
+elif test -d $LINUX/drivers/qsnet1 ; then
+  AC_MSG_RESULT(yes)
+  QSWNAL="qswnal"
+  with_quadrics="-I$LINUX/drivers/qsnet1/include -DPROPRIETARY_ELAN"
+  :
+elif test -d $LINUX/drivers/quadrics ; then
+  AC_MSG_RESULT(yes)
+  QSWNAL="qswnal"
+  with_quadrics="-I$LINUX/drivers/quadrics/include -DPROPRIETARY_ELAN"
+  :
+#elif test -d /usr/include/elan3 ; then
+#  AC_MSG_RESULT(yes)
+#  QSWNAL="qswnal"
+#  with_quadrics=""
+#  :
+else
+  AC_MSG_RESULT(no)
+  QSWNAL=""
+  with_quadrics=""
+  :
+fi
+AC_SUBST(with_quadrics)
+AC_SUBST(QSWNAL)
+
+# R. Read 5/02
+GMNAL=""
+echo "checking with-gm=" ${with_gm}
+if test "${with_gm+set}" = set; then
+  if test "${with_gm}" = yes; then
+    with_gm="-I/usr/local/gm/include"
+  else
+    with_gm=-I"$with_gm/include"
+  fi
+  GMNAL="gmnal"
+else
+# default case - no GM
+  with_gm=""
+fi
+AC_SUBST(with_gm)
+AC_SUBST(GMNAL)
+
+
+def_scamac=/opt/scali/include
+AC_ARG_WITH(scamac, [  --with-scamac=[yes/no/path] Path to ScaMAC includes (default=/opt/scali/include)], with_scamac=$withval, with_scamac=$def_scamac)
+AC_MSG_CHECKING(if ScaMAC headers are present)
+if test "$with_scamac" = yes; then
+  with_scamac=$def_scamac
+fi
+if test "$with_scamac" != no -a -f ${with_scamac}/scamac.h; then
+  AC_MSG_RESULT(yes)
+  SCIMACNAL="scimacnal"
+  with_scamac="-I${with_scamac} -I${with_scamac}/icm"
+else
+  AC_MSG_RESULT(no)
+  SCIMACNAL=""
+  with_scamac=""
+fi
+
+AC_SUBST(with_scamac)
+AC_SUBST(SCIMACNAL)
+
+CFLAGS="$KCFLAGS"
+CPPFLAGS="$KINCFLAGS $KCPPFLAGS $MFLAGS $enable_zerocopy $enable_affinity $with_quadrics $with_gm $with_scamac "
+
+AC_SUBST(MOD_LINK)
+AC_SUBST(LINUX25)
+AM_CONDITIONAL(LIBLUSTRE, test x$host_cpu = xlib)
+
+# ---------- Red Hat 2.4.20 backports some 2.5 bits --------
+# This needs to run after we've defined the KCPPFLAGS
+
+AC_MSG_CHECKING(for kernel version)
+AC_TRY_LINK([#define __KERNEL__
+             #include <linux/sched.h>],
+            [struct task_struct p;
+             p.sighand = NULL;],
+            [RH_2_4_20=1],
+            [RH_2_4_20=0])
+
+if test $RH_2_4_20 = 1; then
+       AC_MSG_RESULT(redhat-2.4.20)
+       CPPFLAGS="$CPPFLAGS -DCONFIG_RH_2_4_20"
+else
+       AC_MSG_RESULT($RELEASE)
+fi 
diff --git a/lnet/autogen.sh b/lnet/autogen.sh
new file mode 100644 (file)
index 0000000..9deed73
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+aclocal &&
+automake --add-missing &&
+${AUTOCONF:-autoconf}
diff --git a/lnet/build.m4 b/lnet/build.m4
new file mode 100644 (file)
index 0000000..025f243
--- /dev/null
@@ -0,0 +1,95 @@
+# ----------  other tests and settings ---------
+
+
+# ---------  unsigned long long sane? -------
+
+AC_CHECK_SIZEOF(unsigned long long, 0)
+echo "---> size SIZEOF $SIZEOF_unsigned_long_long"
+echo "---> size SIZEOF $ac_cv_sizeof_unsigned_long_long"
+if test $ac_cv_sizeof_unsigned_long_long != 8 ; then
+        AC_MSG_ERROR([** we assume that sizeof(long long) == 8.  Tell phil@clusterfs.com])
+fi
+
+# directories for binaries
+ac_default_prefix=
+bindir='${exec_prefix}/usr/bin'
+sbindir='${exec_prefix}/usr/sbin'
+includedir='${prefix}/usr/include'
+
+# Directories for documentation and demos.
+docdir='${prefix}/usr/share/doc/$(PACKAGE)'
+AC_SUBST(docdir)
+demodir='$(docdir)/demo'
+AC_SUBST(demodir)
+pkgexampledir='${prefix}/usr/lib/$(PACKAGE)/examples'
+AC_SUBST(pkgexampledir)
+pymoddir='${prefix}/usr/lib/${PACKAGE}/python/Lustre'
+AC_SUBST(pymoddir)
+modulenetdir='$(moduledir)/net/$(PACKAGE)'
+AC_SUBST(modulenetdir)
+
+
+# ----------  BAD gcc? ------------
+AC_PROG_RANLIB
+AC_PROG_CC
+AC_MSG_CHECKING(for buggy compiler)
+CC_VERSION=`$CC -v 2>&1 | grep "^gcc version"`
+bad_cc() {
+       echo
+       echo "   '$CC_VERSION'"
+       echo "  has been known to generate bad code, "
+       echo "  please get an updated compiler."
+       AC_MSG_ERROR(sorry)
+}
+TMP_VERSION=`echo $CC_VERSION | cut -c 1-16`
+if test "$TMP_VERSION" = "gcc version 2.95"; then
+        bad_cc
+fi
+case "$CC_VERSION" in 
+       # ost_pack_niobuf putting 64bit NTOH temporaries on the stack
+       # without "sub    $0xc,%esp" to protect the stack from being
+       # stomped on by interrupts (bug 606)
+       "gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-98)")
+               bad_cc
+               ;;
+       # mandrake's similar sub 0xc compiler bug
+       # http://marc.theaimsgroup.com/?l=linux-kernel&m=104748366226348&w=2
+       "gcc version 2.96 20000731 (Mandrake Linux 8.1 2.96-0.62mdk)")
+               bad_cc
+               ;;
+       *)
+               AC_MSG_RESULT(no known problems)
+               ;;
+esac
+# end ------  BAD gcc? ------------
+
+# --------  Check for required packages  --------------
+
+# this doesn't seem to work on older autoconf
+# AC_CHECK_LIB(readline, readline,,)
+AC_ARG_ENABLE(readline,        [  --enable-readline  use readline library],,
+                       enable_readline="yes")
+if test "$enable_readline" = "yes" ; then
+   LIBREADLINE="-lreadline -lncurses"
+   HAVE_LIBREADLINE="-DHAVE_LIBREADLINE=1"
+else 
+   LIBREADLINE=""
+   HAVE_LIBREADLINE=""
+fi
+AC_SUBST(LIBREADLINE)
+AC_SUBST(HAVE_LIBREADLINE)
+
+AC_ARG_ENABLE(efence,  [  --enable-efence  use efence library],,
+                       enable_efence="no")
+if test "$enable_efence" = "yes" ; then
+   LIBEFENCE="-lefence"
+   HAVE_LIBEFENCE="-DHAVE_LIBEFENCE=1"
+else 
+   LIBEFENCE=""
+   HAVE_LIBEFENCE=""
+fi
+AC_SUBST(LIBEFENCE)
+AC_SUBST(HAVE_LIBEFENCE)
+
diff --git a/lnet/configure.in b/lnet/configure.in
new file mode 100644 (file)
index 0000000..31d3492
--- /dev/null
@@ -0,0 +1,34 @@
+# This version is here to make autoconf happy; the name is a file which is
+# "unique" to this directory so that configure knows where it should run.
+AC_INIT(knals/Makefile.am, 3.0)
+AC_CANONICAL_SYSTEM
+# Copyright (C) 2001  Cluster File Systems, Inc.
+#
+# This code is issued under the GNU General Public License.
+# See the file COPYING in this distribution
+
+# Automake variables.  Steal the version number from packaging/intersync.spec
+AM_INIT_AUTOMAKE(portals, builtin([esyscmd], [sed -ne '/.*define IVERSION /{ s/.*IVERSION //; p; }' libcfs/module.c]))
+# AM_MAINTAINER_MODE
+
+sinclude(build.m4)
+sinclude(archdep.m4)
+
+if test x$enable_inkernel = xyes ; then
+cp Kernelenv.mk Kernelenv.in
+cp Makefile.mk Makefile.in
+cp libcfs/Makefile.mk libcfs/Makefile.in
+cp portals/Makefile.mk portals/Makefile.in
+cp knals/Makefile.mk knals/Makefile.in
+cp knals/socknal/Makefile.mk knals/socknal/Makefile.in
+cp router/Makefile.mk router/Makefile.in
+fi
+
+AM_CONFIG_HEADER(include/config.h)
+
+AC_OUTPUT([Makefile Kernelenv libcfs/Makefile portals/Makefile \
+          unals/Makefile knals/Makefile router/Makefile \
+         knals/socknal/Makefile knals/gmnal/Makefile knals/qswnal/Makefile \
+         knals/scimacnal/Makefile knals/toenal/Makefile \
+          utils/Makefile tests/Makefile doc/Makefile ])
+
diff --git a/lnet/doc/.cvsignore b/lnet/doc/.cvsignore
new file mode 100644 (file)
index 0000000..827dca4
--- /dev/null
@@ -0,0 +1,4 @@
+Makefile
+Makefile.in
+*.eps
+*.pdf
diff --git a/lnet/doc/Data-structures b/lnet/doc/Data-structures
new file mode 100644 (file)
index 0000000..b5532b1
--- /dev/null
@@ -0,0 +1,65 @@
+In this document I will try to draw the data structures and how they
+interrelate in the Portals 3 reference implementation.  It is probably
+best shown with a drawing, so there may be an additional xfig or
+Postscript figure.
+
+
+MEMORY POOLS:
+------------
+
+First, a digression on memory allocation in the library.  As mentioned
+in the NAL Writer's Guide, the library does not link against any
+standard C libraries and as such is unable to dynamically allocate
+memory on its own.  It requires that the NAL implement a method
+for allocation that is appropriate for the protection domain in
+which the library lives.  This is only called when a network
+interface is initialized to allocate the Portals object pools.
+
+These pools are preallocate blocks of objects that the library
+can rapidly make active and manage with a minimum of overhead.
+It is also cuts down on overhead for setting up structures
+since the NAL->malloc() callback does not need to be called
+for each object.
+
+The objects are maintained on a per-object type singly linked free
+list and contain a pointer to the next free object.  This pointer
+is NULL if the object is not on the free list and is non-zero
+if it is on the list.  The special sentinal value of 0xDEADBEEF
+is used to mark the end of the free list since NULL could
+indicate that the last object in the list is not free.
+
+When one of the lib_*_alloc() functions is called, the library
+returns the head of the free list and advances the head pointer
+to the next item on the list.  The special case of 0xDEADBEEF is
+checked and a NULL pointer is returned if there are no more
+objects of this type available.   The lib_*_free() functions
+are even simpler -- check to ensure that the object is not already
+free, set its next pointer to the current head and then set
+the head to be this newly freed object.
+
+Since C does not have templates, I did the next best thing and wrote
+the memory pool allocation code as a macro that expands based on the
+type of the argument.  The mk_alloc(T) macro expands to
+write the _lib_T_alloc() and lib_T_free() functions.
+It requires that the object have a pointer of the type T named
+"next_free".  There are also functions that map _lib_T_alloc()
+to lib_T_alloc() so that the library can add some extra
+functionality to the T constructor.
+
+
+
+LINKED LISTS:
+------------
+
+Many of the active Portals objects are stored in doubly linked lists
+when they are active.  These are always implemented with the pointer
+to the next object and a pointer to the next pointer of the
+previous object.  This avoids the "dummy head" object or
+special cases for inserting at the beginning or end of the list.
+The pointer manipulations are a little hairy at times, but
+I hope that they are understandable.
+
+The actual linked list code is implemented as macros in <lib-p30.h>,
+although the object has to know about 
+
+
diff --git a/lnet/doc/Makefile.am b/lnet/doc/Makefile.am
new file mode 100644 (file)
index 0000000..7c65e6c
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright (C) 2001  Cluster File Systems, Inc.
+#
+# This code is issued under the GNU General Public License.
+# See the file COPYING in this distribution
+
+LYX2PDF = lyx --export pdf
+LYX2TXT = lyx --export text
+LYX2HTML = lyx --export html
+SUFFIXES = .lin .lyx .pdf .sgml .html .txt .fig .eps
+
+DOCS = portals3.pdf 
+IMAGES = file.eps flow_new.eps get.eps mpi.eps portals.eps put.eps
+LYXFILES= portals3.lyx
+
+MAINTAINERCLEANFILES =  $(IMAGES) $(DOCS) $(GENERATED)
+GENERATED = 
+EXTRA_DIST = $(DOCS) $(IMAGES) $(LYXFILES) 
+
+all: $(DOCS)
+
+# update date and version in document
+date := $(shell date +%x)
+tag := $(shell echo '$$Name:  $$' | sed -e 's/^\$$Na''me: *\$$$$/HEAD/; s/^\$$Na''me: \(.*\) \$$$$/\1/')
+addversion = sed -e 's|@T''AG@|$(tag)|g; s|@VER''SION@|$(VERSION)|g; s|@DA''TE@|$(date)|g'
+
+# Regenerate when the $(VERSION) or $Name:  $ changes.
+.INTERMEDIATE: $(GENERATED)
+$(GENERATED) : %.lyx: %.lin Makefile
+       $(addversion) $< > $@
+
+.lyx.pdf:
+       @$(LYX2PDF) $< || printf "\n*** Warning: not creating PDF docs; install lyx to rectify this\n"
+
+.lyx.txt:
+       @$(LYX2TXT) $< || printf "\n*** Warning: not creating text docs; install lyx to rectify this\n"
+.lyx.html:
+       @$(LYX2HTML) $< || printf "\n*** Warning: not creating HTML docs; install lyx to rectify this\n"
+.fig.eps:
+       -fig2dev -L eps $< > $@
+
+portals3.pdf portals3.txt portals3.html: $(IMAGES) portals3.lyx
+
+syncweb: portals3.pdf
+#      cp lustre.pdf /usr/src/www/content/lustre/docs/lustre.pdf
+#      ( cd /usr/src/www ; make lustre ; make synclustre )
+
diff --git a/lnet/doc/Message-life-cycle b/lnet/doc/Message-life-cycle
new file mode 100644 (file)
index 0000000..e8cc7e2
--- /dev/null
@@ -0,0 +1,118 @@
+This documents the life cycle of message as it arrives and is handled by
+a basic async, packetized NAL.  There are four types of messages that have
+slightly different life cycles, so they are addressed independently.
+
+
+Put request
+-----------
+
+1.  NAL notices that there is a incoming message header on the network
+and reads an ptl_hdr_t in from the wire.
+
+2.  It may store additional NAL specific data that provides context
+for this event in a void* that it will interpret in some fashion
+later.
+
+3.  The NAL calls lib_parse() with a pointer to the header and its
+private data structure.
+
+4.  The library decodes the header and may build a message state
+object that describes the event to be written and the ACK to be
+sent, if any.  It then calls nal->recv() with the private data
+that the NAL passed in, a pointer to the message state object
+and a translated user address.
+
+       The NAL will have been given a chance to pretranslate
+       all user addresses when the buffers are created.  This
+       process is described in the NAL-HOWTO.
+
+5.  The NAL should restore what ever context it required from the
+private data pointer, begin receiving the bytes and possibly store
+some extra state of its own.  It should return at this point.
+
+
+
+Get request
+-----------
+
+1.  As with a Put, the NAL notices the incoming message header and
+passes it to lib_parse().
+
+2.  The library decodes the header and calls nal->recv() with a
+zero byte length, offset and destination to instruct it to clean
+up the wire after reading the header.  The private data will
+be passed in as well, allowing the NAL to retrieve any state
+or context that it requires.
+
+3.  The library may build a message state object to possibly
+write an event log or invalidate a memory region.
+
+4.  The library will build a ptl_msg_t header that specifies the
+Portals protocol information for delivery at the remote end.
+
+5.  The library calls nal->send() with the pre-built header,
+the optional message state object, the four part address
+component, a translated user pointer + offset, and some
+other things.
+
+6.  The NAL is to put the header on the wire or copy it at
+this point (since it off the stack).  It should store some
+amount of state about its current position in the message and
+the destination address.
+
+7.  And then return to the library.
+
+
+Reply request
+-------------
+
+1.  Starting at "The library decodes the header..."
+
+2.  The library decodes the header and calls nal->recv()
+to bring in the rest of the message.  Flow continues in
+exactly the same fashion as with all other receives.
+
+
+Ack request
+-----------
+
+1.  The library decodes the header, builds the appropriate data
+structures for the event in a message state object and calls nal->recv()
+with a zero byte length, etc.
+
+
+Packet arrival
+--------------
+
+1.  The NAL should notice the arrival of a packet, retrieve whatever
+state it needs from the message ID or other NAL specific header data
+and place the data bytes directly into the user address that were
+given to nal->recv().
+
+       How this happens is outside the scope of the Portals library
+       and soley determined by the NAL...
+
+2.  If this is the last packet in a message, the NAL should retrieve
+the lib_msg_t *cookie that it was given in the call to nal->recv()
+and pass it to lib_finalize().  lib_finalize() may call nal->send()
+to send an ACK, nal->write() to record an entry in the event log,
+nal->invalidate() to unregister a region of memory or do nothing at all.
+
+3.  It should then clean up any remaining NAL specific state about
+the message and go back into the main loop.
+
+
+Outgoing packets
+----------------
+
+1.  When the NAL has pending output, it should put the packets on
+the wire wrapped with whatever implementation specified wrappers.
+
+2.  Once it has output all the packets of a message it should
+call lib_finalize() with the message state object that was
+handed to nal->send().  This will allows the library to clean
+up its state regarding the message and write any pending event
+entries.
+
+
+
diff --git a/lnet/doc/NAL-HOWTO b/lnet/doc/NAL-HOWTO
new file mode 100644 (file)
index 0000000..ea38aed
--- /dev/null
@@ -0,0 +1,293 @@
+This document is a first attempt at describing how to write a NAL
+for the Portals 3 library.  It also defines the library architecture
+and the abstraction of protection domains.
+
+
+First, an overview of the architecture:
+
+    Application
+
+----|----+--------
+         |
+   API  === NAL        (User space)
+         |   
+---------+---|-----
+         |    
+   LIB  === NAL        (Library space)
+         |
+---------+---|-----
+          
+    Physical wire      (NIC space)
+          
+
+Application
+    API
+API-side NAL
+------------
+LIB-side NAL
+    LIB
+LIB-side NAL
+   wire
+
+Communication is through the indicated paths via well defined
+interfaces.  The API and LIB portions are written to be portable
+across platforms and do not depend on the network interface.
+
+Communcation between the application and the API code is
+defined in the Portals 3 API specification.  This is the
+user-visible portion of the interface and should be the most
+stable.
+
+
+
+API-side NAL:
+------------
+
+The user space NAL needs to implement only a few functions
+that are stored in a nal_t data structure and called by the
+API-side library:
+
+       int forward( nal_t *nal,
+               int     index,
+               void    *args,
+               size_t  arg_len,
+               void    *ret,
+               size_t  ret_len
+       );
+
+Most of the data structures in the portals library are held in
+the LIB section of the code, so it is necessary to forward API
+calls across the protection domain to the library.  This is
+handled by the NAL's forward method.  Once the argument and return
+blocks are on the remote side the NAL should call lib_dispatch()
+to invoke the appropriate API function.
+
+       int validate( nal_t *nal,
+               void    *base,
+               size_t  extent,
+               void    **trans_base,
+               void    **trans_data
+       );
+
+The validate method provides a means for the NAL to prevalidate
+and possibly pretranslate user addresses into a form suitable
+for fast use by the network card or kernel module.  The trans_base
+pointer will be used by the library everytime it needs to
+refer to the block of memory.  The trans_data result is a
+cookie that will be handed to the NAL along with the trans_base.
+
+The library never performs calculations on the trans_base value;
+it only computes offsets that are then handed to the NAL.
+
+
+       int shutdown( nal_t *nal, int interface );
+
+Brings down the network interface.  The remote NAL side should
+call lib_fini() to bring down the library side of the network.
+
+       void yield( nal_t *nal );
+
+This allows the user application to gracefully give up the processor
+while busy waiting.  Performance critical applications may not
+want to take the time to call this function, so it should be an
+option to the PtlEQWait call.  Right now it is not implemented as such.
+
+Lastly, the NAL must implement a function named PTL_IFACE_*, where
+* is the name of the NAL such as PTL_IFACE_IP or PTL_IFACE_MYR.
+This initialization function is to set up communication with the
+library-side NAL, which should call lib_init() to bring up the
+network interface.
+
+
+
+LIB-side NAL:
+------------
+
+On the library-side, the NAL has much more responsibility.  It
+is responsible for calling lib_dispatch() on behalf of the user,
+it is also responsible for bringing packets off the wire and
+pushing bits out.  As on the user side, the methods are stored
+in a nal_cb_t structure that is defined on a per network
+interface basis.
+
+The calls to lib_dispatch() need to be examined.  The prototype:
+
+       void    lib_dispatch(
+                       nal_cb_t                *nal,
+                       void                    *private,
+                       int                     index,
+                       void                    *arg_block,
+                       void                    *ret_block
+       );
+
+has two complications.  The private field is a NAL-specific
+value that will be passed to any callbacks produced as a result
+of this API call.  Kernel module implementations may use this
+for task structures, or perhaps network card data.  It is ignored
+by the library.
+
+Secondly, the arg_block and ret_block must be in the same protection
+domain as the library.  The NAL's two halves must communicate the
+sizes and perform the copies.  After the call, the buffer pointed
+to by ret_block will be filled in and should be copied back to
+the user space.  How this is to be done is NAL specific.
+
+       int lib_parse(
+                       nal_cb_t                *nal,
+                       ptl_hdr_t               *hdr,
+                       void                    *private
+       );
+
+This is the only other entry point into the library from the NAL.
+When the NAL detects an incoming message on the wire it should read
+sizeof(ptl_hdr_t) bytes and pass a pointer to the header to
+lib_parse().  It may set private to be anything that it needs to
+tie the incoming message to callbacks that are made as a result
+of this event.
+
+The method calls are:
+
+       int     (*send)(
+                       nal_cb_t                *nal,
+                       void                    *private,
+                       lib_msg_t               *cookie,
+                       ptl_hdr_t               *hdr,
+                       int                     nid,
+                       int                     pid,
+                       int                     gid,
+                       int                     rid,
+                       user_ptr                trans_base,
+                       user_ptr                trans_data,
+                       size_t                  offset,
+                       size_t                  len
+       );
+
+This is a tricky function -- it must support async output
+of messages as well as properly syncronized event log writing.
+The private field is the same that was passed into lib_dispatch()
+or lib_parse() and may be used to tie this call to the event
+that initiated the entry to the library.
+
+The cookie is a pointer to a library private value that must
+be passed to lib_finalize() once the message has been completely
+sent.  It should not be examined by the NAL for any meaning.
+
+The four ID fields are passed in, although some implementations
+may not use all of them.
+
+The single base pointer has been replaced with the translated
+address that the API NAL generated in the api_nal->validate()
+call.  The trans_data is unchanged and the offset is in bytes.
+
+
+       int     (*recv)(
+                       nal_cb_t                *nal,
+                       void                    *private,
+                       lib_msg_t               *cookie,
+                       user_ptr                trans_base,
+                       user_ptr                trans_data,
+                       size_t                  offset,
+                       size_t                  mlen,
+                       size_t                  rlen
+       );
+
+This callback will only be called in response to lib_parse().
+The cookie, trans_addr and trans_data  are as discussed in send().
+The NAL should read mlen bytes from the wire, deposit them into
+trans_base + offset and then discard (rlen - mlen) bytes.
+Once the entire message has been received the NAL should call
+lib_finalize() with the lib_msg_t *cookie.
+
+The special arguments of base=NULL, data=NULL, offset=0, mlen=0, rlen=0
+is used to indicate that the NAL should clean up the wire.  This could
+be implemented as a blocking call, although having it return as quickly
+as possible is desirable.
+
+       int     (*write)(
+                       nal_cb_t                *nal,
+                       void                    *private,
+                       user_ptr                trans_addr,
+                       user_ptr                trans_data,
+                       size_t                  offset,
+
+                       void                    *src_addr,
+                       size_t                  len
+       );
+
+This is essentially a cross-protection domain memcpy().  The user address
+has been pretranslated by the api_nal->translate() call.
+
+       void    *(*malloc)(
+                       nal_cb_t                *nal,
+                       size_t                  len
+       );
+
+       void    (*free)(
+                       nal_cb_t                *nal,
+                       void                    *buf
+       );
+
+Since the NAL may be in a non-standard hosted environment it can
+not call malloc().  This allows the library side NAL to implement
+the system specific malloc().  In the current reference implementation
+the libary only calls nal->malloc() when the network interface is
+initialized and then calls free when it is brought down.  The library
+maintains its own pool of objects for allocation so only one call to
+malloc is made per object type.
+
+       void    (*invalidate)(
+                       nal_cb_t                *nal,
+                       user_ptr                trans_base,
+                       user_ptr                trans_data,
+                       size_t                  extent
+       );
+
+User addresses are validated/translated at the user-level API NAL
+method, which is likely to push them to this level.  Meanwhile,
+the library NAL will be notified when the library no longer
+needs the buffer.  Overlapped buffers are not detected by the
+library, so the NAL should ref count each page involved.
+
+Unfortunately we have a few bugs when the invalidate method is
+called.  It is still in progress...
+
+       void    (*printf)(
+                       nal_cb_t                *nal,
+                       const char              *fmt,
+                       ...
+       );
+
+As with malloc(), the library does not have any way to do printf
+or printk.  It is not necessary for the NAL to implement the this
+call, although it will make debugging difficult.
+
+       void    (*cli)(
+                       nal_cb_t                *nal,
+                       unsigned long           *flags
+       );
+
+       void    (*sti)(
+                       nal_cb_t                *nal,
+                       unsigned long           *flags
+       );
+
+These are used by the library to mark critical sections.
+
+       int     (*gidrid2nidpid)(
+                       nal_cb_t                *nal,
+                       ptl_id_t                gid,
+                       ptl_id_t                rid,
+                       ptl_id_t                *nid,
+                       ptl_id_t                *pid
+       );
+
+
+       int     (*nidpid2gidrid)(
+                       nal_cb_t                *nal,
+                       ptl_id_t                nid,
+                       ptl_id_t                pid,
+                       ptl_id_t                *gid,
+                       ptl_id_t                *rid
+       );
+
+Rolf added these.  I haven't looked at how they have to work yet.
diff --git a/lnet/doc/file.fig b/lnet/doc/file.fig
new file mode 100644 (file)
index 0000000..914c294
--- /dev/null
@@ -0,0 +1,111 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 1200 750 1650 1050
+2 4 0 1 0 7 100 0 -1 0.000 0 0 7 0 0 5
+        1650 1050 1650 750 1200 750 1200 1050 1650 1050
+4 1 0 100 0 0 10 0.0000 0 105 240 1425 952 FS0\001
+-6
+6 1200 2325 1650 2625
+2 4 0 1 0 7 100 0 -1 0.000 0 0 7 0 0 5
+        1650 2625 1650 2325 1200 2325 1200 2625 1650 2625
+4 1 0 100 0 0 10 0.0000 0 105 240 1425 2527 FS3\001
+-6
+6 1200 1800 1650 2100
+2 4 0 1 0 7 100 0 -1 0.000 0 0 7 0 0 5
+        1650 2100 1650 1800 1200 1800 1200 2100 1650 2100
+4 1 0 100 0 0 10 0.0000 0 105 240 1425 2002 FS2\001
+-6
+6 1200 1275 1650 1575
+2 4 0 1 0 7 100 0 -1 0.000 0 0 7 0 0 5
+        1650 1575 1650 1275 1200 1275 1200 1575 1650 1575
+4 1 0 100 0 0 10 0.0000 0 105 240 1425 1477 FS1\001
+-6
+6 450 750 900 1200
+5 1 0 1 0 7 100 0 20 0.000 0 1 0 0 675.000 750.000 450 1050 675 1125 900 1050
+1 2 0 1 0 7 100 0 20 0.000 1 0.0000 675 825 225 75 450 900 900 750
+2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
+        450 825 450 1050
+2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
+        900 1050 900 825
+-6
+6 450 2325 900 2775
+5 1 0 1 0 7 100 0 20 0.000 0 1 0 0 675.000 2325.000 450 2625 675 2700 900 2625
+1 2 0 1 0 7 100 0 20 0.000 1 0.0000 675 2400 225 75 450 2475 900 2325
+2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
+        450 2400 450 2625
+2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
+        900 2625 900 2400
+-6
+6 450 1800 900 2250
+5 1 0 1 0 7 100 0 20 0.000 0 1 0 0 675.000 1800.000 450 2100 675 2175 900 2100
+1 2 0 1 0 7 100 0 20 0.000 1 0.0000 675 1875 225 75 450 1950 900 1800
+2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
+        450 1875 450 2100
+2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
+        900 2100 900 1875
+-6
+6 450 1275 900 1725
+5 1 0 1 0 7 100 0 20 0.000 0 1 0 0 675.000 1275.000 450 1575 675 1650 900 1575
+1 2 0 1 0 7 100 0 20 0.000 1 0.0000 675 1350 225 75 450 1425 900 1275
+2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
+        450 1350 450 1575
+2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
+        900 1575 900 1350
+-6
+6 2250 750 3450 2625
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+        2550 1200 3150 1200
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+        2550 1500 3150 1500
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+        2550 1800 3150 1800
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+        2550 2100 3150 2100
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        2550 975 3150 975 3150 2625 2550 2625 2550 975
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+        2550 2400 3150 2400
+4 1 0 100 0 0 10 0.0000 0 135 1185 2850 900 Application Buffer\001
+-6
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 1 2
+       0 0 1.00 60.00 120.00
+       0 0 1.00 60.00 120.00
+        1650 2400 2550 1350
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 1 2
+       0 0 1.00 60.00 120.00
+       0 0 1.00 60.00 120.00
+        1650 1875 2550 1050
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 1 2
+       0 0 1.00 60.00 120.00
+       0 0 1.00 60.00 120.00
+        1650 1425 2550 1950
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 1 2
+       0 0 1.00 60.00 120.00
+       0 0 1.00 60.00 120.00
+        1650 900 2550 1650
+2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
+        900 900 1200 900
+2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
+        900 1425 1200 1425
+2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
+        900 1950 1200 1950
+2 1 0 1 0 7 100 0 20 0.000 0 0 -1 0 0 2
+        900 2475 1200 2475
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 1 2
+       0 0 1.00 60.00 120.00
+       0 0 1.00 60.00 120.00
+        1650 2025 2550 2250
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 1 2
+       0 0 1.00 60.00 120.00
+       0 0 1.00 60.00 120.00
+        1650 2550 2550 2475
+2 4 0 1 0 7 100 0 -1 0.000 0 0 7 0 0 5
+        1875 2850 1875 600 225 600 225 2850 1875 2850
+4 1 0 100 0 0 10 0.0000 0 105 1215 1050 525 Parallel File Server\001
diff --git a/lnet/doc/flow_new.fig b/lnet/doc/flow_new.fig
new file mode 100644 (file)
index 0000000..d828dea
--- /dev/null
@@ -0,0 +1,213 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 525 2175 1575 2925
+6 675 2287 1425 2812
+4 1 0 50 0 0 10 0.0000 4 105 255 1050 2437 MD\001
+4 1 0 50 0 0 10 0.0000 4 105 645 1050 2587 Exists and\001
+4 1 0 50 0 0 10 0.0000 4 135 555 1050 2737 Accepts?\001
+-6
+2 3 0 1 0 7 100 0 -1 0.000 0 0 0 0 0 5
+        1575 2550 1050 2175 525 2550 1050 2925 1575 2550
+-6
+6 3450 1275 4350 1725
+6 3600 1312 4200 1687
+4 1 0 100 0 0 10 0.0000 0 135 525 3900 1612 Message\001
+4 1 0 100 0 0 10 0.0000 0 105 465 3900 1462 Discard\001
+-6
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        3450 1275 4350 1275 4350 1725 3450 1725 3450 1275
+-6
+6 4650 1275 5550 1725
+6 4725 1312 5475 1687
+4 1 0 100 0 0 10 0.0000 0 135 735 5100 1612 Drop Count\001
+4 1 0 100 0 0 10 0.0000 0 105 630 5100 1462 Increment\001
+-6
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        4650 1275 5550 1275 5550 1725 4650 1725 4650 1275
+-6
+6 1350 525 2250 975
+6 1350 562 2250 937
+4 1 0 100 0 0 10 0.0000 0 135 795 1800 862 Match Entry\001
+4 1 0 100 0 0 10 0.0000 0 105 585 1800 712 Get Next\001
+-6
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        1350 525 2250 525 2250 975 1350 975 1350 525
+-6
+6 525 1125 1575 1875
+2 3 0 1 0 7 100 0 -1 0.000 0 0 0 0 0 5
+        1575 1500 1050 1125 525 1500 1050 1875 1575 1500
+4 1 0 100 0 0 10 0.0000 0 105 465 1049 1552 Match?\001
+-6
+6 2340 1237 2940 1687
+6 2340 1237 2940 1687
+4 1 0 100 0 0 10 0.0000 0 105 345 2640 1387 More\001
+4 1 0 100 0 0 10 0.0000 0 105 405 2640 1537 Match\001
+4 1 0 100 0 0 10 0.0000 0 105 510 2640 1687 Entries?\001
+-6
+-6
+6 525 3225 1575 3975
+6 675 3375 1425 3750
+4 1 0 50 0 0 10 0.0000 4 105 255 1050 3525 MD\001
+4 1 0 50 0 0 10 0.0000 4 105 615 1050 3720 has room?\001
+-6
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        525 3600 1050 3225 1575 3600 1050 3975 525 3600
+-6
+6 3300 3375 4350 3825
+6 3300 3412 4350 3787
+4 1 0 50 0 0 10 0.0000 4 105 735 3825 3562 Unlink MD\001
+4 1 0 50 0 0 10 0.0000 4 135 945 3825 3712 & Match Entry\001
+-6
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        3300 3375 4350 3375 4350 3825 3300 3825 3300 3375
+-6
+6 1950 3225 3000 3975
+6 2250 3450 2700 3750
+4 1 0 50 0 0 10 0.0000 4 105 450 2475 3600 Unlink\001
+4 1 0 50 0 0 10 0.0000 4 105 315 2475 3750 full?\001
+-6
+2 3 0 1 0 7 100 0 -1 0.000 0 0 0 0 0 5
+        3000 3600 2475 3225 1950 3600 2475 3975 3000 3600
+-6
+6 3150 4500 4200 4950
+6 3150 4537 4200 4912
+4 1 0 50 0 0 10 0.0000 4 105 735 3675 4687 Unlink MD\001
+4 1 0 50 0 0 10 0.0000 4 135 945 3675 4837 & Match Entry\001
+-6
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        3150 4500 4200 4500 4200 4950 3150 4950 3150 4500
+-6
+6 600 4500 1500 4950
+6 675 4537 1425 4912
+4 1 0 50 0 0 10 0.0000 4 135 615 1050 4837 Operation\001
+4 1 0 50 0 0 10 0.0000 4 105 525 1050 4687 Perform\001
+-6
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        600 4500 1500 4500 1500 4950 600 4950 600 4500
+-6
+6 4650 4350 5700 5100
+6 4950 4537 5400 4912
+6 4950 4537 5400 4912
+4 1 0 50 0 0 10 0.0000 4 135 435 5175 4837 Queue?\001
+4 1 0 50 0 0 10 0.0000 4 105 360 5175 4687 Event\001
+-6
+-6
+2 3 0 1 0 7 100 0 -1 0.000 0 0 0 0 0 5
+        5700 4725 5175 4350 4650 4725 5175 5100 5700 4725
+-6
+6 6000 4500 6900 4950
+6 6225 4575 6675 4875
+4 1 0 50 0 0 10 0.0000 4 105 360 6450 4875 Event\001
+4 1 0 50 0 0 10 0.0000 4 105 435 6450 4725 Record\001
+-6
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        6000 4500 6900 4500 6900 4950 6000 4950 6000 4500
+-6
+6 1800 4350 2850 5100
+6 2100 4575 2550 4875
+4 1 0 50 0 0 10 0.0000 4 105 450 2325 4725 Unlink\001
+4 1 0 50 0 0 10 0.0000 4 105 450 2325 4875 thresh?\001
+-6
+2 3 0 1 0 7 100 0 -1 0.000 0 0 0 0 0 5
+        2850 4725 2325 4350 1800 4725 2325 5100 2850 4725
+-6
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1050 1875 1050 2175
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1575 1500 2100 1500
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1050 450 1050 1125
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1350 750 1050 750
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1050 2925 1050 3225
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        3150 1500 3450 1500
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        4350 1500 4650 1500
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        2100 1500 2625 1125 3150 1500 2625 1875 2100 1500
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1575 3600 1950 3600
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1050 3975 1050 4500
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        3000 3600 3300 3600
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1500 4725 1800 4725
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        5700 4725 6000 4725
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        2850 4725 3150 4725
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        4200 4725 4650 4725
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        6900 4725 7950 4725
+3 0 0 1 0 7 100 0 -1 0.000 0 1 0 5
+       0 0 1.00 60.00 120.00
+        1575 2550 1650 2550 1800 2550 1800 2400 1800 1500
+        0.000 1.000 1.000 1.000 0.000
+3 0 0 1 0 7 100 0 -1 0.000 0 0 1 5
+       0 0 1.00 60.00 120.00
+        2250 750 2475 750 2625 750 2625 900 2625 1125
+        0.000 1.000 1.000 1.000 0.000
+3 0 0 1 0 7 100 0 -1 0.000 0 0 1 5
+       0 0 1.00 60.00 120.00
+        7500 4725 7500 1650 7500 1500 7350 1500 5550 1500
+        0.000 1.000 1.000 1.000 0.000
+3 0 0 1 0 7 50 0 -1 0.000 0 1 0 5
+       0 0 1.00 60.00 120.00
+        2475 3225 2475 2400 2475 2250 2325 2250 1800 2250
+        0.000 1.000 1.000 1.000 0.000
+3 0 0 1 0 7 50 0 -1 0.000 0 1 0 5
+       0 0 1.00 60.00 120.00
+        3825 3375 3825 2175 3825 2025 3675 2025 1800 2025
+        0.000 1.000 1.000 1.000 0.000
+3 0 0 1 0 7 50 0 -1 0.000 0 1 0 8
+       0 0 1.00 60.00 120.00
+        2325 4350 2325 4275 2325 4125 2475 4125 4275 4125 4425 4125
+        4425 4275 4425 4725
+        0.000 1.000 1.000 1.000 1.000 1.000 1.000 0.000
+3 0 0 1 0 7 50 0 -1 0.000 0 1 0 8
+       0 0 1.00 60.00 120.00
+        5175 4350 5175 4275 5175 4125 5325 4125 7125 4125 7275 4125
+        7275 4275 7275 4725
+        0.000 1.000 1.000 1.000 1.000 1.000 1.000 0.000
+4 1 0 100 0 0 10 0.0000 0 75 150 1575 1425 no\001
+4 1 0 100 0 0 10 0.0000 0 135 360 825 525 Entry\001
+4 1 0 100 0 0 10 0.0000 0 75 150 1575 2475 no\001
+4 1 0 100 0 0 10 0.0000 0 105 195 1200 1950 yes\001
+4 1 0 100 0 0 10 0.0000 0 105 195 1200 3000 yes\001
+4 1 0 100 0 0 10 0.0000 0 105 195 2775 1050 yes\001
+4 1 0 100 0 0 10 0.0000 0 75 150 3225 1425 no\001
+4 1 0 100 0 0 10 0.0000 0 75 150 1650 3525 no\001
+4 1 0 100 0 0 10 0.0000 0 105 195 1200 4050 yes\001
+4 1 0 100 0 0 10 0.0000 0 105 195 3150 3525 yes\001
+4 1 0 100 0 0 10 0.0000 0 75 150 2625 3150 no\001
+4 1 0 100 0 0 10 0.0000 0 105 195 3000 4650 yes\001
+4 1 0 100 0 0 10 0.0000 0 105 195 5850 4650 yes\001
+4 1 0 100 0 0 10 0.0000 0 75 150 2475 4275 no\001
+4 1 0 100 0 0 10 0.0000 0 75 150 5325 4275 no\001
+4 1 0 50 0 0 10 0.0000 4 105 285 7800 4650 Exit\001
diff --git a/lnet/doc/get.fig b/lnet/doc/get.fig
new file mode 100644 (file)
index 0000000..28db949
--- /dev/null
@@ -0,0 +1,33 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 2775 900 3525 1200
+4 0 0 100 0 0 10 0.0000 0 105 720 2775 1200 Translation\001
+4 0 0 100 0 0 10 0.0000 0 105 405 2850 1050 Portal\001
+-6
+6 1350 1725 2175 2025
+4 0 0 100 0 0 10 0.0000 0 105 825 1350 2025 Transmission\001
+4 0 0 100 0 0 10 0.0000 0 105 285 1620 1875 Data\001
+-6
+2 1 0 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        900 525 2700 750
+2 1 0 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        2700 825 2700 1275
+2 1 0 1 0 7 100 0 -1 3.000 0 0 7 1 0 2
+       0 0 1.00 60.00 120.00
+        2700 1350 900 1950
+2 2 0 1 0 7 100 0 -1 4.000 0 0 7 0 0 5
+        2400 300 3600 300 3600 2250 2400 2250 2400 300
+2 2 0 1 0 7 100 0 -1 4.000 0 0 7 0 0 5
+        0 300 1200 300 1200 2250 0 2250 0 300
+4 1 0 100 0 0 10 0.0000 4 135 495 1800 825 Request\001
+4 1 0 100 0 0 10 0.0000 0 105 540 600 525 Initiator\001
+4 1 0 100 0 0 10 0.0000 0 135 405 3000 525 Target\001
diff --git a/lnet/doc/ieee.bst b/lnet/doc/ieee.bst
new file mode 100644 (file)
index 0000000..4df7c50
--- /dev/null
@@ -0,0 +1,1112 @@
+% ---------------------------------------------------------------
+%
+% by Paolo.Ienne@di.epfl.ch
+%
+% ---------------------------------------------------------------
+%
+% no guarantee is given that the format corresponds perfectly to 
+% IEEE 8.5" x 11" Proceedings, but most features should be ok.
+%
+% ---------------------------------------------------------------
+%
+% `ieee' from BibTeX standard bibliography style `abbrv'
+% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+% Copyright (C) 1985, all rights reserved.
+% Copying of this file is authorized only if either
+% (1) you make absolutely no changes to your copy, including name, or
+% (2) if you do make changes, you name it something other than
+% btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+% This restriction helps ensure that all standard styles are identical.
+% The file btxbst.doc has the documentation for this style.
+
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    month
+    note
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    title
+    type
+    volume
+    year
+  }
+  {}
+  { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+ { add.period$ write$
+   newline$
+   "\newblock " write$
+ }
+ { output.state before.all =
+     'write$
+     { add.period$ " " * write$ }
+   if$
+ }
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+  "\bibitem{" write$
+  cite$ write$
+  "}" write$
+  newline$
+  ""
+  before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "{\em " swap$ * "}" * }
+  if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
+      nameptr #1 >
+ { namesleft #1 >
+     { ", " * t * }
+     { numnames #2 >
+  { "," * }
+  'skip$
+       if$
+       t "others" =
+  { " et~al." * }
+  { " and " * t * }
+       if$
+     }
+   if$
+ }
+ 't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+    { "" }
+    { title "t" change.case$ }
+  if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+     { "--" *
+       t #2 global.max$ substring$ 't :=
+     }
+     {   { t #1 #1 substring$ "-" = }
+  { "-" *
+    t #2 global.max$ substring$ 't :=
+  }
+       while$
+     }
+   if$
+ }
+ { t #1 #1 substring$ *
+   t #2 global.max$ substring$ 't :=
+ }
+      if$
+    }
+  while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+    { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+   month
+ }
+      if$
+    }
+    { month empty$
+ 'year
+ { month " " * year * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+    { "~" }
+    { " " }
+  if$
+  swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+    'pop$
+    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+  if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+    { "" }
+    { "volume" volume tie.or.space.connect
+      series empty$
+ 'skip$
+ { " of " * series emphasize * }
+      if$
+      "volume and number" number either.or.check
+    }
+  if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+    { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+     { "number" }
+     { "Number" }
+   if$
+   number tie.or.space.connect
+   series empty$
+     { "there's a number but no series in " cite$ * warning$ }
+     { " in " * series * }
+   if$
+ }
+      if$
+    }
+    { "" }
+  if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+    { "" }
+    { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+      if$
+    }
+  if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+  #0 'multiresult :=
+    { multiresult not
+      t empty$ not
+      and
+    }
+    { t #1 #1 substring$
+      duplicate$ "-" =
+      swap$ duplicate$ "," =
+      swap$ "+" =
+      or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+      if$
+    }
+  while$
+  multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+    { "" }
+    { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+  number empty$
+    'skip$
+    { "(" number * ")" * *
+      volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+      if$
+    }
+  if$
+  pages empty$
+    'skip$
+    { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+    'format.pages
+    { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+      if$
+      chapter tie.or.space.connect
+      pages empty$
+ 'skip$
+ { ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+    { "" }
+    { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+  month empty$ year empty$ note empty$
+  and and and and and
+  key empty$ not and
+    { "all relevant fields are empty in " cite$ * warning$ }
+    'skip$
+  if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+    'skip$
+    { pop$
+      type "t" change.case$
+    }
+  if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+    { "Technical Report" }
+    'type
+  if$
+  number empty$
+    { "t" change.case$ }
+    { number tie.or.space.connect }
+  if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+    { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+   warning$
+   ""
+ }
+ { "In {\em " journal * "\/}" * }
+      if$
+    }
+    { "In " key * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+  editor num.names$ duplicate$
+  #2 >
+    { pop$ " et~al." * }
+    { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+     { " et~al." * }
+     { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+   if$
+ }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+      "In "
+    }
+    { "Volume" volume tie.or.space.connect
+      " of " *
+    }
+  if$
+  editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+ { series empty$
+     { "need editor, key, or series for " cite$ * " to crossref " *
+       crossref * warning$
+       "" *
+     }
+     { "{\em " * series * "\/}" * }
+   if$
+ }
+ { key * }
+      if$
+    }
+    { format.crossref.editor * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+ { booktitle empty$
+     { "need editor, key, or booktitle for " cite$ * " to crossref " *
+       crossref * warning$
+       ""
+     }
+     { "In {\em " booktitle * "\/}" * }
+   if$
+ }
+ { "In " key * }
+      if$
+    }
+    { "In " format.crossref.editor * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { journal emphasize "journal" output.check
+      format.vol.num.pages output
+      format.date "year" output.check
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+  format.authors output
+  new.block
+  format.title "title" output.check
+  howpublished address new.block.checkb
+  howpublished output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+    }
+    { format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.chapter.pages output
+      new.sentence
+      publisher "publisher" output.check
+      address output
+      format.edition output
+      format.date "year" output.check
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.pages output
+      address empty$
+ { organization publisher new.sentence.checkb
+   organization output
+   publisher output
+   format.date "year" output.check
+ }
+ { address output.nonnull
+   format.date "year" output.check
+   new.sentence
+   organization output
+   publisher output
+ }
+      if$
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+  author empty$
+    { organization empty$
+ 'skip$
+ { organization output.nonnull
+   address output
+ }
+      if$
+    }
+    { format.authors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  author empty$
+    { organization empty$
+ { address new.block.checka
+   address output
+ }
+ 'skip$
+      if$
+    }
+    { organization address new.block.checkb
+      organization output
+      address output
+    }
+  if$
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  "Master's thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+  format.authors output
+  title howpublished new.block.checkb
+  format.title output
+  howpublished new.block.checka
+  howpublished output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.btitle "title" output.check
+  new.block
+  "PhD thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+  editor empty$
+    { organization output }
+    { format.editors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  format.bvolume output
+  format.number.series output
+  address empty$
+    { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+   organization output
+ }
+      if$
+      publisher output
+      format.date "year" output.check
+    }
+    { address output.nonnull
+      format.date "year" output.check
+      new.sentence
+      editor empty$
+ 'skip$
+ { organization output }
+      if$
+      publisher output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  format.tr.number output.nonnull
+  institution "institution" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  note "note" output.check
+  format.date output
+  fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sept."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput.-Aided Design Integrated Circuits"}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Programming"}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Gr."}
+
+MACRO {toms} {"ACM Trans. Math. Softw."}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."}
+
+MACRO {tcs} {"Theoretical Comput. Sci."}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { nameptr #1 >
+ { "   " * }
+ 'skip$
+      if$
+      s nameptr "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}" format.name$ 't :=
+      nameptr numnames = t "others" = and
+ { "et al" * }
+ { t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+   ""
+ }
+ { key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+    { editor empty$
+ { key empty$
+     { "to sort, need author, editor, or key in " cite$ * warning$
+       ""
+     }
+     { key sortify }
+   if$
+ }
+ { editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+    { organization empty$
+ { key empty$
+     { "to sort, need author, organization, or key in " cite$ * warning$
+       ""
+     }
+     { key sortify }
+   if$
+ }
+ { "The " #4 organization chop.word sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+    { organization empty$
+ { key empty$
+     { "to sort, need editor, organization, or key in " cite$ * warning$
+       ""
+     }
+     { key sortify }
+   if$
+ }
+ { "The " #4 organization chop.word sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+FUNCTION {presort}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+     'author.organization.sort
+     'author.sort
+   if$
+ }
+      if$
+    }
+  if$
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #1 'number.label :=
+  #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+  number.label #1 + 'number.label :=
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+  "\begin{thebibliography}{"  longest.label  * 
+  "}\setlength{\itemsep}{-1ex}\small" * write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+  "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+
+% end of file ieee.bst
+% ---------------------------------------------------------------
diff --git a/lnet/doc/mpi.fig b/lnet/doc/mpi.fig
new file mode 100644 (file)
index 0000000..e1a91b5
--- /dev/null
@@ -0,0 +1,117 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+6 150 1650 900 2025
+4 1 0 100 0 0 10 0.0000 0 135 735 525 1800 Unexpected\001
+4 1 0 100 0 0 10 0.0000 0 135 585 525 1995 Messages\001
+-6
+6 150 150 900 525
+4 1 0 100 0 0 10 0.0000 0 135 615 525 300 Preposted\001
+4 1 0 100 0 0 10 0.0000 0 105 525 525 495 Receives\001
+-6
+6 2550 4125 3150 4725
+4 1 0 100 0 0 10 0.0000 0 135 600 2850 4275 Length=0\001
+4 1 0 100 0 0 10 0.0000 0 105 540 2850 4470 Truncate\001
+4 1 0 100 0 0 10 0.0000 0 105 480 2850 4665 No Ack\001
+-6
+6 1050 1575 1950 1875
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        1050 1575 1950 1575 1950 1875 1050 1875 1050 1575
+4 1 0 100 0 0 10 0.0000 0 105 780 1500 1725 Match Short\001
+-6
+6 5400 1575 6300 2175
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        5400 1575 6300 1575 6300 2175 5400 2175 5400 1575
+4 1 0 100 0 0 10 0.0000 0 105 405 5850 1875 Buffer\001
+-6
+6 5400 2400 6300 3000
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        5400 2400 6300 2400 6300 3000 5400 3000 5400 2400
+4 1 0 100 0 0 10 0.0000 0 105 405 5850 2700 Buffer\001
+-6
+6 1050 2400 1950 2700
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        1050 2400 1950 2400 1950 2700 1050 2700 1050 2400
+4 1 0 100 0 0 10 0.0000 0 105 780 1500 2550 Match Short\001
+-6
+6 1050 825 1950 1125
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        1050 825 1950 825 1950 1125 1050 1125 1050 825
+4 1 0 100 0 0 10 0.0000 0 105 765 1500 975 Match None\001
+-6
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1500 1125 1500 1575
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        3225 2025 4050 3375
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 0 0 2
+        150 675 6600 675
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 0 0 2
+        150 1350 6600 1350
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        2400 4125 3300 4125 3300 4725 2400 4725 2400 4125
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        3225 4500 4050 3675
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        3225 1725 5400 1725
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        3225 2550 5400 2550
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        3225 2850 4050 3450
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1500 1800 1500 2400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        2400 825 3300 825 3300 1275 2400 1275 2400 825
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1500 2625 1500 4125
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        1050 4125 1950 4125 1950 4425 1050 4425 1050 4125
+2 1 0 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1500 300 1500 825
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 975 2400 975
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 1725 2400 1725
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 2550 2400 2550
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        1875 4275 2400 4275
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        2400 1575 3300 1575 3300 2175 2400 2175 2400 1575
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        2400 2400 3300 2400 3300 3000 2400 3000 2400 2400
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        4050 3300 5250 3300 5250 3750 4050 3750 4050 3300
+4 1 0 100 0 0 10 0.0000 0 105 885 1500 150 Match Entries\001
+4 1 0 100 0 0 10 0.0000 0 135 1290 2850 150 Memory Descriptors\001
+4 1 0 100 0 0 10 0.0000 0 135 1065 5850 150 Memory Regions\001
+4 1 0 100 0 0 10 0.0000 0 135 825 4500 150 Event Queues\001
+4 1 0 100 0 0 10 0.0000 0 105 585 525 1050 RcvMark\001
+4 1 0 100 0 0 10 0.0000 0 105 330 2850 1102 None\001
+4 1 0 100 0 0 10 0.0000 0 135 705 1500 4275 Match Any\001
+4 1 0 50 0 0 10 0.0000 0 150 810 2850 1725 max_offset=\001
+4 1 0 50 0 0 10 0.0000 0 150 840 2850 1875 n - short_len\001
+4 1 0 50 0 0 10 0.0000 0 150 810 2850 2550 max_offset=\001
+4 1 0 50 0 0 10 0.0000 0 150 840 2850 2700 n - short_len\001
+4 1 0 50 0 0 10 0.0000 0 105 405 2850 2100 unlink\001
+4 1 0 50 0 0 10 0.0000 0 105 405 2850 2925 unlink\001
+4 1 0 100 0 0 10 0.0000 0 135 930 4650 3675 Message Queue\001
+4 1 0 100 0 0 10 0.0000 0 135 735 4650 3525 Unexpected\001
diff --git a/lnet/doc/portals.fig b/lnet/doc/portals.fig
new file mode 100644 (file)
index 0000000..9b1271b
--- /dev/null
@@ -0,0 +1,68 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        1350 900 1650 900 1650 1200 1350 1200 1350 900
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        1800 1350 2100 1350 2100 1650 1800 1650 1800 1350
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        2250 1800 2550 1800 2550 2100 2250 2100 2250 1800
+2 1 1 1 0 7 100 0 -1 4.000 0 0 -1 0 0 2
+        4200 375 4200 2100
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        525 600 1125 600 1125 2100 525 2100 525 600
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        4425 1275 4875 1275 4875 1950 4425 1950 4425 1275
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        2550 1200 3150 1200 3150 1500 2550 1500 2550 1200
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        3000 1425 4425 1425
+2 2 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 5
+        3600 825 3750 825 3750 1125 3600 1125 3600 825
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        2025 1425 2550 1425
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+        4425 750 4875 750 4875 1125 4425 1125 4425 750
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+       0 0 1.00 60.00 120.00
+        3675 975 4425 975
+3 0 0 1 0 7 100 0 -1 0.000 0 1 0 2
+       0 0 1.00 60.00 120.00
+        825 1050 1350 1050
+        0.000 0.000
+3 0 0 1 0 7 100 0 -1 0.000 0 1 0 5
+       0 0 1.00 60.00 120.00
+        1500 1125 1500 1350 1500 1500 1650 1500 1800 1500
+        0.000 1.000 1.000 1.000 0.000
+3 0 0 1 0 7 100 0 -1 0.000 0 1 0 5
+       0 0 1.00 60.00 120.00
+        1950 1575 1950 1800 1950 1950 2100 1950 2250 1950
+        0.000 1.000 1.000 1.000 0.000
+3 0 0 1 0 7 100 0 -1 0.000 0 0 0 2
+        525 975 1125 975
+        0.000 0.000
+3 0 0 1 0 7 100 0 -1 0.000 0 0 0 2
+        525 1125 1125 1125
+        0.000 0.000
+3 0 0 1 0 7 100 0 -1 0.000 0 1 0 7
+       0 0 1.00 60.00 120.00
+        3000 1275 3150 1275 3300 1275 3300 1125 3300 975 3450 975
+        3600 975
+        0.000 1.000 1.000 1.000 1.000 1.000 0.000
+4 0 0 100 0 0 10 0.0000 0 105 690 1275 750 Match List\001
+4 1 0 100 0 0 10 0.0000 0 105 780 825 525 Portal Table\001
+4 2 0 100 0 0 10 0.0000 0 135 825 4050 2025 Library Space\001
+4 0 0 100 0 0 10 0.0000 0 135 1110 4350 2175 Application Space\001
+4 1 0 100 0 0 10 0.0000 0 135 660 2850 1050 Descriptor\001
+4 1 0 100 0 0 10 0.0000 0 135 540 2850 825 Memory\001
+4 1 0 100 0 0 10 0.0000 0 135 765 3750 675 Event Queue\001
+4 1 0 100 0 0 10 0.0000 0 135 495 4650 675 Regions\001
+4 1 0 100 0 0 10 0.0000 0 135 540 4650 525 Memory\001
diff --git a/lnet/doc/portals3.bib b/lnet/doc/portals3.bib
new file mode 100644 (file)
index 0000000..323b99f
--- /dev/null
@@ -0,0 +1,124 @@
+@Article{           Cplant,
+    title       = { {M}assively {P}arallel {C}omputing with
+                    {C}ommodity {C}omponents },
+    author      = { Ron Brightwell and David S. Greenberg and Arthur
+                    B. Maccabe and Rolf Riesen },
+    journal     = { Parallel Computing },
+    volume      = { 26 },
+    month       = { February },
+    pages       = { 243-266 },
+    year        = { 2000 }
+}
+
+@Manual{     Portals,
+    organization = { Sandia National Laboratories },
+    title        = { {P}uma {P}ortals },
+    note         = { http://www.cs.sandia.gov/puma/portals },
+    year         = { 1997 }
+}
+
+@Techreport{      VIA,
+  title         = { {V}irtual {I}nterface {A}rchitecture
+                    {S}pecification {V}ersion 1.0 }, 
+  author        = { {Compaq, Microsoft, and Intel} },
+  institution   = { Compaq, Microsoft, and Intel },
+  month         = { December },
+  year          = { 1997 }
+}
+
+@Techreport{      ST,
+  title         = { {I}nformation {T}echnology - {S}cheduled
+                  {T}ransfer {P}rotocol - {W}orking {D}raft 2.0 },
+  author        = { {Task Group of Technical Committee T11} },
+  institution   = { Accredited Standards Committee NCITS },
+  month         = { July },
+  year          = { 1998 }
+}
+
+@Manual{     TFLOPS,
+    organization = { Sandia National Laboratories },
+    title        = { ASCI Red },
+    note         = { http://www.sandia.gov/ASCI/TFLOP },
+    year         = { 1996 }
+}
+
+@Techreport{      GM,
+  title         = { The {GM} {M}essage {P}assing {S}ystem },
+  author         = { {Myricom, Inc.} },
+  institution    = { {Myricom, Inc.} },
+  year          = { 1997 },
+}
+
+@Article{           MPIstandard,
+    title        = { {MPI}: {A} {M}essage-{P}assing {I}nterface standard },
+    author       = { {Message Passing Interface Forum} },
+    journal      = { The International Journal of Supercomputer Applications
+                     and High Performance Computing },
+    volume       = { 8 },
+    year         = { 1994 }
+}
+
+@Inproceedings{    PumaOS,
+    author       = "Lance Shuler and Chu Jong and Rolf Riesen and
+                    David van Dresser and Arthur B. Maccabe and
+                    Lee Ann Fisk and T. Mack Stallcup",
+    booktitle    = "Proceeding of the 1995 Intel Supercomputer
+                    User's Group Conference",
+    title        = "The {P}uma Operating System for Massively Parallel Computers",
+    organization = "Intel Supercomputer User's Group",
+    year         = 1995
+}
+
+@InProceedings{   SUNMOS,
+author          = "Arthur B. Maccabe and Kevin S. McCurley and Rolf Riesen and
+                   Stephen R. Wheat",
+title           = "{SUNMOS} for the {Intel} {Paragon}: A Brief User's Guide",
+booktitle       = "Proceedings of the {Intel} Supercomputer Users' Group. 1994
+                   Annual North America Users' Conference.",
+year            = 1994,
+pages           = "245--251",
+month           = "June",
+location        = "ftp.cs.sandia.gov /pub/sunmos/papers/ISUG94-1.ps"
+}
+
+@InProceedings {   PumaMPI,
+    title        = { Design and Implementation of {MPI} on {P}uma Portals },
+    author       = { Ron Brightwell and Lance Shuler },
+    booktitle    = { Proceedings of the Second MPI Developer's Conference },
+    pages        = { 18-25 },
+    month        = { July },
+    year         = { 1996 }
+}
+
+@Inproceedings{     FM2,
+    author       = { Mario Lauria and Scott Pakin and Andrew Chien },
+    title        = { {E}fficient {L}ayering for {H}igh {S}peed
+                     {C}ommunication: {F}ast {M}essages 2.x },
+    Booktitle    = { Proceedings of the IEEE International Symposium
+                     on High Performance Distributed Computing },
+    year         = { 1998 }
+}
+
+@Manual {          CraySHMEM,
+    title        = "SHMEM Technical Note for C, SG-2516 2.3",
+    organization = "Cray Research, Inc.",
+    month        = "October",
+    year         = 1994
+}
+
+@Manual {          MPI2,
+    title        = "{MPI}-2: {E}xtensions to the {M}essage-{P}assing {I}nterface",
+    organization = "Message Passing Interface Forum",
+    note         = "http://www.mpi-forum.org/docs/mpi-20-html/mpi2-report.html",
+    month        = "July",
+    year         = 1997
+}
+
+@InProceedings {   PMMPI,
+    title        = { {The Design and Implementation of Zero Copy MPI Using
+                       Commodity Hardware with a High Performance Network} },
+    author       = { Francis O'Carroll and  Hiroshi Tezuka and Atsushi Hori
+                     and Yutaka Ishikawa  },
+    booktitle    = { Proceedings of the ICS },
+    year         = { 1998 }
+}
diff --git a/lnet/doc/portals3.lyx b/lnet/doc/portals3.lyx
new file mode 100644 (file)
index 0000000..8429280
--- /dev/null
@@ -0,0 +1,15944 @@
+#LyX 1.2 created this file. For more info see http://www.lyx.org/
+\lyxformat 220
+\textclass report
+\begin_preamble
+\usepackage{fullpage}
+\renewenvironment{comment}%
+{\begin{quote}\textbf{Discussion}: \slshape}%
+{\end{quote}}
+\pagestyle{myheadings}
+\end_preamble
+\language american
+\inputencoding auto
+\fontscheme pslatex
+\graphics default
+\paperfontsize 10
+\spacing single 
+\papersize letterpaper
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\use_natbib 0
+\use_numerical_citations 0
+\paperorientation portrait
+\secnumdepth 2
+\tocdepth 2
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 2
+\paperpagestyle headings
+
+\layout Title
+
+The Portals 3.2 Message Passing Interface 
+\newline 
+ Revision 1.1
+\layout Author
+
+Ron Brightwell
+\begin_inset Foot
+collapsed true
+
+\layout Standard
+
+R.
+ Brightwell and R.
+ Riesen are with the Scalable Computing Systems Department, Sandia National
+ Laboratories, P.O.
+ Box 5800, Albuquerque, NM\SpecialChar ~
+\SpecialChar ~
+87111-1110, bright@cs.sandia.gov, rolf@cs.sandia.gov.
+\end_inset 
+
+, Arthur B.
+ Maccabe
+\begin_inset Foot
+collapsed true
+
+\layout Standard
+
+A.
+ B.
+ Maccabe is with the Computer Science Department, University of New Mexico,
+ Albuquerque, NM\SpecialChar ~
+\SpecialChar ~
+87131-1386, maccabe@cs.unm.edu.
+\end_inset 
+
+, Rolf Riesen and Trammell Hudson
+\layout Abstract
+
+This report presents a specification for the Portals 3.2 message passing
+ interface.
+ Portals 3.2 is intended to allow scalable, high-performance network communicatio
+n between nodes of a parallel computing system.
+ Specifically, it is designed to support a parallel computing platform composed
+ of clusters of commodity workstations connected by a commodity system area
+ network fabric.
+ In addition, Portals 3.2 is well suited to massively parallel processing
+ and embedded systems.
+ Portals 3.2 represents an adaption of the data movement layer developed
+ for massively parallel processing platforms, such as the 4500-node Intel
+ TeraFLOPS machine.
+\layout Standard
+
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
+
+\backslash 
+clearpage
+\backslash 
+pagenumbering{roman}
+\backslash 
+setcounter{page}{3}
+\end_inset 
+
+
+\layout Standard
+
+
+\begin_inset LatexCommand \tableofcontents{}
+
+\end_inset 
+
+
+\layout Standard
+
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
+
+\backslash 
+cleardoublepage
+\end_inset 
+
+
+\layout Standard
+
+
+\begin_inset FloatList figure
+
+\end_inset 
+
+
+\layout Standard
+
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
+
+\backslash 
+cleardoublepage
+\end_inset 
+
+
+\layout Standard
+
+
+\begin_inset FloatList table
+
+\end_inset 
+
+
+\layout Standard
+
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
+
+\backslash 
+cleardoublepage
+\end_inset 
+
+
+\layout Chapter*
+
+Summary of Changes for Revision 1.1
+\layout Enumerate
+
+Updated version number to 3.2 throughout the document
+\layout Enumerate
+
+Section 
+\begin_inset LatexCommand \ref{sub:PtlGetId}
+
+\end_inset 
+
+: added 
+\family typewriter 
+PTL_SEGV
+\family default 
+ to error list for 
+\shape italic 
+PtlGetId
+\shape default 
+.
+\layout Enumerate
+
+Section 
+\begin_inset LatexCommand \ref{sec:meattach}
+
+\end_inset 
+
+: added 
+\family typewriter 
+PTL_ML_TOOLONG
+\family default 
+ to error list for 
+\shape italic 
+PtlMEAttach
+\shape default 
+.
+\layout Enumerate
+
+Section 
+\begin_inset LatexCommand \ref{sec:meunlink}
+
+\end_inset 
+
+: removed text referring to a list of associated memory descriptors.
+\layout Enumerate
+
+Section 
+\begin_inset LatexCommand \ref{sec:mdfree}
+
+\end_inset 
+
+: added text to describe unlinking a free-floating memory descriptor.
+\layout Enumerate
+
+Table 
+\begin_inset LatexCommand \ref{tab:types}
+
+\end_inset 
+
+: added entry for 
+\family typewriter 
+ptl_seq_t
+\family default 
+.
+\layout Enumerate
+
+Section 
+\begin_inset LatexCommand \ref{sec:md-type}
+
+\end_inset 
+
+:
+\begin_deeper 
+\layout Enumerate
+
+added definition of 
+\family typewriter 
+max_offset
+\family default 
+.
+\layout Enumerate
+
+added text to clarify 
+\family typewriter 
+PTL_MD_MANAGE_REMOTE
+\family default 
+.
+\end_deeper 
+\layout Enumerate
+
+Section 
+\begin_inset LatexCommand \ref{sec:mdattach}
+
+\end_inset 
+
+: modified text for 
+\family typewriter 
+unlink_op
+\family default 
+.
+\layout Enumerate
+
+Section 
+\begin_inset LatexCommand \ref{sec:niinit}
+
+\end_inset 
+
+: added text to clarify multiple calls to 
+\shape italic 
+PtlNIInit
+\shape default 
+.
+\layout Enumerate
+
+Section 
+\begin_inset LatexCommand \ref{sec:mdattach}
+
+\end_inset 
+
+: added text to clarify 
+\family typewriter 
+unlink_nofit
+\family default 
+.
+\layout Enumerate
+
+Section 
+\begin_inset LatexCommand \ref{sec:receiving}
+
+\end_inset 
+
+: removed text indicating that an MD will reject a message if the associated
+ EQ is full.
+\layout Enumerate
+
+Section 
+\begin_inset LatexCommand \ref{sec:mdfree}
+
+\end_inset 
+
+: added 
+\family typewriter 
+PTL_MD_INUSE
+\family default 
+ error code and text to indicate that only MDs with no pending operations
+ can be unlinked.
+\layout Enumerate
+
+Table 
+\begin_inset LatexCommand \ref{tab:retcodes}
+
+\end_inset 
+
+: added 
+\family typewriter 
+PTL_MD_INUSE
+\family default 
+ return code.
+\layout Enumerate
+
+Section 
+\begin_inset LatexCommand \ref{sec:event-type}
+
+\end_inset 
+
+: added user id field, MD handle field, and NI specific failure field to
+ the 
+\family typewriter 
+ptl_event_t
+\family default 
+ structure.
+\layout Enumerate
+
+Table 
+\begin_inset LatexCommand \ref{tab:types}
+
+\end_inset 
+
+: added 
+\family typewriter 
+ptl_ni_fail_t
+\family default 
+.
+\layout Enumerate
+
+Section 
+\begin_inset LatexCommand \ref{sec:event-type}
+
+\end_inset 
+
+: added 
+\family typewriter 
+PTL_EVENT_UNLINK
+\family default 
+ event type.
+\layout Enumerate
+
+Table 
+\begin_inset LatexCommand \ref{tab:func}
+
+\end_inset 
+
+: removed 
+\shape slanted 
+PtlTransId
+\shape default 
+.
+\layout Enumerate
+
+Section 
+\begin_inset LatexCommand \ref{sec:meattach}
+
+\end_inset 
+
+, Section 
+\begin_inset LatexCommand \ref{sec:meinsert}
+
+\end_inset 
+
+, Section 
+\begin_inset LatexCommand \ref{sec:put}
+
+\end_inset 
+
+: listed allowable constants with relevant fields.
+\layout Enumerate
+
+Table 
+\begin_inset LatexCommand \ref{tab:func}
+
+\end_inset 
+
+: added 
+\shape italic 
+PtlMEAttachAny
+\shape default 
+ function.
+\layout Enumerate
+
+Table 
+\begin_inset LatexCommand \ref{tab:retcodes}
+
+\end_inset 
+
+: added 
+\family typewriter 
+PTL_PT_FULL
+\family default 
+ return code for 
+\shape italic 
+PtlMEAttachAny
+\shape default 
+.
+\layout Enumerate
+
+Table 
+\begin_inset LatexCommand \ref{tab:oconsts}
+
+\end_inset 
+
+: updated to reflect new event types.
+\layout Enumerate
+
+Section 
+\begin_inset LatexCommand \ref{sec:id-type}
+
+\end_inset 
+
+: added 
+\family typewriter 
+ptl_nid_t
+\family default 
+, 
+\family typewriter 
+ptl_pid_t
+\family default 
+, and 
+\family typewriter 
+ptl_uid_t
+\family default 
+.
+\layout Chapter*
+
+Summary of Changes for Version 3.1
+\layout Section*
+
+Thread Issues
+\layout Standard
+
+The most significant change to the interface from version 3.0 to 3.1 involves
+ the clarification of how the interface interacts with multi-threaded applicatio
+ns.
+ We adopted a generic thread model in which processes define an address
+ space and threads share the address space.
+ Consideration of the API in the light of threads lead to several clarifications
+ throughout the document: 
+\layout Enumerate
+
+Glossary: 
+\begin_deeper 
+\layout Enumerate
+
+added a definition for 
+\emph on 
+thread
+\emph default 
+, 
+\layout Enumerate
+
+reworded the definition for 
+\emph on 
+process
+\emph default 
+.
+\end_deeper 
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:apiover}
+
+\end_inset 
+
+: added section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:threads}
+
+\end_inset 
+
+ to describe the multi-threading model used by the Portals API.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:ptlinit}
+
+\end_inset 
+
+: 
+\emph on 
+PtlInit
+\emph default 
+ must be called at least once and may be called any number of times.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:ptlfini}
+
+\end_inset 
+
+: 
+\emph on 
+PtlFini
+\emph default 
+ should be called once as the process is terminating and not as each thread
+ terminates.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:pid}
+
+\end_inset 
+
+: Portals does not define thread ids.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:ni}
+
+\end_inset 
+
+: network interfaces are associated with processes, not threads.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:niinit}
+
+\end_inset 
+
+: 
+\emph on 
+PtlNIInit
+\emph default 
+ must be called at least once and may be called any number of times.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:eqget}
+
+\end_inset 
+
+: 
+\emph on 
+PtlEQGet
+\emph default 
+ returns 
+\family typewriter 
+PTL_EQ_EMPTY
+\family default 
+ if a thread is blocked on 
+\emph on 
+PtlEQWait
+\emph default 
+.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:eqwait}
+
+\end_inset 
+
+: waiting threads are awakened in FIFO order.
+\layout Standard
+
+Two functions, 
+\emph on 
+PtlNIBarrier
+\emph default 
+ and 
+\emph on 
+PtlEQCount
+\emph default 
+ were removed from the API.
+\emph on 
+PtlNIBarrier
+\emph default 
+ was defined to block the calling process until all of the processes in
+ the application group had invoked 
+\emph on 
+PtlNIBarrier
+\emph default 
+.
+ We now consider this functionality, along with the concept of groups (see
+ the discussion under 
+\begin_inset Quotes eld
+\end_inset 
+
+other changes
+\begin_inset Quotes erd
+\end_inset 
+
+), to be part of the runtime system, not part of the Portals API.
+\emph on 
+PtlEQCount
+\emph default 
+ was defined to return the number of events in an event queue.
+ Because external operations may lead to new events being added and other
+ threads may remove events, the value returned by 
+\emph on 
+PtlEQCount
+\emph default 
+ would have to be a hint about the number of events in the event queue.
+\layout Section*
+
+Handling small, unexpected messages
+\layout Standard
+
+Another set of changes relates to handling small unexpected messages in
+ MPI.
+ In designing version 3.0, we assumed that each unexpected message would
+ be placed in a unique memory descriptor.
+ To avoid the need to process a long list of memory descriptors, we moved
+ the memory descriptors out of the match list and hung them off of a single
+ match list entry.
+ In this way, large unexpected messages would only encounter a single 
+\begin_inset Quotes eld
+\end_inset 
+
+short message
+\begin_inset Quotes erd
+\end_inset 
+
+ match list entry before encountering the 
+\begin_inset Quotes eld
+\end_inset 
+
+long message
+\begin_inset Quotes erd
+\end_inset 
+
+ match list entry.
+ Experience with this strategy identified resource management problems with
+ this approach.
+ In particular, a long sequence of very short (or zero length) messages
+ could quickly exhaust the memory descriptors constructed for handling unexpecte
+d messages.
+ Our new strategy involves the use of several very large memory descriptors
+ for small unexpected messages.
+ Consecutive unexpected messages will be written into the first of these
+ memory descriptors until the memory descriptor fills up.
+ When the first of the 
+\begin_inset Quotes eld
+\end_inset 
+
+small memory
+\begin_inset Quotes erd
+\end_inset 
+
+ descriptors fills up, it will be unlinked and subsequent short messages
+ will be written into the next 
+\begin_inset Quotes eld
+\end_inset 
+
+short message
+\begin_inset Quotes erd
+\end_inset 
+
+ memory descriptor.
+ In this case, a 
+\begin_inset Quotes eld
+\end_inset 
+
+short message
+\begin_inset Quotes erd
+\end_inset 
+
+ memory descriptor will be declared full when it does not have sufficient
+ space for the largest small unexpected message.
+\layout Standard
+
+This lead to two significant changes.
+ First, each match list entry now has a single memory descriptor rather
+ than a list of memory descriptors.
+ Second, in addition to exceeding the operation threshold, a memory descriptor
+ can be unlinked when the local offset exceeds a specified value.
+ These changes have lead to several changes in this document: 
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{subsec:paddress}
+
+\end_inset 
+
+: 
+\begin_deeper 
+\layout Enumerate
+
+removed references to the memory descriptor list, 
+\layout Enumerate
+
+changed the portals address translation description to indicate that unlinking
+ a memory descriptor implies unlinking the associated match list entry--match
+ list entries can no longer be unlinked independently from the memory descriptor.
+\end_deeper 
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:meattach}
+
+\end_inset 
+
+: 
+\begin_deeper 
+\layout Enumerate
+
+removed unlink from argument list, 
+\layout Enumerate
+
+removed description of 
+\family typewriter 
+ptl_unlink
+\family default 
+ type, 
+\layout Enumerate
+
+changed wording of the error condition when the Portal table index already
+ has an associated match list.
+\end_deeper 
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:meinsert}
+
+\end_inset 
+
+: removed unlink from argument list.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:md-type}
+
+\end_inset 
+
+: added 
+\family typewriter 
+max_offset
+\family default 
+.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:mdattach}
+
+\end_inset 
+
+: 
+\begin_deeper 
+\layout Enumerate
+
+added description of 
+\family typewriter 
+ptl_unlink
+\family default 
+ type, 
+\layout Enumerate
+
+removed reference to memory descriptor lists, 
+\layout Enumerate
+
+changed wording of the error condition when match list entry already has
+ an associated memory descriptor, 
+\layout Enumerate
+
+changed the description of the 
+\family typewriter 
+unlink
+\family default 
+ argument.
+\end_deeper 
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:md}
+
+\end_inset 
+
+: removed 
+\family typewriter 
+PtlMDInsert
+\family default 
+ operation.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:mdbind}
+
+\end_inset 
+
+: removed references to memory descriptor list.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:mdfree}
+
+\end_inset 
+
+: removed reference to memory descriptor list.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:summary}
+
+\end_inset 
+
+: removed references to PtlMDInsert.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:semantics}
+
+\end_inset 
+
+: removed reference to memory descriptor list.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:exmpi}
+
+\end_inset 
+
+: revised the MPI example to reflect the changes to the interface.
+\layout Standard
+
+Several changes have been made to improve the general documentation of the
+ interface.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:handle-type}
+
+\end_inset 
+
+: documented the special value 
+\family typewriter 
+PTL_EQ_NONE
+\family default 
+.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:id-type}
+
+\end_inset 
+
+: documented the special value 
+\family typewriter 
+PTL_ID_ANY
+\family default 
+.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:mdbind}
+
+\end_inset 
+
+: documented the return value 
+\family typewriter 
+PTL_INV_EQ
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:mdupdate}
+
+\end_inset 
+
+: clarified the description of the 
+\emph on 
+PtlMDUpdate
+\emph default 
+ function.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:implvals}
+
+\end_inset 
+
+: introduced a new section to document the implementation defined values.
+\layout Enumerate
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:summary}
+
+\end_inset 
+
+: modified Table\SpecialChar ~
+
+\begin_inset LatexCommand \ref{tab:oconsts}
+
+\end_inset 
+
+ to indicate where each constant is introduced and where it is used.
+\layout Section*
+
+Other changes
+\layout Subsection*
+
+Implementation defined limits (Section 
+\begin_inset LatexCommand \ref{sec:niinit}
+
+\end_inset 
+
+)
+\layout Standard
+
+The earlier version provided implementation defined limits for the maximum
+ number of match entries, the maximum number of memory descriptors, etc.
+ Rather than spanning the entire implementation, these limits are now associated
+ with individual network interfaces.
+\layout Subsection*
+
+Added User Ids (Section 
+\begin_inset LatexCommand \ref{sec:uid}
+
+\end_inset 
+
+)
+\layout Standard
+
+Group Ids had been used to simplify access control entries.
+ In particular, a process could allow access for all of the processes in
+ a group.
+ User Ids have been introduced to regain this functionality.
+ We use user ids to fill this role.
+\layout Subsection*
+
+Removed Group Ids and Rank Ids (Section 
+\begin_inset LatexCommand \ref{sec:pid}
+
+\end_inset 
+
+)
+\layout Standard
+
+The earlier version of Portals had two forms for addressing processes: <node
+ id, process id> and <group id, rank id>.
+ A process group was defined as the collection processes created during
+ application launch.
+ Each process in the group was given a unique rank id in the range 0 to
+\begin_inset Formula $n-1$
+\end_inset 
+
+ where 
+\begin_inset Formula $n$
+\end_inset 
+
+ was the number of processes in the group.
+ We removed groups because they are better handled in the runtime system.
+\layout Subsection*
+
+Match lists (Section 
+\begin_inset LatexCommand \ref{sec:meattach}
+
+\end_inset 
+
+)
+\layout Standard
+
+It is no longer illegal to have an existing match entry when calling PtlMEAttach.
+ A position argument was added to the list of arguments supplied to 
+\emph on 
+PtlMEAttach
+\emph default 
+ to specify whether the new match entry is prepended or appended to the
+ existing list.
+ If there is no existing match list, the position argument is ignored.
+\layout Subsection*
+
+Unlinking Memory Descriptors (Section 
+\begin_inset LatexCommand \ref{sec:md}
+
+\end_inset 
+
+)
+\layout Standard
+
+Previously, a memory descriptor could be unlinked if the offset exceeded
+ a threshold upon the completion of an operation.
+ In this version, the unlinking is delayed until there is a matching operation
+ which requires more memory than is currently available in the descriptor.
+ In addition to changes in section, this lead to a revision of Figure\SpecialChar ~
+
+\begin_inset LatexCommand \ref{fig:flow}
+
+\end_inset 
+
+.
+\layout Subsection*
+
+Split Phase Operations and Events (Section 
+\begin_inset LatexCommand \ref{sec:eq}
+
+\end_inset 
+
+)
+\layout Standard
+
+Previously, there were five types of events: 
+\family typewriter 
+PTL_EVENT_PUT
+\family default 
+, 
+\family typewriter 
+PTL_EVENT_GET
+\family default 
+, 
+\family typewriter 
+PTL_EVENT_REPLY
+\family default 
+, 
+\family typewriter 
+PTL_EVENT_SENT
+\family default 
+, and 
+\family typewriter 
+PTL_EVENT_ACK.
+\family default 
+The first four of these reflected the completion of potentially long operations.
+ We have introduced new event types to reflect the fact that long operations
+ have a distinct starting point and a distinct completion point.
+ Moreover, the completion may be successful or unsuccessful.
+\layout Standard
+
+In addition to providing a mechanism for reporting failure to higher levels
+ of software, this split provides an opportunity for for improved ordering
+ semantics.
+ Previously, if one process intiated two operations (e.g., two put operations)
+ on a remote process, these operations were guaranteed to complete in the
+ same order that they were initiated.
+ Now, we only guarantee that the initiation events are delivered in the
+ same order.
+ In particular, the operations do not need to complete in the order that
+ they were intiated.
+\layout Subsection*
+
+Well known proces ids (Section 
+\begin_inset LatexCommand \ref{sec:niinit}
+
+\end_inset 
+
+)
+\layout Standard
+
+To support the notion of 
+\begin_inset Quotes eld
+\end_inset 
+
+well known process ids,
+\begin_inset Quotes erd
+\end_inset 
+
+ we added a process id argument to the arguments for PtlNIInit.
+\layout Chapter*
+
+Glossary
+\layout Description
+
+API Application Programming Interface.
+ A definition of the functions and semantics provided by library of functions.
+\layout Description
+
+Initiator A 
+\emph on 
+process
+\emph default 
+ that initiates a message operation.
+\layout Description
+
+Message An application-defined unit of data that is exchanged between 
+\emph on 
+processes
+\emph default 
+.
+\layout Description
+
+Message\SpecialChar ~
+Operation Either a put operation, which writes data, or a get operation,
+ which reads data.
+\layout Description
+
+Network A network provides point-to-point communication between 
+\emph on 
+nodes
+\emph default 
+.
+ Internally, a network may provide multiple routes between endpoints (to
+ improve fault tolerance or to improve performance characteristics); however,
+ multiple paths will not be exposed outside of the network.
+\layout Description
+
+Node A node is an endpoint in a 
+\emph on 
+network
+\emph default 
+.
+ Nodes provide processing capabilities and memory.
+ A node may provide multiple processors (an SMP node) or it may act as a
+\emph on 
+gateway
+\emph default 
+ between networks.
+\layout Description
+
+Process A context of execution.
+ A process defines a virtual memory (VM) context.
+ This context is not shared with other processes.
+ Several threads may share the VM context defined by a process.
+\layout Description
+
+Target A 
+\emph on 
+process
+\emph default 
+ that is acted upon by a message operation.
+\layout Description
+
+Thread A context of execution that shares a VM context with other threads.
+\layout Standard
+
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
+
+\backslash 
+cleardoublepage
+\layout Standard
+
+\backslash 
+setcounter{page}{1}
+\backslash 
+pagenumbering{arabic}
+\end_inset 
+
+
+\layout Chapter
+
+Introduction
+\begin_inset LatexCommand \label{sec:intro}
+
+\end_inset 
+
+
+\layout Section
+
+Overview
+\layout Standard
+
+This document describes an application programming interface for message
+ passing between nodes in a system area network.
+ The goal of this interface is to improve the scalability and performance
+ of network communication by defining the functions and semantics of message
+ passing required for scaling a parallel computing system to ten thousand
+ nodes.
+ This goal is achieved by providing an interface that will allow a quality
+ implementation to take advantage of the inherently scalable design of Portals.
+\layout Standard
+
+This document is divided into several sections: 
+\layout Description
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:intro}
+
+\end_inset 
+
+---Introduction This section describes the purpose and scope of the Portals
+ API.
+\layout Description
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:apiover}
+
+\end_inset 
+
+---An\SpecialChar ~
+Overview\SpecialChar ~
+of\SpecialChar ~
+the\SpecialChar ~
+Portals\SpecialChar ~
+3.1\SpecialChar ~
+API This section gives a brief overview of the
+ Portals API.
+ The goal is to introduce the key concepts and terminology used in the descripti
+on of the API.
+\layout Description
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:api}
+
+\end_inset 
+
+---The\SpecialChar ~
+Portals\SpecialChar ~
+3.2\SpecialChar ~
+API This section describes the functions and semantics of
+ the Portals application programming interface.
+\layout Description
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:semantics}
+
+\end_inset 
+
+--The\SpecialChar ~
+Semantics\SpecialChar ~
+of\SpecialChar ~
+Message\SpecialChar ~
+Transmission This section describes the semantics
+ of message transmission.
+ In particular, the information transmitted in each type of message and
+ the processing of incoming messages.
+\layout Description
+
+Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:examples}
+
+\end_inset 
+
+---Examples This section presents several examples intended to illustrates
+ the use of the Portals API.
+\layout Section
+
+Purpose
+\layout Standard
+
+Existing message passing technologies available for commodity cluster networking
+ hardware do not meet the scalability goals required by the Cplant\SpecialChar ~
+
+\begin_inset LatexCommand \cite{Cplant}
+
+\end_inset 
+
+ project at Sandia National Laboratories.
+ The goal of the Cplant project is to construct a commodity cluster that
+ can scale to the order of ten thousand nodes.
+ This number greatly exceeds the capacity for which existing message passing
+ technologies have been designed and implemented.
+\layout Standard
+
+In addition to the scalability requirements of the network, these technologies
+ must also be able to support a scalable implementation of the Message Passing
+ Interface (MPI)\SpecialChar ~
+
+\begin_inset LatexCommand \cite{MPIstandard}
+
+\end_inset 
+
+ standard, which has become the 
+\shape italic 
+de facto
+\shape default 
+ standard for parallel scientific computing.
+ While MPI does not impose any scalability limitations, existing message
+ passing technologies do not provide the functionality needed to allow implement
+ations of MPI to meet the scalability requirements of Cplant.
+\layout Standard
+
+The following are properties of a network architecture that do not impose
+ any inherent scalability limitations: 
+\layout Itemize
+
+Connectionless - Many connection-oriented architectures, such as VIA\SpecialChar ~
+
+\begin_inset LatexCommand \cite{VIA}
+
+\end_inset 
+
+ and TCP/IP sockets, have limitations on the number of peer connections
+ that can be established.
+\layout Itemize
+
+Network independence - Many communication systems depend on the host processor
+ to perform operations in order for messages in the network to be consumed.
+ Message consumption from the network should not be dependent on host processor
+ activity, such as the operating system scheduler or user-level thread scheduler.
+\layout Itemize
+
+User-level flow control - Many communication systems manage flow control
+ internally to avoid depleting resources, which can significantly impact
+ performance as the number of communicating processes increases.
+\layout Itemize
+
+OS Bypass - High performance network communication should not involve memory
+ copies into or out of a kernel-managed protocol stack.
+\layout Standard
+
+The following are properties of a network architecture that do not impose
+ scalability limitations for an implementation of MPI:
+\layout Itemize
+
+Receiver-managed - Sender-managed message passing implementations require
+ a persistent block of memory to be available for every process, requiring
+ memory resources to increase with job size and requiring user-level flow
+ control mechanisms to manage these resources.
+\layout Itemize
+
+User-level Bypass - While OS Bypass is necessary for high-performance, it
+ alone is not sufficient to support the Progress Rule of MPI asynchronous
+ operations.
+\layout Itemize
+
+Unexpected messages - Few communication systems have support for receiving
+ messages for which there is no prior notification.
+ Support for these types of messages is necessary to avoid flow control
+ and protocol overhead.
+\layout Section
+
+Background
+\layout Standard
+
+Portals was originally designed for and implemented on the nCube machine
+ as part of the SUNMOS (Sandia/UNM OS)\SpecialChar ~
+
+\begin_inset LatexCommand \cite{SUNMOS}
+
+\end_inset 
+
+ and Puma\SpecialChar ~
+
+\begin_inset LatexCommand \cite{PumaOS}
+
+\end_inset 
+
+ lightweight kernel development projects.
+ Portals went through two design phases, the latter of which is used on
+ the 4500-node Intel TeraFLOPS machine\SpecialChar ~
+
+\begin_inset LatexCommand \cite{TFLOPS}
+
+\end_inset 
+
+.
+ Portals have been very successful in meeting the needs of such a large
+ machine, not only as a layer for a high-performance MPI implementation\SpecialChar ~
+
+\begin_inset LatexCommand \cite{PumaMPI}
+
+\end_inset 
+
+, but also for implementing the scalable run-time environment and parallel
+ I/O capabilities of the machine.
+\layout Standard
+
+The second generation Portals implementation was designed to take full advantage
+ of the hardware architecture of large MPP machines.
+ However, efforts to implement this same design on commodity cluster technology
+ identified several limitations, due to the differences in network hardware
+ as well as to shortcomings in the design of Portals.
+\layout Section
+
+Scalability
+\layout Standard
+
+The primary goal in the design of Portals is scalability.
+ Portals are designed specifically for an implementation capable of supporting
+ a parallel job running on tens of thousands of nodes.
+ Performance is critical only in terms of scalability.
+ That is, the level of message passing performance is characterized by how
+ far it allows an application to scale and not by how it performs in micro-bench
+marks (e.g., a two node bandwidth or latency test).
+\layout Standard
+
+The Portals API is designed to allow for scalability, not to guarantee it.
+ Portals cannot overcome the shortcomings of a poorly designed application
+ program.
+ Applications that have inherent scalability limitations, either through
+ design or implementation, will not be transformed by Portals into scalable
+ applications.
+ Scalability must be addressed at all levels.
+ Portals do not inhibit scalability, but do not guarantee it either.
+\layout Standard
+
+To support scalability, the Portals interface maintains a minimal amount
+ of state.
+ Portals provide reliable, ordered delivery of messages between pairs of
+ processes.
+ They are connectionless: a process is not required to explicitly establish
+ a point-to-point connection with another process in order to communicate.
+ Moreover, all buffers used in the transmission of messages are maintained
+ in user space.
+ The target process determines how to respond to incoming messages, and
+ messages for which there are no buffers are discarded.
+\layout Section
+
+Communication Model
+\layout Standard
+
+Portals combine the characteristics of both one-side and two-sided communication.
+ They define a 
+\begin_inset Quotes eld
+\end_inset 
+
+matching put
+\begin_inset Quotes erd
+\end_inset 
+
+ operation and a 
+\begin_inset Quotes eld
+\end_inset 
+
+matching get
+\begin_inset Quotes erd
+\end_inset 
+
+ operation.
+ The destination of a put (or send) is not an explicit address; instead,
+ each message contains a set of match bits that allow the receiver to determine
+ where incoming messages should be placed.
+ This flexibility allows Portals to support both traditional one-sided operation
+s and two-sided send/receive operations.
+\layout Standard
+
+Portals allows the target to determine whether incoming messages are acceptable.
+ A target process can choose to accept message operations from any specific
+ process or can choose to ignore message operations from any specific process.
+\layout Section
+
+Zero Copy, OS Bypass and Application Bypass
+\layout Standard
+
+In traditional system architectures, network packets arrive at the network
+ interface card (NIC), are passed through one or more protocol layers in
+ the operating system, and eventually copied into the address space of the
+ application.
+ As network bandwidth began to approach memory copy rates, reduction of
+ memory copies became a critical concern.
+ This concern lead to the development of zero-copy message passing protocols
+ in which message copies are eliminated or pipelined to avoid the loss of
+ bandwidth.
+\layout Standard
+
+A typical zero-copy protocol has the NIC generate an interrupt for the CPU
+ when a message arrives from the network.
+ The interrupt handler then controls the transfer of the incoming message
+ into the address space of the appropriate application.
+ The interrupt latency, the time from the initiation of an interrupt until
+ the interrupt handler is running, is fairly significant.
+ To avoid this cost, some modern NICs have processors that can be programmed
+ to implement part of a message passing protocol.
+ Given a properly designed protocol, it is possible to program the NIC to
+ control the transfer of incoming messages, without needing to interrupt
+ the CPU.
+ Because this strategy does not need to involve the OS on every message
+ transfer, it is frequently called 
+\begin_inset Quotes eld
+\end_inset 
+
+OS Bypass.
+\begin_inset Quotes erd
+\end_inset 
+
+ ST\SpecialChar ~
+
+\begin_inset LatexCommand \cite{ST}
+
+\end_inset 
+
+, VIA\SpecialChar ~
+
+\begin_inset LatexCommand \cite{VIA}
+
+\end_inset 
+
+, FM\SpecialChar ~
+
+\begin_inset LatexCommand \cite{FM2}
+
+\end_inset 
+
+, GM\SpecialChar ~
+
+\begin_inset LatexCommand \cite{GM}
+
+\end_inset 
+
+, and Portals are examples of OS Bypass protocols.
+\layout Standard
+
+Many protocols that support OS Bypass still require that the application
+ actively participate in the protocol to ensure progress.
+ As an example, the long message protocol of PM requires that the application
+ receive and reply to a request to put or get a long message.
+ This complicates the runtime environment, requiring a thread to process
+ incoming requests, and significantly increases the latency required to
+ initiate a long message protocol.
+ The Portals message passing protocol does not require activity on the part
+ of the application to ensure progress.
+ We use the term 
+\begin_inset Quotes eld
+\end_inset 
+
+Application Bypass
+\begin_inset Quotes erd
+\end_inset 
+
+ to refer to this aspect of the Portals protocol.
+\layout Section
+
+Faults 
+\layout Standard
+
+Given the number of components that we are dealing with and the fact that
+ we are interested in supporting applications that run for very long times,
+ failures are inevitable.
+ The Portals API recognizes that the underlying transport may not be able
+ to successfully complete an operation once it has been initiated.
+ This is reflected in the fact that the Portals API reports three types
+ of events: events indicating the initiation of an operation, events indicating
+ the successful completion of an operation, and events indicating the unsuccessf
+ul completion of an operation.
+ Every initiation event is eventually followed by a successful completion
+ event or an unsuccessful completion event.
+\layout Standard
+
+Between the time an operation is started and the time that the operation
+ completes (successfully or unsuccessfully), any memory associated with
+ the operation should be considered volatile.
+ That is, the memory may be changed in unpredictable ways while the operation
+ is progressing.
+ Once the operation completes, the memory associated with the operation
+ will not be subject to further modification (from this operation).
+ Notice that unsuccessful operations may alter memory in an essentially
+ unpredictable fashion.
+\layout Chapter
+
+An Overview of the Portals API
+\begin_inset LatexCommand \label{sec:apiover}
+
+\end_inset 
+
+
+\layout Standard
+
+In this section, we give a conceptual overview of the Portals API.
+ The goal is to provide a context for understanding the detailed description
+ of the API presented in the next section.
+\layout Section
+
+Data Movement
+\begin_inset LatexCommand \label{sec:dmsemantics}
+
+\end_inset 
+
+
+\layout Standard
+
+A Portal represents an opening in the address space of a process.
+ Other processes can use a Portal to read (get) or write (put) the memory
+ associated with the portal.
+ Every data movement operation involves two processes, the 
+\series bold 
+initiator
+\series default 
+ and the 
+\series bold 
+target
+\series default 
+.
+ The initiator is the process that initiates the data movement operation.
+ The target is the process that responds to the operation by either accepting
+ the data for a put operation, or replying with the data for a get operation.
+\layout Standard
+
+In this discussion, activities attributed to a process may refer to activities
+ that are actually performed by the process or 
+\emph on 
+on behalf of the process
+\emph default 
+.
+ The inclusiveness of our terminology is important in the context of 
+\emph on 
+application bypass
+\emph default 
+.
+ In particular, when we note that the target sends a reply in the case of
+ a get operation, it is possible that reply will be generated by another
+ component in the system, bypassing the application.
+\layout Standard
+
+Figures\SpecialChar ~
+
+\begin_inset LatexCommand \ref{fig:put}
+
+\end_inset 
+
+ and 
+\begin_inset LatexCommand \ref{fig:get}
+
+\end_inset 
+
+ present graphical interpretations of the Portal data movement operations:
+ put and get.
+ In the case of a put operation, the initiator sends a put request message
+ containing the data to the target.
+ The target translates the Portal addressing information in the request
+ using its local Portal structures.
+ When the request has been processed, the target optionally sends an acknowledge
+ment message.
+\layout Standard
+
+
+\begin_inset Float figure
+placement htbp
+wide false
+collapsed false
+
+\layout Standard
+\align center 
+
+\begin_inset Graphics FormatVersion 1
+       filename put.eps
+       display color
+       size_type 0
+       rotateOrigin center
+       lyxsize_type 1
+       lyxwidth 218pt
+       lyxheight 119pt
+\end_inset 
+
+
+\layout Caption
+
+Portal Put (Send)
+\begin_inset LatexCommand \label{fig:put}
+
+\end_inset 
+
+
+\end_inset 
+
+
+\layout Standard
+
+In the case of a get operation, the initiator sends a get request to the
+ target.
+ As with the put operation, the target translates the Portal addressing
+ information in the request using its local Portal structures.
+ Once it has translated the Portal addressing information, the target sends
+ a reply that includes the requested data.
+\layout Standard
+
+
+\begin_inset Float figure
+placement htbp
+wide false
+collapsed false
+
+\layout Standard
+\align center 
+
+\begin_inset Graphics FormatVersion 1
+       filename get.eps
+       display color
+       size_type 0
+       rotateOrigin center
+       lyxsize_type 1
+       lyxwidth 218pt
+       lyxheight 119pt
+\end_inset 
+
+
+\layout Caption
+
+Portal Get
+\begin_inset LatexCommand \label{fig:get}
+
+\end_inset 
+
+
+\end_inset 
+
+
+\layout Standard
+
+We should note that Portal address translations are only performed on nodes
+ that respond to operations initiated by other nodes.
+ Acknowledgements and replies to get operations bypass the portals address
+ translation structures.
+\layout Section
+
+Portal Addressing
+\begin_inset LatexCommand \label{subsec:paddress}
+
+\end_inset 
+
+
+\layout Standard
+
+One-sided data movement models (e.g., shmem\SpecialChar ~
+
+\begin_inset LatexCommand \cite{CraySHMEM}
+
+\end_inset 
+
+, ST\SpecialChar ~
+
+\begin_inset LatexCommand \cite{ST}
+
+\end_inset 
+
+, MPI-2\SpecialChar ~
+
+\begin_inset LatexCommand \cite{MPI2}
+
+\end_inset 
+
+) typically use a triple to address memory on a remote node.
+ This triple consists of a process id, memory buffer id, and offset.
+ The process id identifies the target process, the memory buffer id specifies
+ the region of memory to be used for the operation, and the offset specifies
+ an offset within the memory buffer.
+\layout Standard
+
+In addition to the standard address components (process id, memory buffer
+ id, and offset), a Portal address includes a set of match bits.
+ This addressing model is appropriate for supporting one-sided operations
+ as well as traditional two-sided message passing operations.
+ Specifically, the Portals API provides the flexibility needed for an efficient
+ implementation of MPI-1, which defines two-sided operations with one-sided
+ completion semantics.
+\layout Standard
+
+Figure\SpecialChar ~
+
+\begin_inset LatexCommand \ref{fig:portals}
+
+\end_inset 
+
+ presents a graphical representation of the structures used by a target
+ in the interpretation of a Portal address.
+ The process id is used to route the message to the appropriate node and
+ is not reflected in this diagram.
+ The memory buffer id, called the 
+\series bold 
+portal id
+\series default 
+, is used as an index into the Portal table.
+ Each element of the Portal table identifies a match list.
+ Each element of the match list specifies two bit patterns: a set of 
+\begin_inset Quotes eld
+\end_inset 
+
+don't care
+\begin_inset Quotes erd
+\end_inset 
+
+ bits, and a set of 
+\begin_inset Quotes eld
+\end_inset 
+
+must match
+\begin_inset Quotes erd
+\end_inset 
+
+ bits.
+ In addition to the two sets of match bits, each match list element has
+ at most one memory descriptor.
+ Each memory descriptor identifies a memory region and an optional event
+ queue.
+ The memory region specifies the memory to be used in the operation and
+ the event queue is used to record information about these operations.
+\layout Standard
+
+
+\begin_inset Float figure
+placement htbp
+wide false
+collapsed false
+
+\layout Standard
+\align center 
+
+\begin_inset Graphics FormatVersion 1
+       filename portals.eps
+       display color
+       size_type 0
+       rotateOrigin center
+       lyxsize_type 1
+       lyxwidth 305pt
+       lyxheight 106pt
+\end_inset 
+
+
+\layout Caption
+
+Portal Addressing Structures
+\begin_inset LatexCommand \label{fig:portals}
+
+\end_inset 
+
+
+\end_inset 
+
+
+\layout Standard
+
+Figure\SpecialChar ~
+
+\begin_inset LatexCommand \ref{fig:flow}
+
+\end_inset 
+
+ illustrates the steps involved in translating a Portal address, starting
+ from the first element in a match list.
+ If the match criteria specified in the match list entry are met and the
+ memory descriptor list accepts the operation
+\begin_inset Foot
+collapsed true
+
+\layout Standard
+
+Memory descriptors can reject operations because a threshold has been exceeded
+ or because the memory region does not have sufficient space, see Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:md}
+
+\end_inset 
+
+
+\end_inset 
+
+, the operation (put or get) is performed using the memory region specified
+ in the memory descriptor.
+ If the memory descriptor specifies that it is to be unlinked when a threshold
+ has been exceeded, the match list entry is removed from the match list
+ and the resources associated with the memory descriptor and match list
+ entry are reclaimed.
+ Finally, if there is an event queue specified in the memory descriptor,
+ the operation is logged in the event queue.
+\layout Standard
+
+
+\begin_inset Float figure
+placement htbp
+wide false
+collapsed false
+
+\layout Standard
+\align center 
+
+\begin_inset Graphics FormatVersion 1
+       filename flow_new.eps
+       display color
+       size_type 0
+       rotateOrigin center
+       lyxsize_type 1
+       lyxwidth 447pt
+       lyxheight 282pt
+\end_inset 
+
+
+\layout Caption
+
+Portals Address Translation
+\begin_inset LatexCommand \label{fig:flow}
+
+\end_inset 
+
+
+\end_inset 
+
+
+\layout Standard
+
+If the match criteria specified in the match list entry are not met, or
+ there is no memory descriptor associated with the match list entry, or
+ the memory descriptor associated with the match list entry rejects the
+ operation, the address translation continues with the next match list entry.
+ If the end of the match list has been reached, the address translation
+ is aborted and the incoming requested is discarded.
+\layout Section
+
+Access Control
+\layout Standard
+
+A process can control access to its portals using an access control list.
+ Each entry in the access control list specifies a process id and a Portal
+ table index.
+ The access control list is actually an array of entries.
+ Each incoming request includes an index into the access control list (i.e.,
+ a 
+\begin_inset Quotes eld
+\end_inset 
+
+cookie
+\begin_inset Quotes erd
+\end_inset 
+
+ or hint).
+ If the id of the process issuing the request doesn't match the id specified
+ in the access control list entry or the Portal table index specified in
+ the request doesn't match the Portal table index specified in the access
+ control list entry, the request is rejected.
+ Process identifiers and Portal table indexes may include wild card values
+ to increase the flexibility of this mechanism.
+\layout Standard
+
+Two aspects of this design merit further discussion.
+ First, the model assumes that the information in a message header, the
+ sender's id in particular, is trustworthy.
+ In most contexts, we assume that the entity that constructs the header
+ is trustworthy; however, using cryptographic techniques, we could easily
+ devise a protocol that would ensure the authenticity of the sender.
+\layout Standard
+
+Second, because the access check is performed by the receiver, it is possible
+ that a malicious process will generate thousands of messages that will
+ be denied by the receiver.
+ This could saturate the network and/or the receiver, resulting in a 
+\emph on 
+denial of service
+\emph default 
+ attack.
+ Moving the check to the sender using capabilities, would remove the potential
+ for this form of attack.
+ However, the solution introduces the complexities of capability management
+ (exchange of capabilities, revocation, protections, etc).
+\layout Section
+
+Multi-threaded Applications
+\begin_inset LatexCommand \label{sec:threads}
+
+\end_inset 
+
+\layout Standard
+
+The Portals API supports a generic view of multi-threaded applications.
+ From the perspective of the Portals API, an application program is defined
+ by a set of processes.
+ Each process defines a unique address space.
+ The Portals API defines access to this address space from other processes
+ (using portals addressing and the data movement operations).
+ A process may have one or more 
+\emph on 
+threads
+\emph default 
+ executing in its address space.
+\layout Standard
+
+With the exception of 
+\emph on 
+PtlEQWait
+\emph default 
+ every function in the Portals API is non-blocking and atomic with respect
+ to both other threads and external operations that result from data movement
+ operations.
+ While individual operations are atomic, sequences of these operations may
+ be interleaved between different threads and with external operations.
+ The Portals API does not provide any mechanisms to control this interleaving.
+ It is expected that these mechanisms will be provided by the API used to
+ create threads.
+\layout Chapter
+
+The Portals API
+\begin_inset LatexCommand \label{sec:api}
+
+\end_inset 
+
+
+\layout Section
+
+Naming Conventions
+\begin_inset LatexCommand \label{sec:conv}
+
+\end_inset 
+
+
+\layout Standard
+
+The Portals API defines two types of entities: functions and types.
+ Function always start with 
+\emph on 
+Ptl
+\emph default 
+ and use mixed upper and lower case.
+ When used in the body of this report, function names appear in italic face,
+ e.g., 
+\emph on 
+PtlInit
+\emph default 
+.
+ The functions associated with an object type will have names that start
+ with 
+\emph on 
+Ptl
+\emph default 
+, followed by the two letter object type code shown in Table\SpecialChar ~
+
+\begin_inset LatexCommand \ref{tab:objcodes}
+
+\end_inset 
+
+.
+ As an example, the function 
+\emph on 
+PtlEQAlloc
+\emph default 
+ allocates resources for an event queue.
+\layout Standard
+
+
+\begin_inset Float table
+placement htbp
+wide false
+collapsed false
+
+\layout Caption
+
+Object Type Codes
+\begin_inset LatexCommand \label{tab:objcodes}
+
+\end_inset 
+
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
+\backslash 
+medskip
+\newline 
+  
+\end_inset 
+
+
+\layout Standard
+\align center 
+
+\size small 
+
+\begin_inset  Tabular
+<lyxtabular version="3" rows="5" columns="3">
+<features firstHeadEmpty="true">
+<column alignment="left" valignment="top" width="0pt">
+<column alignment="left" valignment="top" width="0pt">
+<column alignment="left" valignment="top" width="0pt">
+<row bottomline="true">
+<cell alignment="left" valignment="top" bottomline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\emph on 
+xx
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" bottomline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+ Name 
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" bottomline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+ Section 
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="left" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+EQ 
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+ Event Queue 
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\begin_inset LatexCommand \ref{sec:eq}
+
+\end_inset 
+
+
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="left" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+ MD 
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+ Memory Descriptor 
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\begin_inset LatexCommand \ref{sec:md}
+
+\end_inset 
+
+
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="left" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+ ME 
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+ Match list Entry 
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\begin_inset LatexCommand \ref{sec:me}
+
+\end_inset 
+
+
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="left" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+ NI 
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+ Network Interface 
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+\begin_inset LatexCommand \ref{sec:ni}
+
+\end_inset 
+
+
+\end_inset 
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset 
+
+
+\end_inset 
+
+
+\layout Standard
+
+Type names use lower case with underscores to separate words.
+ Each type name starts with 
+\family typewriter 
+ptl
+\family default 
+_ and ends with 
+\family typewriter 
+_t
+\family default 
+.
+ When used in the body of this report, type names appear in a fixed font,
+ e.g., 
+\family typewriter 
+ptl_match_bits_t
+\family default 
+.
+\layout Standard
+
+Names for constants use upper case with underscores to separate words.
+ Each constant name starts with 
+\family typewriter 
+PTL_
+\family default 
+.
+ When used in the body of this report, type names appear in a fixed font,
+ e.g., 
+\family typewriter 
+PTL_OK
+\family default 
+.
+\layout Section
+
+Base Types
+\layout Standard
+
+The Portals API defines a variety of base types.
+ These types represent a simple renaming of the base types provided by the
+ C programming language.
+ In most cases these new type names have been introduced to improve type
+ safety and to avoid issues arising from differences in representation sizes
+ (e.g., 16-bit or 32-bit integers).
+\layout Subsection
+
+Sizes
+\begin_inset LatexCommand \label{sec:size-t}
+
+\end_inset 
+
+\layout Standard
+
+The type 
+\family typewriter 
+ptl_size_t
+\family default 
+ is an unsigned 64-bit integral type used for representing sizes.
+\layout Subsection
+
+Handles
+\begin_inset LatexCommand \label{sec:handle-type}
+
+\end_inset 
+
+\layout Standard
+
+Objects maintained by the API are accessed through handles.
+ Handle types have names of the form 
+\family typewriter 
+ptl_handle_
+\emph on 
+xx
+\emph default 
+_t
+\family default 
+, where 
+\emph on 
+xx
+\emph default 
+ is one of the two letter object type codes shown in Table\SpecialChar ~
+
+\begin_inset LatexCommand \ref{tab:objcodes}
+
+\end_inset 
+
+.
+ For example, the type 
+\family typewriter 
+ptl_handle_ni_t
+\family default 
+ is used for network interface handles.
+\layout Standard
+
+Each type of object is given a unique handle type to enhance type checking.
+ The type, 
+\family typewriter 
+ptl_handle_any_t
+\family default 
+, can be used when a generic handle is needed.
+ Every handle value can be converted into a value of type 
+\family typewriter 
+ptl_handle_any_t
+\family default 
+ without loss of information.
+\layout Standard
+
+Handles are not simple values.
+ Every portals object is associated with a specific network interface and
+ an identifier for this interface (along with an object identifier) is part
+ of the handle for the object.
+\layout Standard
+
+The special value 
+\family typewriter 
+PTL_EQ_NONE
+\family default 
+, of type 
+\family typewriter 
+ptl_handle_eq_t
+\family default 
+, is used to indicate the absence of an event queue.
+ See sections 
+\begin_inset LatexCommand \ref{sec:mdfree}
+
+\end_inset 
+
+ and\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:mdupdate}
+
+\end_inset 
+
+ for uses of this value.
+\layout Subsection
+
+Indexes
+\begin_inset LatexCommand \label{sec:index-type}
+
+\end_inset 
+
+\layout Standard
+
+The types 
+\family typewriter 
+ptl_pt_index_t
+\family default 
+ and 
+\family typewriter 
+ptl_ac_index_t
+\family default 
+ are integral types used for representing Portal table indexes and access
+ control tables indexes, respectively.
+ See section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:niinit}
+
+\end_inset 
+
+ for limits on values of these types.
+\layout Subsection
+
+Match Bits
+\begin_inset LatexCommand \label{sec:mb-type}
+
+\end_inset 
+
+\layout Standard
+
+The type 
+\family typewriter 
+ptl_match_bits_t
+\family default 
+ is capable of holding unsigned 64-bit integer values.
+\layout Subsection
+
+Network Interfaces
+\begin_inset LatexCommand \label{sec:ni-type}
+
+\end_inset 
+
+\layout Standard
+
+The type 
+\family typewriter 
+ptl_interface_t
+\family default 
+ is an integral type used for identifying different network interfaces.
+ Users will need to consult the local documentation to determine appropriate
+ values for the interfaces available.
+ The special value 
+\family typewriter 
+PTL_IFACE_DEFAULT
+\family default 
+ identifies the default interface.
+\layout Subsection
+
+Identifiers
+\begin_inset LatexCommand \label{sec:id-type}
+
+\end_inset 
+
+
+\layout Standard
+
+The type 
+\family typewriter 
+ptl_nid_t
+\family default 
+ is an integral type used for representing node ids
+\family typewriter 
+, ptl_pid_t
+\family default 
+ is an integral type for representing process ids, and 
+\family typewriter 
+ptl_uid_t 
+\family default 
+is an integral type for representing user ids.
+\layout Standard
+
+The special values 
+\family typewriter 
+PTL_PID_ANY
+\family default 
+ matches any process identifier, PTL_NID_ANY matches any node identifier,
+ and 
+\family typewriter 
+PTL_UID_ANY
+\family default 
+ matches any user identifier.
+ See sections 
+\begin_inset LatexCommand \ref{sec:meattach}
+
+\end_inset 
+
+ and\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:acentry}
+
+\end_inset 
+
+ for uses of these values.
+\layout Subsection
+
+Status Registers
+\begin_inset LatexCommand \label{sec:stat-type}
+
+\end_inset 
+
+
+\layout Standard
+
+Each network interface maintains an array of status registers that can be
+ accessed using the 
+\family typewriter 
+PtlNIStatus
+\family default 
+ function (see Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:nistatus}
+
+\end_inset 
+
+).
+ The type 
+\family typewriter 
+ptl_sr_index_t
+\family default 
+ defines the types of indexes that can be used to access the status registers.
+ The only index defined for all implementations is 
+\family typewriter 
+PTL_SR_DROP_COUNT
+\family default 
+ which identifies the status register that counts the dropped requests for
+ the interface.
+ Other indexes (and registers) may be defined by the implementation.
+\layout Standard
+
+The type 
+\family typewriter 
+ptl_sr_value_t
+\family default 
+ defines the types of values held in status registers.
+ This is a signed integer type.
+ The size is implementation dependent, but must be at least 32 bits.
+\layout Section
+
+Initialization and Cleanup
+\begin_inset LatexCommand \label{sec:init}
+
+\end_inset 
+
+
+\layout Standard
+
+The Portals API includes a function, 
+\emph on 
+PtlInit
+\emph default 
+, to initialize the library and a function, 
+\emph on 
+PtlFini
+\emph default 
+, to cleanup after the application is done using the library.
+\layout Subsection
+
+PtlInit
+\begin_inset LatexCommand \label{sec:ptlinit}
+
+\end_inset 
+
+
+\layout LyX-Code
+
+int PtlInit( int *max_interfaces );
+\layout Standard
+\noindent 
+The 
+\emph on 
+PtlInit
+\emph default 
+ function initializes the Portals library.
+ PtlInit must be called at least once by a process before any thread makes
+ a Portals function call, but may be safely called more than once.
+\layout Subsubsection
+
+Return Codes
+\layout Description
+
+PTL_OK Indicates success.
+\layout Description
+
+PTL_FAIL Indicates an error during initialization.
+\layout Description
+
+PTL_SEGV Indicates that 
+\family typewriter 
+max_interfaces
+\family default 
+ is not a legal address.
+\layout Subsubsection
+
+Arguments
+\layout Standard
+
+
+\begin_inset  Tabular
+<lyxtabular version="3" rows="1" columns="3">
+<features>
+<column alignment="right" valignment="top" width="0pt">
+<column alignment="center" valignment="top" width="0pt">
+<column alignment="left" valignment="top" width="5in">
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+max_interfaces
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+output
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+On successful return, this location will hold the maximum number of interfaces
+ that can be initialized.
+\end_inset 
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset 
+
+
+\layout Subsection
+
+PtlFini
+\begin_inset LatexCommand \label{sec:ptlfini}
+
+\end_inset 
+
+
+\layout LyX-Code
+
+void PtlFini( void );
+\layout Standard
+\noindent 
+The 
+\emph on 
+PtlFini
+\emph default 
+ function cleans up after the Portals library is no longer needed by a process.
+ After this function is called, calls to any of the functions defined by
+ the Portal API or use of the structures set up by the Portals API will
+ result in undefined behavior.
+ This function should be called once and only once during termination by
+ a process.
+ Typically, this function will be called in the exit sequence of a process.
+ Individual threads should not call PtlFini when they terminate.
+\layout Section
+
+Network Interfaces
+\begin_inset LatexCommand \label{sec:ni}
+
+\end_inset 
+
+\layout Standard
+
+The Portals API supports the use of multiple network interfaces.
+ However, each interface is treated as an independent entity.
+ Combining interfaces (e.g., 
+\begin_inset Quotes eld
+\end_inset 
+
+bonding
+\begin_inset Quotes erd
+\end_inset 
+
+ to create a higher bandwidth connection) must be implemented by the application
+ or embedded in the underlying network.
+ Interfaces are treated as independent entities to make it easier to cache
+ information on individual network interface cards.
+\layout Standard
+
+Once initialized, each interface provides a Portal table, an access control
+ table, and a collection of status registers.
+ See Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:me}
+
+\end_inset 
+
+ for a discussion of updating Portal table entries using the 
+\emph on 
+PtlMEAttach
+\emph default 
+ function.
+ See Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:ac}
+
+\end_inset 
+
+ for a discussion of the initialization and updating of entries in the access
+ control table.
+ See Section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:nistatus}
+
+\end_inset 
+
+ for a discussion of the 
+\emph on 
+PtlNIStatus
+\emph default 
+ function which can be used to determine the value of a status register.
+\layout Standard
+
+Every other type of Portal object (e.g., memory descriptor, event queue, or
+ match list entry) is associated with a specific network interface.
+ The association to a network interface is established when the object is
+ created and is encoded in the handle for the object.
+\layout Standard
+
+Each network interface is initialized and shutdown independently.
+ The initialization routine, 
+\emph on 
+PtlNIInit
+\emph default 
+, returns a handle for an interface object which is used in all subsequent
+ Portal operations.
+ The 
+\emph on 
+PtlNIFini
+\emph default 
+ function is used to shutdown an interface and release any resources that
+ are associated with the interface.
+ Network interface handles are associated with processes, not threads.
+ All threads in a process share all of the network interface handles.
+\layout Standard
+
+The Portals API also defines the 
+\emph on 
+PtlNIStatus
+\emph default 
+ function to query the status registers for a network interface, the 
+\emph on 
+PtlNIDist
+\emph default 
+ function to determine the 
+\begin_inset Quotes eld
+\end_inset 
+
+distance
+\begin_inset Quotes erd
+\end_inset 
+
+ to another process, and the 
+\emph on 
+PtlNIHandle
+\emph default 
+ function to determine the network interface that an object is associated
+ with.
+\layout Subsection
+
+PtlNIInit
+\begin_inset LatexCommand \label{sec:niinit}
+
+\end_inset 
+
+
+\layout LyX-Code
+
+typedef struct {
+\newline 
+    int            max_match_entries;
+\newline 
+    int            max_mem_descriptors;
+\newline 
+    int            max_event_queues;
+\newline 
+    ptl_ac_index_t max_atable_index; 
+\newline 
+    ptl_pt_index_t max_ptable_index;
+\newline 
+} ptl_ni_limits_t;
+\newline 
+
+\newline 
+int PtlNIInit( ptl_interface_t  interface
+\newline 
+               ptl_pid_t        pid,
+\newline 
+               ptl_ni_limits_t* desired,
+\newline 
+               ptl_ni_limits_t* actual,
+\newline 
+               ptl_handle_ni_t* handle );
+\layout Standard
+
+Values of type 
+\family typewriter 
+ptl_ni_limits_t
+\family default 
+ include the following members:
+\layout Description
+
+max_match_entries Maximum number of match entries that can be allocated
+ at any one time.
+\layout Description
+
+max_mem_descriptors Maximum number of memory descriptors that can be allocated
+ at any one time.
+\layout Description
+
+max_event_queues Maximum number of event queues that can be allocated at
+ any one time.
+\layout Description
+
+max_atable_index Largest access control table index for this interface,
+ valid indexes range from zero to 
+\family typewriter 
+max_atable_index
+\family default 
+, inclusive.
+\layout Description
+
+max_ptable_index Largest Portal table index for this interface, valid indexes
+ range from zero to 
+\family typewriter 
+max_ptable_index
+\family default 
+, inclusive.
+\layout Standard
+\noindent 
+The 
+\emph on 
+PtlNIInit
+\emph default 
+ function is used to initialized the Portals API for a network interface.
+ This function must be called at least once by each process before any other
+ operations that apply to the interface by any process or thread.
+ For subsequent calls to 
+\shape italic 
+PtlNIInit
+\shape default 
+ from within the same process (either by different threads or the same thread),
+ the desired limits will be ignored and the call will return the existing
+ NI handle.
+\layout Subsubsection
+
+Return Codes
+\layout Description
+
+PTL_OK Indicates success.
+\layout Description
+
+PTL_NOINIT Indicates that the Portals API has not been successfully initialized.
+\layout Description
+
+PTL_INIT_DUP Indicates a duplicate initialization of 
+\family typewriter 
+interface
+\family default 
+.
+\layout Description
+
+PTL_INIT_INV Indicates that 
+\family typewriter 
+interface
+\family default 
+ is not a valid network interface.
+\layout Description
+
+PTL_NOSPACE Indicates that there is insufficient memory to initialize the
+ interface.
+\layout Description
+
+PTL_INV_PROC Indicates that 
+\family typewriter 
+pid
+\family default 
+ is not a valid process id.
+\layout Description
+
+PTL_SEGV Indicates that 
+\family typewriter 
+actual 
+\family default 
+or
+\family typewriter 
+ handle
+\family default 
+ is not a legal address.
+\layout Subsubsection
+
+Arguments
+\layout Standard
+
+
+\begin_inset  Tabular
+<lyxtabular version="3" rows="5" columns="3">
+<features>
+<column alignment="right" valignment="top" width="0pt">
+<column alignment="center" valignment="top" width="0pt">
+<column alignment="left" valignment="top" width="4.7in">
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+interface
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+input
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+Identifies the network interface to be initialized.
+  (See section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:ni-type}
+
+\end_inset 
+
+ for a discussion of  values used to identify network interfaces.)
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+pid
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+input
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+Identifies the desired process id (for well known process ids).
+ The value 
+\family typewriter 
+PTL_PID_ANY
+\family default 
+ may be used to have the process id assigned by the underlying library.
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+desired
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+input
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+If non-NULL, points to a structure that holds the desired limits.
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+actual
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+output
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+On successful return, the location pointed to by actual will hold the actual
+ limits.
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+handle
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+output
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+On successful return, this location will hold a  handle for the interface.
+\end_inset 
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset 
+
+
+\layout Comment
+
+The use of desired is implementation dependent.
+ In particular, an implementation may choose to ignore this argument.
+\layout Subsection
+
+PtlNIFini
+\begin_inset LatexCommand \label{sec:nifini}
+
+\end_inset 
+
+
+\layout LyX-Code
+
+int PtlNIFini( ptl_handle_ni_t interface );
+\layout Standard
+\noindent 
+The 
+\emph on 
+PtlNIFini
+\emph default 
+ function is used to release the resources allocated for a network interface.
+ Once the 
+\emph on 
+PtlNIFini
+\emph default 
+ operation has been started, the results of pending API operations (e.g.,
+ operations initiated by another thread) for this interface are undefined.
+ Similarly, the effects of incoming operations (puts and gets) or return
+ values (acknowledgements and replies) for this interface are undefined.
+\layout Subsubsection
+
+Return Codes
+\layout Description
+
+PTL_OK Indicates success.
+\layout Description
+
+PTL_NOINIT Indicates that the Portals API has not been successfully initialized.
+\layout Description
+
+PTL_INV_NI Indicates that 
+\family typewriter 
+interface
+\family default 
+ is not a valid network interface handle.
+\layout Subsubsection
+
+Arguments
+\layout Standard
+
+
+\begin_inset  Tabular
+<lyxtabular version="3" rows="1" columns="3">
+<features>
+<column alignment="right" valignment="top" width="0pt">
+<column alignment="center" valignment="top" width="0pt">
+<column alignment="center" valignment="top" width="0pt">
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+interface
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+input
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+A handle for the interface to shutdown.
+\end_inset 
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset 
+
+
+\layout Subsection
+
+PtlNIStatus
+\begin_inset LatexCommand \label{sec:nistatus}
+
+\end_inset 
+
+
+\layout LyX-Code
+
+int PtlNIStatus( ptl_handle_ni_t interface,
+\newline 
+                 ptl_sr_index_t  status_register,
+\newline 
+                 ptl_sr_value_t* status );
+\layout Standard
+\noindent 
+The 
+\emph on 
+PtlNIStatus
+\emph default 
+ function returns the value of a status register for the specified interface.
+ (See section\SpecialChar ~
+
+\begin_inset LatexCommand \ref{sec:stat-type}
+
+\end_inset 
+
+ for more information on status register indexes and status register values.)
+\layout Subsubsection
+
+Return Codes
+\layout Description
+
+PTL_OK Indicates success.
+\layout Description
+
+PTL_NOINIT Indicates that the Portals API has not been successfully initialized.
+\layout Description
+
+PTL_INV_NI Indicates that 
+\family typewriter 
+interface
+\family default 
+ is not a valid network interface handle.
+\layout Description
+
+PTL_INV_SR_INDX Indicates that 
+\family typewriter 
+status_register
+\family default 
+ is not a valid status register.
+\layout Description
+
+PTL_SEGV Indicates that 
+\family typewriter 
+status
+\family default 
+ is not a legal address.
+\layout Subsubsection
+
+Arguments
+\layout Standard
+
+
+\begin_inset  Tabular
+<lyxtabular version="3" rows="3" columns="3">
+<features>
+<column alignment="right" valignment="top" width="0pt">
+<column alignment="center" valignment="top" width="0pt">
+<column alignment="left" valignment="top" width="4.7in">
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+interface
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+input
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+A handle for the interface to use.
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+status_register
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+input
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+An index for the status register to read.
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+status
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+output
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+On successful return, this location will hold the current value of the status
+ register.
+\end_inset 
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset 
+
+
+\layout Comment
+
+The only status register that must be defined is a drop count register (
+\family typewriter 
+PTL_SR_DROP_COUNT
+\family default 
+).
+ Implementations may define additional status registers.
+ Identifiers for the indexes associated with these registers should start
+ with the prefix 
+\family typewriter 
+PTL_SR_
+\family default 
+.
+\layout Subsection
+
+PtlNIDist
+\layout LyX-Code
+
+int PtlNIDist( ptl_handle_ni_t  interface,
+\newline 
+               ptl_process_id_t process,
+\newline 
+               unsigned long*   distance );
+\layout Standard
+\noindent 
+The 
+\emph on 
+PtlNIDist
+\emph default 
+ function returns the distance to another process using the specified interface.
+ Distances are only defined relative to an interface.
+ Distance comparisons between different interfaces on the same process may
+ be meaningless.
+\layout Subsubsection
+
+Return Codes
+\layout Description
+
+PTL_OK Indicates success.
+\layout Description
+
+PTL_NOINIT Indicates that the Portals API has not been successfully initialized.
+\layout Description
+
+PTL_INV_NI Indicates that 
+\family typewriter 
+interface
+\family default 
+ is not a valid network interface handle.
+\layout Description
+
+PTL_INV_PROC Indicates that 
+\family typewriter 
+process
+\family default 
+ is not a valid process identifier.
+\layout Description
+
+PTL_SEGV Indicates that 
+\family typewriter 
+distance
+\family default 
+ is not a legal address.
+\layout Subsubsection
+
+Arguments
+\layout Standard
+
+
+\begin_inset  Tabular
+<lyxtabular version="3" rows="3" columns="3">
+<features>
+<column alignment="right" valignment="top" width="0pt">
+<column alignment="center" valignment="top" width="0pt">
+<column alignment="left" valignment="top" width="4.7in">
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+interface
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+input
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+A handle for the interface to use.
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+process
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+input
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+An identifier for the process whose distance is being  requested.
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+distance
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+output
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+On successful return, this location will hold the  distance to the remote
+ process.
+\end_inset 
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset 
+
+
+\layout Comment
+
+This function should return a static measure of distance.
+ Examples include minimum latency, the inverse of available bandwidth, or
+ the number of switches between the two endpoints.
+\layout Subsection
+
+PtlNIHandle
+\layout LyX-Code
+
+int PtlNIHandle( ptl_handle_any_t handle,
+\newline 
+                 ptl_handle_ni_t* interface );
+\layout Standard
+\noindent 
+The 
+\emph on 
+PtlNIHandle
+\emph default 
+ function returns a handle for the network interface with which the object
+ identified by 
+\family typewriter 
+handle
+\family default 
+ is associated.
+ If the object identified by 
+\family typewriter 
+handle
+\family default 
+ is a network interface, this function returns the same value it is passed.
+\layout Subsubsection
+
+Return Codes
+\layout Description
+
+PTL_OK Indicates success.
+\layout Description
+
+PTL_NOINIT Indicates that the Portals API has not been successfully initialized.
+\layout Description
+
+PTL_INV_HANDLE Indicates that 
+\family typewriter 
+handle
+\family default 
+ is not a valid handle.
+\layout Description
+
+PTL_SEGV Indicates that 
+\family typewriter 
+interface
+\family default 
+ is not a legal address.
+\layout Subsubsection
+
+Arguments
+\layout Standard
+
+
+\begin_inset  Tabular
+<lyxtabular version="3" rows="2" columns="3">
+<features>
+<column alignment="right" valignment="top" width="0pt">
+<column alignment="center" valignment="top" width="0pt">
+<column alignment="left" valignment="top" width="4.7in">
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+handle
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+input
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+A handle for the object.
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+interface
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+output
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+On successful return, this location will hold a handle for the network interface
+ associated with 
+\family typewriter 
+handle
+\family default 
+.
+\end_inset 
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset 
+
+
+\layout Comment
+
+Every handle should encode the network interface and the object id relative
+ to this handle.
+ Both are presumably encoded using integer values.
+\layout Section
+
+User Identification
+\begin_inset LatexCommand \label{sec:uid}
+
+\end_inset 
+
+
+\layout Standard
+
+Every process runs on behalf of a user.
+\layout Subsection
+
+PtlGetUid
+\layout LyX-Code
+
+int PtlGetUid( ptl_handle_ni_t   ni_handle,
+\newline 
+               ptl_uid_t*        uid );
+\layout Subsubsection
+
+Return Codes
+\layout Description
+
+PTL_OK Indicates success.
+\layout Description
+
+PTL_INV_NI Indicates that 
+\family typewriter 
+ni_handle
+\family default 
+ is not a valid network interface handle.
+\layout Description
+
+PTL_NOINIT Indicates that the Portals API has not been successfully initialized.
+\layout Description
+
+PTL_SEGV Indicates that 
+\family typewriter 
+interface
+\family default 
+ is not a legal address.
+\layout Subsubsection
+
+Arguments
+\layout Standard
+
+
+\begin_inset  Tabular
+<lyxtabular version="3" rows="2" columns="3">
+<features>
+<column alignment="right" valignment="top" width="0pt">
+<column alignment="center" valignment="top" width="0pt">
+<column alignment="left" valignment="top" width="5in">
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+handle
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+input
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+A network interface handle.
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+id
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+output
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+On successful return, this location will hold the user id for the calling
+ process.
+\end_inset 
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset 
+
+
+\layout Comment
+
+Note that user identifiers are dependent on the network interface(s).
+ In particular, if a node has multiple interfaces, a process may have multiple
+ user identifiers.
+\layout Section
+
+Process Identification
+\begin_inset LatexCommand \label{sec:pid}
+
+\end_inset 
+
+
+\layout Standard
+
+Processes that use the Portals API, can be identified using a node id and
+ process id.
+ Every node accessible through a network interface has a unique node identifier
+ and every process running on a node has a unique process identifier.
+ As such, any process in the computing system can be identified by its node
+ id and process id.
+\layout Standard
+
+The Portals API defines a type, 
+\family typewriter 
+ptl_process_id_t
+\family default 
+ for representing process ids and a function, 
+\emph on 
+PtlGetId
+\emph default 
+, which can be used to obtain the id of the current process.
+\layout Comment
+
+The portals API does not include thread identifiers.
+  Messages are delivered to processes (address spaces) not threads (contexts
+ of  execution).
+\layout Subsection
+
+The Process Id Type
+\begin_inset LatexCommand \label{sec:pid-type}
+
+\end_inset 
+
+
+\layout LyX-Code
+
+typedef struct {
+\newline 
+    ptl_nid_t       nid; /* node id */
+\newline 
+    ptl_pid_t       pid; /* process id */
+\newline 
+} ptl_process_id_t;
+\layout Standard
+\noindent 
+The 
+\family typewriter 
+ptl_process_id_t
+\family default 
+ type uses two identifiers to represent a process id: a node id and a process
+ id.
+\layout Subsection
+
+PtlGetId
+\begin_inset LatexCommand \label{sub:PtlGetId}
+
+\end_inset 
+
+
+\layout LyX-Code
+
+int PtlGetId( ptl_handle_ni_t   ni_handle,
+\newline 
+              ptl_process_id_t* id );
+\layout Subsubsection
+
+Return Codes
+\layout Description
+
+PTL_OK Indicates success.
+\layout Description
+
+PTL_INV_NI Indicates that 
+\family typewriter 
+ni_handle
+\family default 
+ is not a valid network interface handle.
+\layout Description
+
+PTL_NOINIT Indicates that the Portals API has not been successfully initialized.
+\layout Description
+
+PTL_SEGV Indicates that 
+\family typewriter 
+id
+\family default 
+ is not a legal address.
+\layout Subsubsection
+
+Arguments
+\layout Standard
+
+
+\begin_inset  Tabular
+<lyxtabular version="3" rows="2" columns="3">
+<features>
+<column alignment="right" valignment="top" width="0pt">
+<column alignment="center" valignment="top" width="0pt">
+<column alignment="left" valignment="top" width="5in">
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+handle
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+input
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+A network interface handle.
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\family typewriter 
+id
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+output
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+On successful return, this location will hold the id for the calling process.
+\end_inset 
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset 
+
+
+\layout Comment
+
+Note that process identifiers are dependent on the network interface(s).
+ In particular, if a node has multiple interfaces, it may have multiple
+ node identifiers.
+\layout Section
+
+Match List Entries and Match Lists
+\begin_inset LatexCommand \label{sec:me}
+
+\end_inset 
+
+
+\layout Standard
+
+A match list is a chain of match list entries.
+ Each match list entry includes a memory descriptor and a set of match criteria.
+ The match criteria can be used to reject incoming requests based on process
+ id or the match bits provided in the request.
+ A match list is created using the 
+\emph on 
+PtlMEAttach
+\emph default 
+ or 
+\shape italic 
+PtlMEAttachAny
+\shape default 
+ functions, which create a match list consisting of a single match list
+ entry, attaches the match list to the specified Portal index, and returns
+ a handle for the match list entry.
+ Match entries can be dynamically inserted and removed from a match list
+ using the 
+\emph on 
+PtlMEInsert
+\emph default 
+ and 
+\emph on 
+PtlMEUnlink
+\emph default 
+ functions.
+\layout Subsection
+
+PtlMEAttach
+\begin_inset LatexCommand \label{sec:meattach}
+
+\end_inset 
+
+
+\layout LyX-Code
+
+typedef enum { PTL_RETAIN, PTL_UNLINK } ptl_unlink_t;
+\newline 
+
+\layout LyX-Code
+
+typedef enum { PTL_INS_BEFORE, PTL_INS_AFTER } ptl_ins_pos_t;
+\newline 
+
+\layout LyX-Code
+
+int PtlMEAttach( ptl_handle_ni_t  interface,
+\newline 
+                 ptl_pt_index_t   index,
+\newline 
+                 ptl_process_id_t matchid,
+\newline 
+                 ptl_match_bits_t match_bits,
+\newline 
+                 ptl_match_bits_t ignorebits,
+\newline 
+                 ptl_unlink_t     unlink,
+\newline 
+                 ptl_ins_pos_t    position,
+\newline 
+                 ptl_handle_me_t* handle );
+\layout Standard
+\noindent 
+Values of the type 
+\family typewriter 
+ptl_ins_pos_t
+\family default 
+ are used to control where a new item is inserted.
+ The value 
+\family typewriter 
+PTL_INS_BEFORE
+\family default 
+ is used to insert the new item before the current item or before the head
+ of the list.
+ The value 
+\family typewriter 
+PTL_INS_AFTER
+\family default 
+ is used to insert the new item after the current item or after the last
+ item in the list.
+\layout Standard
+
+The 
+\emph on 
+PtlMEAttach
+\emph default 
+ function creates a match list consisting of a single entry and attaches
+ this list to the Portal table for 
+\family typewriter 
+interface
+\family default 
+.
+\layout Subsubsection
+
+Return Codes
+\layout Description
+
+PTL_OK Indicates success.
+\layout Description
+
+PTL_INV_NI Indicates that 
+\family typewriter 
+interface
+\family default 
+ is not a valid network interface handle.
+\layout Description
+
+PTL_NOINIT Indicates that the Portals API has not been successfully initialized.
+\layout Description
+
+PTL_INV_PTINDEX Indicates that 
+\family typewriter 
+index
+\family default 
+ is not a valid Portal table index.
+\layout Description
+
+PTL_INV_PROC Indicates that 
+\family typewriter 
+matchid
+\family default 
+ is not a valid process identifier.
+\layout Description
+
+PTL_NOSPACE Indicates that there is insufficient memory to allocate the
+ match list entry.
+\layout Description
+
+PTL_ML_TOOLONG Indicates that the resulting match list is too long.
+ The maximum length for a match list is defined by the interface.
+\layout Subsubsection
+
+Arguments
+\layout Standard
+
+
+\begin_inset  Tabular
+<lyxtabular version="3" rows="7" columns="3">
+<features>
+<column alignment="left" valignment="top" width="0.8in">
+<column alignment="center" valignment="top" width="0pt">
+<column alignment="left" valignment="top" width="4.75in">
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+
+\family typewriter 
+interface
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+input
+\end_inset 
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+A handle for the interface to use.
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+
+\family typewriter 
+index
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+input
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+The Portal table index where the match list  should be attached.
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+
+\family typewriter 
+matchid
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+input
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+Specifies the match criteria for the process id of the requestor.
+  The constants 
+\family typewriter 
+PTL_PID_ANY
+\family default 
+ and 
+\family typewriter 
+PTL_NID_ANY
+\family default 
+ can be used to  wildcard either of the ids in the 
+\family typewriter 
+ptl_process_id_t
+\family default 
+ structure.
+\end_inset 
+</cell>
+</row>
+<row>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+
+\family typewriter 
+match_bits, ignorebits
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+
+
+\series bold 
+input
+\end_inset 
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\layout Standard
+\noindent 
+Specify the match criteria to apply  to the&nbs