OpenSLP - Frequently Asked Questions


A really compresensive FAQ is not yet available for OpenSLP so please send
your questions to the OpenSLP mailing lists:

    openslp-devel@lists.sourceforge.net
    openslp-users@lists.sourceforge.net

Q: Where is the configure script to build OpenSLP?
A: Did you read section 3 of the README?  You need to run autogen.sh to
   generate the configure script.

Q: How do I build OpenSLP on Windows?
A: The MSVC project files used by the developers who ported OpenSLP to win32
   available in the source directories.  If you do not use MSVC and you are a
   Windows developer, then you will be used to trying to get MSVC makes to
   work with your tools

Q: Will OpenSLP work on my operating system
A: Yes, the OpenSLP code has proven to be very portable.  It currently works
   many operating systems including: Linux, BSD, Solaris, Tru64, HPUX, UnixWare,
   OSR5, and Win32

Q: I am having trouble discovering attributes using FindAttr() and  "slptool
   findattrs".  The functions seem to execute properly, and the services URL's
   can be discovered, but no attributes are returned.  I am registering
   services in slp.reg files. I don't think it is my syntax in the slp.reg
   file, because the example registrations in that file do not return
   attributes either.  Can anyone help?
A: If you just want to use slptool to see if things are working, you need to
   do the following:

   Contents of the slp.reg:
   ------------------------
   service:myservice1.x://myhost.caldera.com,en,65535
   owner=Matt Peterson
   email=mpeterson@caldera.com

   service:myservice1.x://yourhost.yourdomain.com,en,65535
   owner=Kim Jackson
   email=bjackson@yourhost.yourdomain.com
 

   IMPORTANT: Restart slpd and check the /var/log/slpd.log to ensure that
   there were no errors during parsing of the .reg file

   Use slptool to find attributes
   ------------------------------
   $ slptool findsrvs service:myservice1.x
   service:myservice1.x://myhost.caldera.com.com,65535
   service:myservice1.x://yourhost.yourdomain.com,65535

   $ slptool findattrs service:myservice1.x://myhost.mydomain.com
   (owner=Matt Peterson),(email=mpeterson@caldera.com)

   $ slptool findattrs service:myservice1.x://yourhost.caldera.com
   (owner=Kim Jackson),(email=bjackson@yourhost.yourdomain.com)

   Note that you need to supply the service-url as returned by findsrvs

Q: I have a multi-homed machine and OpenSLP is not working.
A: Please read the updated installation guide
   http://www.openslp.org/doc/html/UsersGuide/Installation.html.
   There are special instructions for users of multi-homed machines.

Q: In our development lab, the multicast SLP requests work just fine.
   However, in our SVT lab, the multicasts requests never work.  We always
   have to edit the slp.conf file and turn on broadcast.  Have any others seen
   this?  Do you recall what the solution was?  We have spent a great deal of
   time trying to figure this one out without success.
A: Yes, others have seen this behavior -- I know I have.  I should put this in
   the FAQ because I get a lot of questions.  The following is a list of the
   most common problems along with trouble shooting and resolution info:

   No multicast route
   -------------------
   A very common problem with some OS installations (especially Linux) is
   that there is no multicast or default route set up.  On systems with BSD
   derived TCP/IP stacks (nearly all OSes), broadcast and multicast traffic
   are delivered using the unicast routing table.  If the unicast routing
   table does not have either a default route or an explicit multicast route,
   then the kernel does not know where to send the SLP datagram and returns
   an error 101 - network unreachable error which translates into a SLPError
   -23 SLP_NETWORK_ERROR. A quick test is to try to ping SLP multicast:

      $ ping 239.255.255.253

   If ping returns an error that the network was unreachable, you will need
   to set up a default route or a multicast route.

   Note you may not get any responses to the ping.  This may not indicate
   a problem.  The only thing to be concerned about is if there is an error
   actually sending the ping.

   Please read the installation instructions for more information on how
   to install a multicast route:

       http://www.openslp.org/doc/html/UsersGuide/Installation.html
 

   The "smart switch /stupid router" problem
   ------------------------------------------
   The smart switch / stupid router (or no router) problem is something that
   happens on switched ethernet networks only.  If you do not have a
   switched ethernet network, then you do not have this problem.  If you do
   have a switched ethernet network, then you may have this problem if you
   are using newer switching hardware.  The reason is that ethernet
   switching hardware is smart enough to monitor IGMP traffic and only
   forward multicast ethernet frames to those ports that are connected to a
   host that has maintained the appropriate IGMP conversations with the
   router.

   At a very high level, IGMP works like this.  First, the host joins the
   multicast group by sending the router an IGMP message.  The router
   responds periodically with request to the host to see if the host is
   still interested in multicast traffic.  Since IGMP conversations are
   handled transparently by the kernel level IP stack implementations, most
   developers and users do not even realize anything is happening.

   However, "smart" ethernet switches do realize something is happening!
   If they do not see the IGMP messages being sent from the router to a host
   that is plugged into a given port of the switch, then they will will not
   forward multicast ethernet frames to that port.  This is good and bad.
   It is good because it makes multicast extremely efficient in terms of
   physical network usage.  However, it also makes it so multicast will not
   work at all if a router does not exist (or does not support IGMP) to
   maintain it's end of the IGMP conversation.

   Trouble Shooting:

   Monitor IGMP traffic!  Make sure that periodic IGMP traffic is happening
   on your network.  IGMP traffic can be monitored on Linux (and many other
   OSes) with the following command:

     # tcpdump igmp

   Issue this command before starting slpd.  You will notice that several
   IGMP "report" messages are sent.  The important thing to look for a IGMP
   "query" message from the router.  If you do not see the IGMP query
   message from the router then you will soon find that you will no longer
   see any "report" messages either.

   Another good test is to try to ping the multicast address and see where
   it is visable.

     $ ping 239.255.255.253

   Finally, the best advice is to read the normally untouched section of
   your ethernet switch manual that describes how the switch handles
   multicast.  Stupid/inexpensive switches treat multicast frames exactly
   like broadcast frames which means that they are forwarded to every port
   of the switch.  Smart/Expensive switches often allow this behavior to be
   configured.  If you are on a network without a router, then it is
   possible that you might need to "dumb down" your switch.

   Broken NIC driver
   ------------------
   Some NICs do not support multicast operation, so the driver does the
   work by  placing the NIC into permiscuous mode (accept everything) then
   the driver filters out what is not needed.  The problem with this is
   that sometimes on a very busy ethernet, the NIC buffers may not be able
   to keep up with all the traffic and some frames will be dropped.  This
   is normally not a problem since SLP is designed to work on unreliable
   physical networks, but if enough frames are dropped, OpenSLP may not
   be able to find DAs or other services.  This would result in erratic
   behavior.

Q: I'm pretty new to SLP. I just installed the Open-SLP package. It comes
   with the SLP daemon(slpd). Is it the Directory agent?
 
A: OpenSLP consists of two binary pieces of software.  One is libslp.so and the
   other is slpd.
 
   libslp.so is the SLP API implementation library that is linked to applications
   that will be using SLP to register and locate services.  See
   http://www.openslp.org/doc/html/ProgrammersGuide/index.html for more information
   on how this library can be used to write more intelligent applications.

   slpd is the SA/DA daemon.  In otherwords, slpd has two modes of operation.  slpd
   can be an SA or it can be an SA and a DA.

   In SA only mode, slpd keeps track services that were registered by applications
   that link to libslp.so and call SLPReg().  As an SA slpd responds appropriately
   to multicast requests for location of services that it has registrations for.

   In SA/DA mode slpd additionally acts as an DA (directory agent).  The existence
   of a DA is optional, but desireable on large networks to reduce multicast
   traffic.  To enable DA functionality in slpd, you will need to set the
   .net.slp.isDA=true setting in the /etc/slp.conf file.

   In deploying OpenSLP you should be aware of the following guidelines:

   1 - Existence of a DA (directory agent) is optional but beneficial on larger
   networks to reduce the amount of multicast SLP traffic.  On smaller networks
   where multicast traffic is not a problem it is simpler to operate without a DA.

   2 - As a general rule there should only be one DA per IP network.  Too many DAs
   on the same network will cause a reduction in performance.
 
   3 - With OpenSLP it is not required that ALL machines run slpd however it is
   highly recommended.  This is because the OpenSLP implementation uses slpd to
   cache important information that would otherwise need to be discovered via
   multicast or broadcast.  Therefore, for optimal performance, slpd should run on
   all machines as an SA with only a very few (usually 1) machine running slpd as a
   DA.
 
   4 - In deployments where it is not possible to run slpd on all machines it is at
   least REQUIRED that slpd run on ALL machines that run software that calls
   SLPReg() or SLPDeReg().