[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Porting FreeBSD's/OpenBSD's User-level ppp(8) to the Hurd



> > I am interested in working on ppp for hurd.  I am curious as to what
> > progress has been made in that direction, and if anyone is actively
> > working on it right now?
> I plan on working on ppp for the Hurd. Next quarter (Fall) I am taking
> a directed study to meet a course elective (for B.S. Computer Engineering 
> at Milwaukee School of Engineering, MSOE). I plan on porting pppd as the 
> final project.
I am also interested in seeing FreeBSD's user-level ppp(8) ported to
the Hurd. I didn't start working on it yet, but given support from other
people, it could be possible to do it together. The biggest problem I see
here, is that it will be probably necessary to interface to pfinet which
is currently in a somewhat shaky state (please correct me, if I'm wrong).

FreeBSD's user-level PPP (not the kernel pppd driver!) implements the
PPP procotol entirely in user space and is thus predestined to get
ported to the Hurd as Mach-task/Hurd-process. It is actually very
"Hurdish" in its way of accessing the kernel's IP-Layer through a
so called tunnel interface.

To port ppp(8) to the Hurd, most C files can be left unchanged, as
they contain mostly os-independent code like the user interface,
configuration files, lcp, ipcp and other aspects of the PPP protocol.

The interface of ppp(8) to the IP-Layer of the Kernel (the tunnel
pseudo-device of the Kernel) is concentrated in the files tun.{c,h}
This interface will have to be adapted to the Hurd in a way outlined
below.

The other interface of ppp(8) with the kernel is traditional access
to the serial driver through /dev/ttyS* (resp. /dev/cua*) secial
files with simple read(), write() and ioctl()'s (to set the speed
and line parameters for example). I didn't find out yet how to get
access to Gnumach's com0 and com1 serial device drivers, as native-install
didn't put special files in /dev (a.k.a. didn't settrans any translator
to emulate those special files). If the Hurd has a way to emulate
Unix's classical serial device drivers, ppp(8) would simply access
the modem and null-modem serial lines via libc in normal Unix' ways.

Accessing the IP-Layer of the Hurd is more involved, as it requires
getting access to pfinet server (or any equivalend server that provides
IP layer services). The natural way to implement the tunnel interface
in the Hurd would be to have ppp(8) talk to the pfinet server through
a Hurd library (yet to be written?), permitting the following basic
services:

  * establish a network interface
  * configure the network interface (a la ifconfig tun0 ... ... {up|down})
  * getting notifications when the interface gets an outgoing IP-Packet,
    that should be passed to the ppp user-level program
    (getting an outgoing IP-packet sent to the network interface),
    together with the contents of the IP-packet, so that it can be
    packet in a PPP frame and sent down the wire,
  * sending messages to pfinet, as soon as a packet arrives from the
    serial port and was decoded by the ppp(8), so that it is sent to
    the network interface,
    (injecting an incoming IP-packet into the IP-Layer),
  * <implement the rest of the tunnel protocol?>

To do all this, pfinet probably needs an extended .defs interface,
that we can program against with MiG (or better yet, provide a library
like other libraries e.g. libprocfs for proc etc... and use this
API accordingly).

As soon as this is done in pfinet and once we have access to the serial
interfaces in a Unix compatible way, porting user-level ppp(8) should
be relatively easy.

BTW, user-level ppp(8) does an excellent job for me here. It also supports
dynamic DNS and tons of other features. It would be really nice to
concentrate our efforts at porting it to the Hurd.

Comments?

This is /usr/src/usr.sbin/ppp/README.devel, for all of you not aware
of user-level PPP:

--------------------- /usr/src/usr.sbin/ppp/README.devel -------------------
This program was originally written by Toshiharu OHNO <tony-o@iij.ad.jp>,
and was submitted to FreeBSD-2.0.5 by Atsushi Murai <amurai@spec.co.jp>.
The original version was usually referred to as iij-ppp.

Ppp is currently maintained under FreeBSD and OpenBSD by Brian Somers
<brian@Awfulhak.org>.  The sources for both operating systems are the
same except that the libalias code is built directly into ppp under
OpenBSD, and the Makefiles vary per OS.

The latest sources are available in FreeBSD-current and OpenBSD-current.
An archive hacked so that it will build on just about any version of
FreeBSD or OpenBSD is frequently generated and made available via
http://www.Awfulhak.org/ppp.html.

A FAQ is available at http://www.FreeBSD.org/FAQ/userppp.html.  It applies
equally to OpenBSD as it does to FreeBSD.  The man page is quite extensive,
and there are lots of examples in /usr/share/examples/ppp/.

Ppp is still under development.  There is no official TODO list
--------------------- /usr/src/usr.sbin/ppp/README.devel -------------------

-- 
Farid Hajji -- Unix Systems and Network Administrator | Phone: +49-2131-67-555
Broicherdorfstr. 83, D-41564 Kaarst, Germany          | farid.hajji@ob.kamp.net
- - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - -
Fermat: ...I've found a remarkable proof for this: Let x,y @#$!@$!2@ NO CARRIER



Reply to: