DUN over bluethoot
Maksim Yevmenkin
maksim.yevmenkin at gmail.com
Wed Mar 5 17:56:09 UTC 2008
Hello Anatoli,
[...]
> 2) teach rfcomm_pppd(8) to register DUN profile as well as LAN
> profile. this should be easy to do. however, you will need to tweak
> your ppp(8) configuration and add fake chat script to emulate modem
> AT-command exchange.
i have attached the patch that implements option (2) above. please try
it and let me know. the patch adds new -D option to the
rfcomm_pppd(8). when -D is specified, rfcomm_pppd(8) server will
register DUN service on the same channel as LAN service. keep in mind
that remote client will still be thinking that it talks to the
modem-type device. it means that there will be AT-command exchange
before client starts talking PPP. you will need to fake this
AT-command exchange using ppp(8) chat scripts. please read ppp(8) man
page and pay attention to "force-scripts" option.
to make rfcomm_pppd(8) server register DUN service you will need to start it as
# rfcomm_pppd -s -d -D -C 7 -l default
in case you did not get the attachment, the patch can be downloaded from
http://people.freebsd.org/~emax/rfcomm_pppd.dun.patch.txt
thanks,
max
-------------- next part --------------
Index: rfcomm_pppd.8
===================================================================
RCS file: /home/ncvs/src/usr.sbin/bluetooth/rfcomm_pppd/rfcomm_pppd.8,v
retrieving revision 1.14
diff -u -r1.14 rfcomm_pppd.8
--- rfcomm_pppd.8 13 May 2007 18:59:22 -0000 1.14
+++ rfcomm_pppd.8 5 Mar 2008 17:46:04 -0000
@@ -41,7 +41,7 @@
.Fl u Ar N
.Nm
.Fl s
-.Op Fl dhS
+.Op Fl dDhS
.Op Fl a Ar address
.Fl C Ar channel
.Fl l Ar label
@@ -125,6 +125,15 @@
This is the default mode.
.It Fl d
Do not detach from the controlling terminal, i.e., run in foreground.
+.It Fl D
+In server mode, register the
+.Cm DUN
+(Dial-Up Networking) service in addition to the
+.Cm LAN
+(LAN Access Using PPP) service.
+AT-command exchange can be faked with
+.Xr ppp 8
+chat script.
.It Fl h
Display usage message and exit.
.It Fl l Ar label
Index: rfcomm_pppd.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/bluetooth/rfcomm_pppd/rfcomm_pppd.c,v
retrieving revision 1.6
diff -u -r1.6 rfcomm_pppd.c
--- rfcomm_pppd.c 21 Sep 2006 02:32:28 -0000 1.6
+++ rfcomm_pppd.c 5 Mar 2008 17:46:04 -0000
@@ -62,7 +62,8 @@
struct sockaddr_rfcomm sock_addr;
char *label = NULL, *unit = NULL, *ep = NULL;
bdaddr_t addr;
- int s, channel, detach, server, service, regsp;
+ int s, channel, detach, server, service,
+ regdun, regsp;
pid_t pid;
memcpy(&addr, NG_HCI_BDADDR_ANY, sizeof(addr));
@@ -70,10 +71,11 @@
detach = 1;
server = 0;
service = 0;
+ regdun = 0;
regsp = 0;
/* Parse command line arguments */
- while ((s = getopt(argc, argv, "a:cC:dhl:sSu:")) != -1) {
+ while ((s = getopt(argc, argv, "a:cC:dDhl:sSu:")) != -1) {
switch (s) {
case 'a': /* BDADDR */
if (!bt_aton(optarg, &addr)) {
@@ -110,6 +112,10 @@
detach = 0;
break;
+ case 'D': /* Register DUN service as well as LAN service */
+ regdun = 1;
+ break;
+
case 'l': /* PPP label */
label = optarg;
break;
@@ -265,6 +271,31 @@
}
/*
+ * Register DUN (Dial-Up Networking) service on the same
+ * RFCOMM channel if requested. There is really no good reason
+ * to not to support this. AT-command exchange can be faked
+ * with chat script in ppp.conf
+ */
+
+ if (regdun) {
+ sdp_dun_profile_t dun;
+
+ memset(&dun, 0, sizeof(dun));
+ dun.server_channel = channel;
+
+ if (sdp_register_service(ss,
+ SDP_SERVICE_CLASS_DIALUP_NETWORKING,
+ &addr, (void *) &dun, sizeof(dun),
+ NULL) != 0) {
+ syslog(LOG_ERR, "Unable to register DUN " \
+ "service with local SDP daemon. " \
+ "%s (%d)", strerror(sdp_error(ss)),
+ sdp_error(ss));
+ exit(1);
+ }
+ }
+
+ /*
* Register SP (Serial Port) service on the same RFCOMM channel
* if requested. It appears that some cell phones are using so
* called "callback mechanism". In this scenario user is trying
More information about the freebsd-bluetooth
mailing list