Friday, April 24, 2009

Connecting to Internet on Ubuntu using GPRS on HTC PDAs

I own an awesome O2 XDA Orbit (base model - HTC P3350) PDA which has kept me satisfied with its features for almost last 2 years. Coupled with a fantastic GPRS plan from Idea (with really good connection speeds, I admit), it was very easy for me to remain connected  24x7. When my laptop had Windows (OEM version that came with my Dell Vostro), the internet connection sharing feature on the PDA allowed me to use GPRS internet on my laptop whenever I visited Sangli. Windows used to automatically configure itself to use this GPRS internet (I didn't like it though, as these things were happening without me knowing any details).

Then came a day when I got frustrated enough with Windows, and destroyed windows (with all its partitions) once and for all, from my laptop, and installed 3-4 different linux flavours instead. That (golden) day was Sunday 8 March 2009.

Since then, I have never missed windows again, but for some exceptions like iTunes, which is just not available on windows (see my previous post about this - iTunes for Ubuntu) or configuring different networking interfaces (like autoconnecting to wireless networks). Connecting to GPRS internet connection provided by my PDA to Ubuntu, had been one such problem that I didn't have a clue about.

The solution, though, turned out to be pretty simple. There are two ways to share Internet Connection from a windows mobile 6 device, like my O2 XDA Orbit -
  1. USB
  2. Bluetooth PAN

USB Connection (RNDIS)


What is needed is an RNDIS (Remove Network Device Interface Specification) driver on Ubuntu.
So get the sources of one such driver, build it and install the kernel module -

shreyas@ghatotkatch:~$ svn co https://synce.svn.sourceforge.net/svnroot/synce/trunk/usb-rndis-lite
shreyas@ghatotkatch:~$ cd usb-rndis-lite
shreyas@ghatotkatch:~/usb-rndis-lite$ make
shreyas@ghatotkatch:~/usb-rndis-lite$ sudo ./clean.sh
shreyas@ghatotkatch:~/usb-rndis-lite$ sudo make install


Then edit the network interface file -

shreyas@ghatotkatch:~/usb-rndis-lite$ sudo emacs /etc/network/interfaces

Add following entries to the interfaces file -

auto rndis0
iface rndis0 inet dhcp


Save the file and restart your network interfaces -

shreyas@ghatotkatch:~/usb-rndis-lite$ sudo /etc/init.d/networking stop
shreyas@ghatotkatch:~/usb-rndis-lite$ sudo /etc/init.d/networking start


That's it. Now on your WM6 PDA, select Start>Programs>Internet Connection Sharing.
I assume you have already configured GPRS on your PDA. So in the Internet Connection Sharing app, select USB as PC-Connection type, and click Connect. Now connect your PDA to the USB port.

The RNDIS connection should be automatically configured and the rndis0 interface should have got an IP address. To check this, run /sbin/ifconfig command, and verify the rndis0 interface.

Reference - http://forums.opensuse.org/1579065-post1.html


Bluetooth PAN

It has been my experience that Bluetooth PAN (Personal Area Network) slows down the internet connection a bit (as compared to connecting to USB) and also eats into the device battery.

Anyway, to configure a Bluetooth PAN on Hardy Heron (8.04), you need to install atleast following packages -

shreyas@ghatotkatch:~$ sudo apt-get install bluez bluez-compat

The network interfaces file will need to be edited -

shreyas@ghatotkatch:~$ sudo emacs /etc/network/interfaces

Add a new interface for our Bluetooth PAN -

auto benp0
iface benp0 inet dhcp


Then add the bnep module to the kernel. This module takes care of the Bluetooth PAN interface. By the way, BNEP stands for Bluetooth Network Encapsulation Protocol.

shreyas@ghatotkatch:~$
sudo modprobe bnep

Now select Bluetooth PAN as PC Connection type in internet connection sharing app on your PDA, and try to find the PDA from your laptop / PC - 

shreyas@ghatotkatch:~$ hcitool scan
Scanning ...
    00:17:E5:3F:BE:E8    hexaM!ner


Use the hex string to connect to the PAN network -

shreyas@ghatotkatch:~$ sudo pand --connect 00:17:E5:3F:BE:E8


That's it. You should be connected, and your bnep0 interface should have got a brand new IP address. You can verify it using /sbin/ifconfig.

Reference: This article on samiux.wordpress.com


Technorati Tags: , , , ,

India Votes: My Experience With Section 49-O

With so many hopes, so many emotions, so many uncertainties and so many opinions going into this election in India, the dust has finally settled  on this leg of the election which covered most of the Maharashtra. For long their had been this talk about negative voting (which unfortunately hadn't been implemented in this election), and about the section 49-O of Conduction of Elections Rule 1961. The talk started gaining momentum especially after the mass public awaking due to the Mumbai attacks in November 2008. Those images of the majestic Taj burning helplessly, burnt many a hearts in India. People started being very vocal against the politicians. And then started many exchanges about this Section 49-O. Not many people were aware of existence of any such thing. There were many rumors as well about what exactly is this section and how one can use it. There were rumors about this being used against a candidate if the number of section 49-O votes exceeded the number of votes the winning candidate garnered.

So to get to the base of it, I went through lots of websites and links. I googled around here and there, through Indian government websites, and the likes of wikis; and finally I came to know for sure that, the section 49-O does exists, and though not as useful as has been rumored, it at least allows one to be a responsible citizen by letting him show the intention of casting his vote, but still making it possible for him to listen to his intellect and avoid committing a moral crime by voting for a criminal.

Even after all this brouhaha about this, I am sure, quite a lot people who are in the know, still doubt about existence of such a section. They confuse it with the negative-voting proposal and dismiss it saying it's still not implemented.

I had verified this section in the actual law text on an official Indian Govt website and wanted to rest all those doubts once and for all through a real voting experience. So here are the details of what happened in an election booth in Sangli, my home town, when I tried to actually use this section.

I went in the election booth, signed against my name, got my finger painted, and just before voting, I told them I wanted to speak to the election booth officer. The officer was not at his desk at that time, so they asked me exactly why I want to talk to the booth officer. I told them I wanted to use section 49-O. From their reaction, I realized I was first such 'case' there. After I explained to them what exactly it was, in as pure Marathi as much I could get out of my partially westernized tongue, few heads started turning, due to this unusual discussion in an election booth. Then once the whole thing sunk in, everybody around was on a mission to convince me that such thing just doesn't exist. I got a jolt when even the election booth officer outrightly refused knowing about any such thing as section 49-O. All this time, I was firm on my stand that there does exist this section which allows me not to vote for any of the candidates, and the booth officer/supervisor just needs to note my name down in some list. After around half an hour of discussions, and lots of rounds of convincing each other, they gave in and started going through their documents, instructions and booklets. And finally one of the smart guys there, found the section mentioned in the booklet. He was honest enough to read it aloud, even though that meant I being exactly right, and they all being totally wrong. While I don't want to blame those guys there, I really feel the need for these people being clearly briefed about existence of such a section, so that somebody who really wants to use this sections, doesnt get persuaded out of it.

Finally, there came a remark against my name on voter's list saying - 'Matadaan karanyas spashta nakaar' - 'Outright refusal to vote'!!
I was registered to have voted, my finger was painted, and still I didnt commit a moral crime by voting for a crook/a criminal.

I know people will be quick enough to dismiss this as juvenile, immature, and what not. They will be quick to tell me that this defeats the basic purpose of democracy if you refuse to vote. The wikipedia page on section 49-O mentions such criticisms by so-called 'experts' criticizing the negative voting proposal.

The first specific criticism is - "It is the duty of every citizen to educate himself/herself about the agenda of the candidates and to vote conscientiously for the candidate they think is better. The very purpose of an election is that a representative should be chosen by the people. Encouraging people not to express their preferred candidate goes against the intended purpose."

Think about it this way. In India, politics is by and large looked down upon. This is because of the presence of large number of crooks and criminals amongst the political masses. So the political spectrum remains devoid of the honests, capables and the 'good' guys. The general apathy of people towards voting speaks a lot for itself. So even in its current form, it will be very bold to say that people are 'choosing' their representatives, when the voting percentages are 40% and 50%. If negative voting is allowed, people will get a new, powerful and most importantly a >real< weapon in their hands, with which they can have a better go at having good leaders. As far as my information goes. the negative voting proposal also notes that if there happens a case where negative votes exceed the votes garnered by any of the candidates, those same candidates will not be allowed to appear for a re-election in that constituency. This makes perfect sense. This will teach the crooks a lesson and will give the deserving, well-educated leaders a new hope. So rather than going against the intended purpose, this negative voting proposal actually goes totally in line with the intended purpose.


The second criticism is that this will result in waste of public funds. How naive!!!
I mean what is costlier? Re-election? or choosing a criminal to guard and use the public fund?


They say, people get the kind of leaders they deserve. In India, getting the middle class to vote is key to 'deserving' better leaders and this radical step of allowing negative voting is a surefire way to make them feel positive about voting.

I just hope we are not kept waiting for this very important and much anticipated electoral reform, even in the next election.

Sunday, April 12, 2009

VirtualBox VM with Host Interface Setup on Debian Lenny

For sometime now I had been wishing for a debian virtual machine which can talk to the host - another debian or a ubuntu. If you have used VirtualBox on debian/ubuntu before, I am sure you know NAT is the easiest type you can setup in VirtualBox OSE; while Host Interface configuration is probably the toughest to figure out on your own, especially if you are not used to setting up bridges and stuff. But necessity is mother of reasearch, for engineers. So after a day of struggle I have finally got what I wanted. Here I share with you not only the installation of virtualbox ose in a trouble free manner, but also the simplest way host interface can be configured.

Installing virtualbox on ubuntu turned out to be a breeze for me, as I used the VirtualBox package directly from the virtualbox website. On my Debian Lenny 5.0 though, the DVDs installed VirtualBox-OSE v1.6x which is the open-source-edition; and totally inline with the debian tradition and philosophy. Since I am becoming more and more inclined towards this total-GPL thingy, I decided to set up this GPLed virtualbox only, come what may. I hear Virtualbox v2.1 makes things a lot easier though, just in case you wanna try.

To start with, first I installed the virtualbox-ose packages.
mrutyunjay:~$ sudo apt-get install virtualbox-ose virtualbox-ose-modules module-assistant

module-assistant is required for setting up 'vboxdrv' module required by virtualbox.

Once the installation is through, auto-install the vboxdrv module using module-assistant.
mrutyunjay:~$ sudo m-a prepare
mrutyunjay:~$ sudo m-a -f get virtualbox-ose
mrutyunjay:~$ sudo m-a a-i virtualbox-ose
mrutyunjay:~$ sudo modprobe vboxdrv


Add yourself to the 'vboxusers' group (so that virtualbox can access vboxdrv)
mrutyunjay:~$ sudo adduser username vboxusers

Check your 'kernel' argument list in /boot/grub/menu.lst. Just in case it has something like nmi-watchdog in it, remove that portion. (Mine didnt have this). This is to avoid one of the most commonly observed troubles while setting up virtualbox.
Check if 'vboxdrv' module was loaded successfully -
mrutyunjay:~$ dmesg | grep vboxdrv

You should see a success message, like the one below -
[ 1883.765045] vboxdrv: Successfully loaded version 1.6.6_OSE (interface 0x00080000).

If you get the above message, you are done with the first part. Now reboot your system (relogin should do as well).

Host Interface Configuration

For setting up Host Interface, we will need to install bridge-utils package.
mrutyunjay:~$ sudo apt-get install bridge-utils

There are at least two ways to setup the bridge which will enable the host to talk to guest, and vice versa. One is to set a simple bridge definition in /etc/network/interface file. The other is to write setup and cleanup scripts for bridge and TAP interfaces (using VBoxTunctl and brctl); and then run these scripts before and after start-stop of the virtual machine. Out of these, the first approach of modifying the  /etc/network/interface file, is easiest one and gets the job done in short time.

To setup the bridge, first you need to create a permanent TAP interface for virtualbox. Open the /etc/vbox/interfaces file -
mrutyunjay:~$ sudo emacs /etc/vbox/interfaces

Add following definition to it -

vbox0 username br0

Goes without saying that you should replace 'username' with your user name in the above definition.
Here br0 is the name of the bridge that we are going to setup now.

Open the /etc/network/interfaces file for editing.
mrutyunjay:~$ sudo emacs /etc/network/interface

Add following bridge definition to the file -

auto br0
iface br0 inet static
      address 10.0.0.1
      netmask 255.255.255.0
      bridge_ports vbox0


You can customize the IP address and netmask. I have set it up to be static, for simplicity.

Now that we are done with network interface settings, time to restart both the networking interfaces -
mrutyunjay:~$ sudo /etc/init.d/networking restart
mrutyunjay:~$ sudo /etc/init.d/virtualbox-ose restart


Our 'vbox0' TAP interface requires bridge 'br0' defined before it gets attached to the bridge. So make sure you dont alter the order above.
After restarting network interfaces, ensure that our TAP and bridge interfaces are up and running, using /sbin/ifconfig. It should show 'br0' with above entered IP address and 'vbox0' without any IP address.
We enter this TAP interface name (vbox0) in virtualbox network configuration. Set the network to Host Interface and enter vbox0 as interface name and start the virtual machine.

Guest VM Setting (linux flavour)


I had lightweight text-mode debian lenny 5 as my guest VM. So I will explain the network setting accordingly. But for any other linux flavours, network setting should be on these lines only.

Here in the guest VM, you need to setup the networking interface eth0 to be aware of 10.0.0.1 bridge. The bridge is your host machine.
So add following information to your /etc/network/intertface file -

shaunak:~$ sudo emacs /etc/network/interface

iface eth0 inet static
    address 10.0.0.2
    netmask 255.255.255.0
    network 10.0.0.0
    broadcast 10.0.0.255
    gateway 10.0.0.1



And finally, restart networking -
shaunak:~$ sudo /etc/init.d/networking restart

That's it! Now try pinging your bridge 10.0.0.1 from VM and vice versa -

shaunak:~$ ping -c3 10.0.0.1

mrutyunjay:~$ ping -c3 10.0.0.2

If both the pings are successful, YO!, your network is up and running.