#
# $QuaggaId: $Format:%an, %ai, %h$ $
#

INTRODUCTION

        qpimd aims to implement a PIM (Protocol Independent Multicast)
	daemon for the Quagga Routing Suite.

	Initially qpimd targets only PIM SSM (Source-Specific
	Multicast) mode as defined in section 4.8.2 (PIM-SSM-Only
	Routers) of RFC 4601.

	In order to deliver end-to-end multicast routing control
	plane, qpimd includes the router-side of IGMPv3	(RFC 3376).

LICENSE

        qpimd - pimd for quagga
        Copyright (C) 2008 Everton da Silva Marques

        qpimd is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License as
        published by the Free Software Foundation; either version 2,
        or (at your option) any later version.

        qpimd is distributed in the hope that it will be useful, but
        WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.

        You should have received a copy of the GNU General Public
        License along with qpimd; see the file COPYING.  If not, write
        to the Free Software Foundation, Inc., 59 Temple Place - Suite
        330, Boston, MA 02111-1307, USA.

HOME SITE

        qpimd lives at:

        https://github.com/udhos/qpimd

PLATFORMS

	qpimd has been tested with Debian Lenny under Linux 2.6.

REQUIREMENTS

	qpimd requires Quagga (0.99.11 or higher from http://www.quagga.net)

	The GNU Build System (Autotools) is required to build from
	source code repository.

	gawk is also needed to build with Autotools. Any other awk
	usually won't work.

BUILDING FROM QUAGGA GIT REPOSITORY

	1) Get the latest quagga source tree

	# git clone git://code.quagga.net/quagga.git quagga

	2) Apply qpimd patch into quagga source tree

	# patch -p1 -d quagga < pimd-0.153-quagga-git20090623.patch

	3) Compile and install quagga

	# cd quagga
	# ./bootstrap.sh
	# ./configure --prefix=/usr/local/quagga --enable-pimd
	# make
	# make install

BUILDING FROM QUAGGA TARBALL

	1) Get the latest quagga tarball

	# wget http://www.quagga.net/download/quagga-0.99.13.tar.gz

	2) Unpack the quagga tarball

	# tar xzf quagga-0.99.13.tar.gz

	3) Apply qpimd patch into quagga source tree

	# patch -p1 -d quagga-0.99.13 < pimd-0.153-quagga-0.99.13.patch

	4) Compile and install quagga

	# cd quagga-0.99.13
	# ./configure --prefix=/usr/local/quagga --enable-pimd
	# make
	# make install

USAGE

	1) Configure and start the zebra daemon

	# cp /usr/local/quagga/etc/zebra.conf.sample /usr/local/quagga/etc/zebra.conf
	# vi /usr/local/quagga/etc/zebra.conf
	# /usr/local/quagga/sbin/zebra

	2) Configure and start the pimd daemon

	# cp /usr/local/quagga/etc/pimd.conf.sample /usr/local/quagga/etc/pimd.conf
	# vi /usr/local/quagga/etc/pimd.conf
	# /usr/local/quagga/sbin/pimd

	3) Access pimd vty interface at port TCP 2611

	# telnet localhost 2611

CONFIGURATION COMMANDS

	See available commands in the file pimd/COMMANDS.

KNOWN CAVEATS

	See list of known caveats in the file pimd/CAVEATS.

SUPPORT

	Please post comments, questions, patches, bug reports at the
	support site:

        https://github.com/udhos/qpimd

RELATED WORK

	igmprt:	An IGMPv3-router implementation
	- http://www.loria.fr/~lahmadi/igmpv3-router.html

	USC pimd: PIMv2-SM daemon
	- http://netweb.usc.edu/pim/pimd (URL broken in 2008-12-23)
	- http://packages.debian.org/source/sid/pimd (from Debian)

	troglobit pimd: This is the original USC pimd from
	http://netweb.usc.edu/pim/. In January 16, 2010 it was revived
	with the intention to collect patches floating around in
	Debian, Gentoo, Lintrack and other distribution repositories
	and to provide a central point of collaboration.
	- http://github.com/troglobit/pimd

	zpimd: zpimd is not dependent of zebra or any other routing daemon
	- ftp://robur.slu.se/pub/Routing/Zebra
	- http://sunsite2.icm.edu.pl/pub/unix/routing/zpimd

	mrd6: an IPv6 Multicast Router for Linux systems
	- http://fivebits.net/proj/mrd6/

	MBGP: Implementation of RFC 2858 for Quagga
	- git://git.coplanar.net/~balajig/quagga
	- http://www.gossamer-threads.com/lists/quagga/dev/18000

REFERENCES

	IANA Protocol Independent Multicast (PIM) Parameters
	http://www.iana.org/assignments/pim-parameters/pim-parameters.txt

	Address Family Numbers
	http://www.iana.org/assignments/address-family-numbers

                              -- END --
