Dialup over IrDA (Internet Sharing)

Intro

This tutorial will describe how to share internet or network over IrDA using Linux and Laptop or some small device like Raspberry PI. You will be able to connect your old PDA's or other devices to internet or just browse local network with this method. Technically it will use ppp (dialup) connection over IrCOMM protocol using IrDA SIR (9.6–115.2 kbit/s) modulation scheme. This method is also can be used to connect two Laptops or PDA's, but one of them must be running Linux.

In this tutorial the main machine (server) Laptop or Raspberry PI we will call Host and the PDA who connects to this Host we will call Guest.

For Guest i have the honor to use HP Jornada 720 to test the connectivity on the Windows CE 3.0 OS Environment.

Requirements

  • Debian Stretch Installation media (when installing choose to “manually enter repository” and specify “archive.debian.org” because it's not supported anymore). The tutorial with more recent Linux distribution will come later..
  • Laptop at least 200 Mhz Pentium with 128 MB of RAM Or RaspberryPI, another flavours can be used also like, OrangePI, BananaPI and ApplePI (j/k).
  • USB IrDA Adapter (Check compatible adapters list in this tutorial)
  • A little patience

Compatible irDA Adapters

DISCLAIMER! Most IrDA adapters that are integrated in 2000's era laptop computers should be compatible. For most USB/Serial adapters you should look ebay for ACTiSYS IrDA adapter.

ID Name Status Price/Url/Buy Chip Interface Speeds Hardware IDs IrComm Compat Notes
1 Laptop MaxData Pro 650T TESTED→WORKING ? ? Internal 9600-115200 Yes Used as default device in this tutorial
3 Gembird UIR-33 TESTED→NOT WORKING product page 9.96 € Moschip 7784 USB ? [9710:7703] ? It needs new driver for 5.x kernel. Old driver only available for 2.4 kernel. I've started to port old driver to the 5.x kernel, but another device arrived at the time, so i will use the new one insead.
3 MA-620 Infrared Adapter TESTED→WORKING* buy 6 € MA620 USB 9600 0df7:0620 Yes I have bought it, and it's working fine but only in 9600 baud rate. For technical perspective it uses Prolific (PL2303) USB serial converter. irattach /dev/ttyUSB0 -d ma600 -s does the job.
4 irDA piHAT TESTED→NOT WORKING buy 33 € buy 19.90 € mcp2120 Serial PI GPIO No All devices from seller uses same mcp2120 chips, default 9600 baud, which cannot be changed and does not even support IrComm Protocol.
5 Actisys ACT-IR100UD UNTESTED→ARRIVING buy 10.95 € USB ? ? ?
6 Tekram IRmate IR-210B TESTED→WORKING 9 € RS232/COM 9600 ? ?

* The device works with some exceptions like speeds limited to specific baud rate or some serial converter issues happening.

Prepare Linux Machine (Host)

You should already have GNU/Linux Debian Stretch installed and running. This tutorial does not cover any newer Debian distributions or any other Linux Distributions that are not Debian brand. For Other distributions or newer Debian Linux distributions please read next section.

Lets begin!

I have tested this configuration on MaxData Pro 650T Laptop which already have IrDA integrated. Before that i have already tried same with Compaq Armada M700 but have failed due to smsc-ircc2 kernel module, which was able to talk only in one way and not bidirectional. I was very lucky because MaxData Pro 650T have Bios options to configure IrDA and able to assign port to it, so i set it to com2 port, i have also presented with other parameters for IrDA port:

COM2 Address: 2F8 IRQ 3

I already know the IRQ address, lets run “dmesg” in Linux and get some information:

# dmesg|grep serial
[    3.231566] serial8250: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A

Ah, so in Linux system its actually mapped as /dev/ttyS1 (first port, look at the irq number), ok i've got it.

Enable ip packet forwarding on Linux machine by editing /etc/sysctl.conf and adding the line:

# nano /etc/sysctl.conf 
net.ipv4.ip_forward=1

Save file (CTRL+X, Y, enter).

Now we have to install some user-space software for controlling our IrDA device:

# apt-get install irda-utils ppp
# systemctl enable irda-utils
# nano/etc/default/irda-utils

Change ENABLE=“false” to ENABLE=“true” and save this file (CTRL+X, Y, enter). Reboot the machine:

# reboot

After reboot we can test the IrDA connectivity between devices. On Linux Host machine run command:

irdadump

Prepare your PDA Guest device (mine was HP Jornada 720) and make sure the IrDA adapters are pointed to each other, then run Start > Settings > Control Panel > Communications > PC Connection > Change then select Infrared port and close these two dialogs with “OK” on the window title.

Then go to Start > Programs > Communication click on PC Link, look at your Linux terminal, you should see something like this:

19:35:33.076789 xid:cmd ffffffff < 000010d9 S=6 s=* Handheld_PC hint=8224 [ PDA/Palmtop IrCOMM IrOBEX ] (28) 
19:35:33.604281 snrm:cmd ca=fe pf=1 a0d8b52e < 000010d9 new-ca=56 
LAP QoS: Baud Rate=115200bps Max Turn Time=500ms Data Size=2048B Window Size=4 Add BOFS=0 Min Turn Time=500us Link Disc=12s (32) 
19:35:33.607548 ua:rsp ca=56 pf=1 a0d8b52e > 000010d9 
LAP QoS: Baud Rate=115200bps Max Turn Time=500ms Data Size=2048B Window Size=7 Add BOFS=0 Min Turn Time=5000us Link Disc=12s (31) 
19:35:33.741380 rr:cmd < ca=56 pf=1 nr=0 (2) 
19:35:33.743527 rr:rsp > ca=56 pf=1 nr=0 (2) 
19:35:33.753108 i:cmd  < ca=56 pf=1 nr=0 ns=0 LM slsap=03 dlsap=00 CONN_CMD (6) 
19:35:33.755555 i:rsp  > ca=56 pf=1 nr=1 ns=0 LM slsap=00 dlsap=03 CONN_RSP (6) 
19:35:33.768281 i:cmd  < ca=56 pf=1 nr=1 ns=1 LM slsap=03 dlsap=00 GET_VALUE_BY_CLASS: "IrDA:IrCOMM" "IrDA:TinyTP:LsapSel" (37) 
19:35:33.771536 i:rsp  > ca=56 pf=1 nr=2 ns=1 LM slsap=00 dlsap=03 GET_VALUE_BY_CLASS: No such class (11) 
19:35:33.782052 i:cmd  < ca=56 pf=1 nr=2 ns=2 LM slsap=03 dlsap=00 DISC (6) 
19:35:33.783546 rr:rsp > ca=56 pf=1 nr=3 (2) 

The first line also shows us the Handheld_PC as device name, so we are now have Proof Of Concept that the IrDA hardware link is ok.

Now we will try to mess up with some software tricks to make the dialup server, so Windows CE handheld Guest can connect to the internet via our main machine!

Open File:

nano /etc/ppp/connect.sh

Paste these contents:

#!/bin/bash
read -n 5 i
echo "CLIENTSERVER"
iptables -t nat -A POSTROUTING -o enp0s11 -j MASQUERADE

Save the file (CTRL+X, Y, enter).

Open another file:

nano /etc/ppp/disconnect.sh

Paste this:

#!/bin/bash
iptables -t nat -D POSTROUTING -o enp0s11 -j MASQUERADE

Save the file (CTRL+X, Y, enter).

Yet, another file:

nano /etc/ppp/peers/irda

Paste again:

connect /etc/ppp/connect.sh
disconnect /etc/ppp/disconnect.sh
noauth
debug
kdebug 255
nodetach
nocrtscts
115200
persist
passive
local
/dev/ircomm0
192.168.55.100:192.168.55.101
netmask 255.255.255.0
ms-dns 1.1.1.1

Save the file (CTRL+X, Y, enter).

At last, we can run final commands to start the pppd server:

chmod +x /etc/ppp/connect.sh /etc/ppp/disconnect.sh
modprobe ircomm-tty
pppd call irda debug dump logfd 2 

Now look at the Guest section(s) on how to configure client computer/pda to connect to this Host.

For newer Linux'es

It's possible that this tutorial will be compatible with some newer distributions that uses old kernel version 4.16 or lower and who still maintains and have irda-utils package and all required IrDA kernel modules:

  • irda
  • irtty_sir
  • sir_dev
  • ircomm_tty
  • ircomm
  • crc_ccitt

If there are no kernel modules that does not mean that they are not included in the kernel source, so simple kernel recompile with redefined config will enable you to have these required modules. PLEASE NOTE Linux kernel from version 4.17 completely removed IrDA support from their source code tree in 2008.

There are github repository called Out-of-tree irda subsystem and drivers for Linux which tries to support newer kernel. I have tested with Linux kernel 5.15.25 on OrangePI Lite using Armbian 22.02.1 Focal image. It works without any problems. Here is the basic setup:

apt-get install build-essential git linux-headers-current-sunxi
git clone https://github.com/cschramm/irda.git
cd irda
make -C src
ln -sf /usr/src/irda/src/net/irnet /lib/modules/$(uname -r)/kernel/net/
ln -sf /usr/src/irda/src/net/irlan /lib/modules/$(uname -r)/kernel/net/
ln -sf /usr/src/irda/src/net/ircomm /lib/modules/$(uname -r)/kernel/net/
ln -sf /usr/src/irda/src/net/*.ko /lib/modules/$(uname -r)/kernel/net/
mkdir /lib/modules/$(uname -r)/kernel/drivers/net/irda
ln -sf /usr/src/irda/src/drivers/*.ko /lib/modules/$(uname -r)/kernel/drivers/net/irda/
depmod -a

Now you can load any necessary IrDA adapter kernel module or general support IrDA modules such as ircomm or ircomm-tty.

Windows CE 3.0 (Guest)

As i mentioned before we will be using HP Jornada 720 as the Guest PDA to connect to the Host machine via IrDA. So in the PDA navigate:

Start > Programs > Communication > Remote Networking.

The new Window will appear with “Make New Connection” icon, click on it. Type the Connection Name and select connection type: Direct Connection. Click Next, Select the device that you want to use: Infrared Port. The rest of the information can be seen in the pictures.

After you finish setting a connection click Finish. Now double click on it to connect. For testing you can use this tool to ping other devices on the network or internet.

Windows CE 2.11 (Guest)

Additionally I have tested this setup with NTT DoCoMo Sigmarion 1 which is running Windows CE 2.11. You have to install HPC:Factor Generic IrDA Modem Driver (GenIrDA-c3.CAB).

Here are the pictures with the configuration.

Ready to use IrDA Box

I have started working on some kind of open device, that acts like Wifi→IrDA bridge, which has a nice Web Management based UI. It's based on the same OrangePI Lite Board with some integrated batteries to make device more portable. I'm now testing few hardware prototypes and developing software at github. So everyone who is interested can build the device himself. All required tools and components are mentioned in the README. So if you are interested please look at it.

 
irda_internet_sharing.txt · Last modified: 2023-08-01 16:18 by e1z0
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial 4.0 International
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki