<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <small>Hi Patrick,<br>
      <br>
      Thanks for giving the feedback,please find my comments inline.<br>
      <br>
      Regards<br>
      Ratan Gupta</small><br>
    <br>
    <div class="moz-cite-prefix">On Thursday 20 October 2016 03:02 AM,
      Patrick Williams wrote:<br>
    </div>
    <blockquote cite="mid:20161019213222.GG32710@heinlein.lan"
      type="cite">
      <pre wrap="">On Wed, Oct 19, 2016 at 11:19:26PM +0530, Ratan Gupta wrote:
</pre>
      <blockquote type="cite">
        <pre wrap="">*Enabling SLP Server on openBMC*

What is SLP

=======

Service Location Protocol (SLP) is a protocol that provides a framework 
to allow networking applications to discover the existence, location, 
and configuration of networked services in enterprise networks.

openSLP is widely accepted in the industry
</pre>
      </blockquote>
      <pre wrap="">
What are the aspects of SLP that are requirements for the intended
use-case?  SLP as a protocol has both direct query and an optional
"directory" implementation that aggregates SLP results.  In your
experience is that necessary or used?</pre>
    </blockquote>
      <small>  Slp supports three agents<br>
           1) UA(slptool)<br>
           2) SA(in our case it would be new app which we have to write
      for reg of services)<br>
           3) DA(where the reg info stores) it could be on network or on
      the same machine..but it is required to support the RFC.<br>
          <br>
    </small>
    <blockquote cite="mid:20161019213222.GG32710@heinlein.lan"
      type="cite">
      <pre wrap="">

What is the anticipated size footprint of using openSLP?  The RFC
doesn't seem that significant, so if we do not need the directory aspect
might it be more beneficial to write a small daemon ourself to give SLP
responses rather than trying to mold openSLP to fit our needs?</pre>
    </blockquote>
    <small>   runtime foot print TOP Command shows   <br>
         214     1 daemon   S     <b>3620</b>   3%   0% slpd -l
      /tmp/slpd.log  >>>3.5K<br>
         file size which will take in flash<br>
         slpd:- 100.4K<br>
         libslp:-69.7K<br>
    </small>
    <blockquote cite="mid:20161019213222.GG32710@heinlein.lan"
      type="cite">
      <pre wrap="">

I'm certainly not advocating avoiding using existing open source.  But,
with there not being an update to openSLP since 2013 and all the aspects
we are going to have to work around below, I'm wondering on the benefit.</pre>
    </blockquote>
    <small>  I think we are not doing any workaround here,It is slp (as
      per the RFC)which expects<br>
        IP in their reg url as the slp needs ip in the reg url,we are
      catering that need via de</small>
    <blockquote cite="mid:20161019213222.GG32710@heinlein.lan"
      type="cite">
      <blockquote type="cite">
        <pre wrap="">What do we need to do?

==============

1) Bring SLP(OpenSLP) in image:- Write the bitbake recipe(didn't find 
the readily available bitbake recipe)

2) Configure the services through Settings daemon.
</pre>
      </blockquote>
      <pre wrap="">
We do have a .bbclass for "registration" we need to ensure that this is
utilized for SLP as much as possible.
Yes we would be using it

3) Write the .service file as it needs to start after network is 
up(after networkd-online.target)
</pre>
      <pre wrap="">
This service file is for the openslp daemon, correct? </pre>
    </blockquote>
        <small>Yes</small>
    <pre wrap="">How to configure the services which needs to be registered with slpd

============================================

Option 1:- settingsd

Note: Gives the flexibility to change the configured services @ runtime. 
Do we require this functionality?

Option 2:conf file for discovery services

Note: During build time we can get the service info(service-name,port) 
from the existing infra(discoveryservice.bbclass)
</pre>
    <blockquote cite="mid:20161019213222.GG32710@heinlein.lan"
      type="cite">
      <pre wrap="">
I don't entirely understand how these aren't phases of the same
solution.

The problem space as I see it:
    1. An application provides a service to be advertised by SLP.
    2. The application is currently started via a .service or a .socket
       file.
            a. Some services are always running.
            b. Some services use socket-activation.
    3. We need to register this service with the SLP daemon, somehow.

Do we need to ensure the application is running (or available to run via
socket activation) before we do the registration?  If the application is
being restarted should we remove the registration and add it back after
it comes back?</pre>
    </blockquote>
      <small>I believe that is not needed as the application(SA) would
      be dependent on the conf<br>
           and out policy suggest that network services should restart
      always so it would be unnecessary <br>
           to do reg and unreg</small><br>
    <blockquote cite="mid:20161019213222.GG32710@heinlein.lan"
      type="cite">
      <pre wrap="">

You mentioned dealing with IP address changes.  It is pretty annoying
that openSLP doesn't do this for you (a custom daemon could).  How are
you handling multiple network interfaces?  How to we flag internal vs 
external interfaces?  Isn't there a mechanism via systemd (or networkd) to
identify when the ip address changes?  Ideally, this would be a restart
of a .service.

I could see us building a very small application that performs three
functions:
    1. slp-register register <service>
    2. slp-register deregister <service>
    3. slp-register ip-change

For each registered service "foo.service", we can generate
foo-slp-register.service.  The foo-slp-register.service will depend on
foo.service, so it is started immediately after and stopped when the
foo.service is stopped.  The 'start' will be to call 'slp-register
register'  and the 'stop' will be to call 'slp-register deregister'.

We also can then keep off of something in systemd / networkd to run 
'slp-register ip-change' whenever the IP changes.  This could either
restart *-slp-register.service or it could extract all of the SLP
registrations and update them with new IP addresses.  Putting all of the
*-slp-register.service into a 'target' might make restarting them very
simple.

With this approach we do not need a long running application.</pre>
    </blockquote>
       <small> I agree but do we really need to dereg and reg in the
      case when the service is going down as.<br>
          Our service policy is restart always whenever the network
      service goes down. so service would be down for a moment<br>
          Long running application i was asking for the IP change
      event,I am not aware if systemd-networkd send some event<br>
          whenever the ip change occurs.<br>
    </small>
    <blockquote cite="mid:20161019213222.GG32710@heinlein.lan"
      type="cite">
      <blockquote type="cite">
        <pre wrap="">How to register the services
==================

1) Static Registration:- will not work as we need ip/host-name details 
which we don't have @build time.
</pre>
      </blockquote>
      <pre wrap="">
It is unfortunate about this.  We can solve this with a custom
slp-daemon.</pre>
    </blockquote>
        <small>Agree but the custom one would not be implementing the
      full RFC.</small><br>
    <blockquote cite="mid:20161019213222.GG32710@heinlein.lan"
      type="cite">
      <pre wrap="">

</pre>
      <blockquote type="cite">
        <pre wrap="">
2) Application(new DBUS app) will register the configured services to 
the slpd on startup.
</pre>
      </blockquote>
      <pre wrap="">
I am not understanding what the 'dbus app' aspect of this would be.
What would be the dbus interfaces?</pre>
    </blockquote>
       <small>  I thought of if some other app(netman.py) wants to do
      the reg and unreg. so thought of exposing the <br>
            Register Service<br>
            unregister Service<br>
            Raising the DBUS signal in case of IP change.</small><br>
    <blockquote cite="mid:20161019213222.GG32710@heinlein.lan"
      type="cite">
      <blockquote type="cite">
        <pre wrap="">We need to provide the dynamic registration support on BMC as IP of BMC 
can change any time.  Registration of services with slpd takes the URL 
of the service which includes ip and port of the service which needs to 
be registered.

Create a DBUS service application

=====================

1) Once the service starts it registers the configured services with slpd.

2) listening on RTNETLINK event for ip change: raise a dbus signal(for 
the IP change)
</pre>
      </blockquote>
      <pre wrap="">
Who is getting this signal?</pre>
    </blockquote>
    <small>   This one was required,if certain application is interested
      in IP change event then it can use.<br>
         today no application is interested in this event.</small><br>
    <blockquote cite="mid:20161019213222.GG32710@heinlein.lan"
      type="cite">
      <pre wrap="">

</pre>
      <blockquote type="cite">
        <pre wrap="">
      if there is IP change then dereg the old service followed by reg 
service as the ip has changed.

Regards
Ratan Gupta
</pre>
      </blockquote>
    </blockquote>
    <br>
  </body>
</html>