Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 20 Oct 2005 10:06:45 -0700
From:      Maksim Yevmenkin <maksim.yevmenkin@savvis.net>
To:        Panagiotis Astithas <past@ebs.gr>
Cc:        freebsd-bluetooth@freebsd.org
Subject:   Re: [RFC] rc.d integration for the bluetooth subsystem
Message-ID:  <4357CEA5.1000308@savvis.net>
In-Reply-To: <43576A9D.1050209@ebs.gr>
References:  <43519460.1090605@ebs.gr> <1129491219.1616.18.camel@localhost> <4353DBBC.2000508@savvis.net> <43541F79.6040008@ebs.gr> <43554BCE.7090309@savvis.net> <4355FD0C.2090702@ebs.gr> <4356D12F.7000006@savvis.net> <43576A9D.1050209@ebs.gr>

next in thread | previous in thread | raw e-mail | index | archive | help
Panagiotis,

[...]

>> the other questions i have is
>>
>> 1) was there any particular reason to put "shutdown" word into 
>> "KEYWORD:"? the way i understand it: your bluetooth script will be 
>> called with "stop" command on system shutdown, however there will be 
>> no device name, so ${dev} will be unset. am i correct here?
> 
> Actually if you don't put in the "shutdown" keyword, the script is 
> skipped for faster shutdown. I figured there was a need to perform the 
> shutdown_stack subroutine, so I added it. However I think you are right, 
> on system shutdown ${dev} will be unset, so the keyword is probably 
> meaningless. I should try to perform a system shutdown with my USB 
> dongle still plugged in to see if there are any error messages.

fine

>> 2) what is the reason for calling "/etc/rc.d/{hcsecd,sdpd} 
>> {start,stop}"  from "bluetooth_start()/bluetooth_stop()"? shouldn't 
>> these be controlled by their own xxx_enable variables? for example you 
>> do not need sdpd(8) running unless you want to provide services to the 
>> remote clients. also both sdpd(8) and hcsecd(8) bind to "any" bd_addr, 
>> so there is no reason to restart them even if particular device comes 
>> and goes. what is important here is to kill daemons (providing 
>> services, such as rfcomm_pppd(8)) if they were bound (i.e. listening) 
>> to the device that went away. however this is a corner case. usually 
>> service daemons listen on "any" address and thus there is no need to 
>> restart them.
> 
> I opted for simplicity and ease of use. I think users don't comprehend 
> the interactions between sdpd, hcsecd, the bluetooth stack, etc. most of 
> the time. The typical use case I have in mind is a user who plugs in his 
> bluetooth dongle to send or receive files. Since we don't have any 

if one does not understand interaction between hcsecd/sdpd/etc. then 
perhaps better documentation must be written? if one refuses do read 
documentation then i'd just say, have "sdpd_enable" and "hcsecd_enable" 
set because they required. there is harm in having them both running all 
the time.

> user-friendly applications in the base system, I think a user would 
> prefer to initiate a device-to-PC transfer from the device. In this case 

device to PC transfer setup is _harder_. simply because you need to run 
sdpd _and_ service daemon (such as obexapp). so you need to understand 
how service daemons interact with sdpd etc. as far as user-friendly 
applications, you can install comms/obexapp from ports. just to send 
file from pc to device (with obex push) is _very_ simple. you do not 
need to setup anything. getting files from device (with obex file 
transfer) is slightly harder because most devices require 
authentication, so you need to setup pin code with hcsecd and have it 
running.

obexapp (and other things) are made as ports because of gpl.

> he will need both hcsecd and sdpd, right? It is also the default 
> behavior in Windows and in Linux KDE, I think. You get all the necessary 
> services running before starting a connection. I am also considering 
> porting gnome-bluetooth for the same reason.

once again, kde, gnome-bluetooth etc. are gpl. so they will have to go 
to ports/.

> I understand that your approach with sdpd_enable and hcsecd_enable is 
> more fine-grained, but I wonder if we could combine it with hassle-free 
> operation for the common case. I agree with all the rest that you 
> mention about the address binding.

i'm afraid, i have to object to start/stop'ing hcsecd and sdpd from 
bluetooth rc.d script. it just not right, imo. what if i have more then 
one bluetooth device connected? the moment i pull one of them off hcsecd 
and sdpd will be killed. not good.

to summarize:

1) hcsecd and sdpd should be considered as "special" daemons. average 
bluetooth user should have them both running at all times.

2) to make hcsecd less painful for users it has to be enhanced, i.e. it 
should support helper application for pin codes, i.e. instead of 
specifying pin code, user specifies a program to be called to obtain pin 
code. default entry in hcsecd.conf then will be changed to call external 
program to obtain pin code. something like xdialog.

3) bluetooth rc.d script should only setup devices. it also should have 
some sort of extension to start/stop service daemons bound to the 
particular device, however it should not touch hcsecd and sdpd.

thanks,
max



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4357CEA5.1000308>