Originally Published: Monday, 7 May 2001 Author: Steve Gula
Published to: featured_articles/Featured Articles Page: 1/1 - [Printable]

TCP/IP Takes Flight: RFC1149

I just couldn't imagine what would be going on in someone's head 11 years ago when they published this RFC, let alone when someone said "let's do this, let's strap an IP packet to a pigeon's leg".

   Page 1 of 1  

It was in early April, when I was checking the latest submissions for upcoming LUG events, when I spotted two that caught my attention. One was about a typical LUG meeting with Alan Cox as the guest speaker, the next was by the same LUG but mentioned RFC1149. Now some of us aren't as enlightened, so here is some background information. RFC stands for "Request for Comments" and is a _proposed_ standard for a given topic. In this case, RFC1149's title is "A Standard for the Transmission of IP Datagrams on Avian Carriers". So this is about where I wet myself and fell out of my chair laughing. I just couldn't imagine what would be going on in someone's head 11 years ago when they published this RFC, let alone when someone said "let's do this, let's strap an IP packet to a pigeon's leg". So I watched the LUG event database, made sure the entry went unchanged, and about April 17th I finally emailed the LUG contact for some more information. The event was confirmed and contact information swapped. The days counted by, and finally an email from Vegard Engen came again. Vegard is a member of the Bergen Linux User Group of Norway. The email started like this :

"Just wanted to tell you that the rfc 1149 implementation was a success! Some packet loss, mainly because two of the six doves assigned to return traffic ran away before anyone got the IP packet attached to their leg...."

Needless to say I got a few laughs and fired off another email. Below are my questions and Vegard's responses.


Linux.com: Who thought it would be a great idea to try this?

Vegard: Well, it was a collective decicion. Basically, it was mentioned over a beer, as many a good idea. Some of us decided that we simply *had* to implement it, because the implementation really was that simple.

Linux.com: What was the time/date/place of the RFC1149 test?

Vegard: The first packet was sent approximately 12:15, Saturday April 28th. The test itself took about 3 hours to complete.

Linux.com: Who provided the pigeons and how many ales did it take to convince him to use them for this?

Vegard: The test was a cooperation project between BLUG and Vesta Pigeon Racing Club (Vesta Brevdueforening).

Basically, we searched for "brevdue" (Norwegian for carrier pigeon) and Bergen, and these guys showed up. We sent them a mail, arranged a meeting (details of the meeting are at the RFC 1149 web page), and went off to implement it. We didn't actually meet again until the day of the test, they took care of the pigeon technicalities and we took care of the computer technicalities. It all worked beautifully as expected. We didn't have to bribe them at all.

Linux.com: What was the average time in minutes:seconds it took for each packet? What was the distance travelled?

Vegard: I think I'll just cut&paste the ping log here. You'll notice that we have a packet loss of 5 out of 9 packets. This is due to several factors:

  1. We had 8 pigeons at one site, but only 6 at the other site. Thus, we could have had a maximum of 6 replies.
  2. To allow the packets to get back, and not time out, I had to let the ping run to the 9th packet. The 9th packet was thus never sent, because we had no pigeon to send it with.
  3. The pigeons are flock animals. The ones we sent joined another flock nearby, and hung out with them for more or less an hour. When they finally flew on, they went together. This kept the people in the other end busy, and they forgot to close the cage door after the 4th pigeon. Thus, the two remaining ones escaped without any payload at all...

Well, the log:

Script started on Sat Apr 28 11:24:09 2001
vegard@gyversalen:~$ /sbin/ifconfig tun0
tun0      Link encap:Point-to-Point Protocol  
          inet addr:10.0.3.2  P-t-P:10.0.3.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:150  Metric:1
          RX packets:1 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 
          RX bytes:88 (88.0 b)  TX bytes:168 (168.0 b)

vegard@gyversalen:~$ ping -i 450 10.0.3.1
PING 10.0.3.1 (10.0.3.1): 56 data bytes
64 bytes from 10.0.3.1: icmp_seq=0 ttl=255 time=6165731.1 ms
64 bytes from 10.0.3.1: icmp_seq=4 ttl=255 time=3211900.8 ms
64 bytes from 10.0.3.1: icmp_seq=2 ttl=255 time=5124922.8 ms
64 bytes from 10.0.3.1: icmp_seq=1 ttl=255 time=6388671.9 ms

--- 10.0.3.1 ping statistics ---
9 packets transmitted, 4 packets received, 55% packet loss 
round-trip min/avg/max = 3211900.8/5222806.6/6388671.9 ms 

vegard@gyversalen:~$ exit

Script done on Sat Apr 28 14:14:28 2001

Linux.com: Throw in any technical details here :) protocols used (PPP?), what were the packets sent, how did you transfer them from computer->paper->computer, etc.

Vegard: We used the Universal TUN/TAP driver in Linux kernel 2.4.x. This is an interface to tunnel IP packets over basically anything, as long as you can write a program for it. A userspace daemon attaches to /dev/net/tun, a character device (major 10, minor 200). This makes an interface, tun0, appear on the machine. Give it an IP address, netmask, a mtu (we used 150), and a point-to-point-address, and you can start using it for packets. The userspace daemon can then read the IP packets from the interface and do whatever it wants with it. In a similar fashion, packets in the other direction has to be written to it.

To make this implementation work, we had to print out hex-representations of the packets. These were rolled up, attached to a pigeon leg, and sent to the remote site. There, they were unrolled, scanned, OCRed, and put in a directory which the userspace daemon monitored. The files in that directory was just read and written to the /dev/net/tun-interface, and appearing in the networking layers of the other machine. This of course went both ways.

Linux.com: What was the population turnout for this event?

Vegard: Well, we hadn't announced it too well, basically because we were unsure how the pigeons would react to a large population turnout. It was basically only 10-15 persons there at the test. The mainstream media didn't really recognize the opportunity, even though they were invited.

Linux.com: Anything else you'd like to add? Pictures, resources, etc?

Vegard: Well, the official web-site is at http://www.blug.linux.no/rfc1149/ - any resources are reachable directly from there.

Linux.com: Got any more insane events like this planned?

Vegard: Not yet. But, we challenge Linux User Groups over the world to find projects like this, and just go ahead and do it. Someone high up in Microsoft, whose name I have completely forgotten, recently said that Linux was a toy. He's damned right, it's ALSO a toy.


And there you have it, the information regarding the recent World's First RFC1149 test. I really don't know what to say, other than "I wish I was there for it." Just make sure you check out the site at http://www.blug.linux.no/rfc1149/ and view those pictures. And just so you don't have to ask, yes, that is Alan Cox in his red hat. Obviously IP over Avian Carrier isn't how you want to play your first person shooter over the internet, but it's still pretty darn cool to see it in action.

Steve "Loco3KGT" Gula is a Slackware user for 3 years and counting, is a Business Management student at James Madison University and is currently the President of JMU's Unix Users Group.





   Page 1 of 1