Puppy Linux Discussion Forum Forum Index Puppy Linux Discussion Forum
Puppy HOME page : puppylinux.com
"THE" alternative forum : puppylinux.info
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

The time now is Thu 20 Nov 2014, 22:29
All times are UTC - 4
 Forum index » House Training » HOWTO ( Solutions )
How to configure wifi from the commandline
Moderators: Flash, Ian, JohnMurga
Post new topic   Reply to topic View previous topic :: View next topic
Page 1 of 13 [182 Posts]   Goto page: 1, 2, 3, ..., 11, 12, 13 Next
Author Message
tempestuous

Joined: 10 Jun 2005
Posts: 5281
Location: Australia

PostPosted: Sat 08 Dec 2007, 22:12    Post subject:  

PART 2: WPA encryption.

For WPA encryption the "iwconfig" utility cannot be used at all. Instead, the "wpa_supplicant" utility is needed, and this is the utility which is used by Puppy's Network Wizard to configure WPA connections.

Exception:
Ralink drivers in Puppy versions older than ver 4.1 can be set up for WPA encryption with unique "iwpriv" commands. See -
"PART 3: WPA encryption with Ralink devices"
http://www.murga-linux.com/puppy/viewtopic.php?p=159339#159339

wpa_supplicant needs to have a "-D" (driver) parameter specified, depending on which wifi driver is being used;

Compatible drivers using the "hostap" parameter:
hostap

Compatible drivers using the "ipw" parameter:
r8180
r8187

Compatible drivers using the "wext" (generic) parameter:
acx
ath5k
ath_pci
b43
b43legacy
bcm43xx
ipw2100
ipw2200
ipw3945
iwl3945
iwl4965
libertas_cs
libertas_sdio
ndiswrapper
p54pci
p54usb
rndis_wlan (Broadcom USB)
rt2400pci
rt2500pci
rt2500usb
rt2860sta
rt2870sta
rt61pci
rt73usb
rtl8180
rtl8187
usb8xxx
zd1211
zd1211b
zd1211rw

Compatible drivers using the "ralink" parameter:
rt61
rt73

INSTRUCTIONS
Use Geany to modify the WPA configuration file to include your SSID and Personal Security Key (PSK).
Puppy already contains 2 different configuration files;
/etc/network-wizard/wireless/wpa_profiles/wpa_supplicant.conf - for WPA encryption
/etc/network-wizard/wireless/wpa_profiles/wpa_supplicant2.conf - for WPA2 encryption

As an example, let's assume your wifi driver is the ipw2200 (so the -D parameter will be "wext") and this driver has created the network interface "eth1", and your wifi router is set for WPA2 encryption. First you must load your driver if Puppy has not automatically done so already
Code:
modprobe ipw2200

It's often necessary to "bring up" the interface unconfigured
Code:
ifconfig eth1 up

Remove stale wpa_supplicant file if it exists
Code:
rm /var/run/wpa_supplicant/*

Start wpa_supplicant with debugging enabled (-dd) in case of problems
Code:
wpa_supplicant -i eth1 -D wext -c /etc/network-wizard/wireless/wpa_profiles/wpa_supplicant2.conf -dd

wpa_supplicant may take about 30 seconds to negotiate the connection.
Hopefully you will see a connection reported, then you can open a second console and proceed to obtain an IP address (DHCP).
It's possible to background the wpa_supplicant process in order to keep using the same xterminal by adding "-B" to the command
... but do this only once you know that the wpa_supplicant command is successful, because once backgrounded you won't see any error messages.

Now for DHCP with Puppy 3.x and earlier -
Code:
rm /etc/dhcpc/*.pid
dhcpcd -t 30 -h puppypc -d eth1


for Puppy 4.0 onwards, the version of dhcpcd is different, thus -
Code:
rm -f /var/lib/dhcpcd/*.info
rm -f /var/run/*.pid
dhcpcd -t 30 -h puppypc -d eth1


If this dhcpcd command fails, try it with extra parameters which avoid any use of the new logic for ipv6-compatible Client ID, like this -
Code:
dhcpcd -I '' -t 30 -h puppypc -d eth1

That's hyphen, capital i, space, apostrophe, apostrophe (not quotation marks). Thanks to rerwin for this information.

or to obtain a static IP address,
modify /etc/resolv.conf to include your nameservers, then
Code:
ifconfig eth1 192.168.0.xx broadcast 192.168.0.255 netmask 255.255.255.0
route add default gw 192.168.0.1 eth1

Obviously replace the appropriate IP addresses.

Last edited by tempestuous on Mon 21 Mar 2011, 19:57; edited 8 times in total
Back to top
View user's profile Send private message 
tempestuous

Joined: 10 Jun 2005
Posts: 5281
Location: Australia

PostPosted: Sat 08 Dec 2007, 22:23    Post subject:  

PART 3: WPA encryption with Ralink devices (pre-Puppy 4.1 ONLY)
Updated Aug 7 2008
From kernel version 2.6.23 on, there is a completely new range of Ralink drivers called "rt2x00" series. These drivers use conventional WPA configuration using the "wext" -D parameter with wpa_supplicant. Refer to instructions earlier in this thread.

But the older "enhanced legacy" Ralink drivers have native support for WPA encryption without the need for wpa_supplicant.
Specifically these drivers are; rt2500, rt2570, rt61, rt73.

INSTRUCTIONS - let's assume your driver is rt61, and your network interface is "ra0"
(the USB drivers, rt2570 and rt73, create an interface called "rausb0").
First load your driver if Puppy has not automatically done so already
Code:
modprobe rt61


It's often necessary to "bring up" the interface unconfigured
Code:
ifconfig ra0 up


Now here are the critical WPA configuation commands:
Code:
iwconfig ra0 mode managed
iwpriv ra0 set AuthMode=WPAPSK
iwpriv ra0 set EncrypType=TKIP
iwconfig ra0 essid "MY_ESSID"
iwpriv ra0 set WPAPSK="MY_SECRET_PASSPHRASE"
iwconfig ra0 essid "MY_ESSID"

Obviously replace "MY_SECRET_PASSPHRASE" with your Personal Security Key (PSK) and "MY_ESSID" with your SSID.
Notice that the iwconfig command is run twice, but when a 64 character hex string is used, the first iwconfig command may be omitted.

If your wifi router uses WPA2 encryption (not WPA) then the "EncrypType" value is different -
Code:
iwpriv ra0 set EncrypType=AES


Now for DHCP with Puppy 3.x and earlier -
Code:
rm /etc/dhcpc/*.pid
dhcpcd -t 30 -h puppypc -d ra0


for Puppy 4.0 onwards, the version of dhcpcd is different, thus -
Code:
rm -f /var/lib/dhcpcd/*.info
rm -f /var/run/*.pid
dhcpcd -t 30 -h puppypc -d ra0


If this dhcpcd command fails, try it with extra parameters which avoid any use of the new logic for ipv6-compatible Client ID, like this -
Code:
dhcpcd -I '' -t 30 -h puppypc -d ra0

That's hyphen, capital i, space, apostrophe, apostrophe (not quotation marks). Thanks to rerwin for this information.

or to obtain a static IP address,
modify /etc/resolv.conf to include your nameservers, then
Code:
ifconfig ra0 192.168.0.xx broadcast 192.168.0.255 netmask 255.255.255.0
route add default gw 192.168.0.1 ra0

Obviously replace the appropriate IP addresses.

Puppy contains an alternative wifi configuration utility, RutilT, which was originally written specifically for Ralink wifi drivers. It should be possible to use RutilT to configure WPA connections with the older Ralink drivers.


PART 4: Troubleshooting, encryption problems

You can see from the instructions so far that encryption, either WEP, WPA, or WPA2, adds an extra layer of complexity to the setup.
It makes sense, therefore, that during initial setup and testing it's a good idea to disable encryption at your wifi router. Once you have successfully established a working wifi connection you can then re-enable encryption, and add the extra setup parameters related to encryption.
In many instances, wifi problems are directly linked to encryption issues.

A common cause of these problems is that encryption requires some additional cryptographic modules to be loaded. Sometimes the wifi modules (which are already loaded) will automatically load the extra modules, but sometimes not. The solution is quite simple; manually load the required modules.
for Puppy version 2.x
ieee80211_crypt_wep
ieee80211_crypt_ccmp
ieee80211_crypt_tkip
arc4
aes
crc32c
michael_mic (only for the ipw2100/ipw2200 modules)

for Puppy version 4.1.x and 4.2.x
ieee80211_crypt_wep
ieee80211_crypt_ccmp
ieee80211_crypt_tkip
arc4
ecb
cbc
crypto_blkcipher
aes_generic
crc32c
michael_mic (only for the ipw2100/ipw2200 modules)

for Puppy version 4.3.x and 5.x
lib80211_crypt_ccmp
lib80211_crypt_tkip
lib80211_crypt_wep
arc4
ecb
cbc
aes_generic
crc32c

Some wifi modules do not use generic cryptographic modules, but have unique encryption-related modules. For example, the ath_pci (MADWiFi) module depends on the wlan_wep module.

Last edited by tempestuous on Mon 21 Mar 2011, 19:58; edited 11 times in total
Back to top
View user's profile Send private message 
davids45


Joined: 26 Nov 2006
Posts: 655
Location: Chatswood, NSW

PostPosted: Mon 10 Dec 2007, 22:41    Post subject:  

G'day Tempus,
Had a go last night with your WPA advice above, on my RALINK2500 usb in-built wifi that I was having trouble connecting using the wizard in 3.01. The wizard in 2.17 works perfectly on my WPA managed network for both my desktops having these in-built RALINK 2500 usb wifis.
Wizard 3.01 had said the rt2570 driver did not support WPA and would only offer me WEP.
I tried commanding with the rt73 usb driver and stipulating rausb0 (based on the 2.17 success) but got an error when I reached "iwpriv...set...." along the lines that "set" was an invalid command.
Nonetheless I kept going and got some sort of connection to somewhere (blinky started up).
I thought your two iwconfig "might (?) be needed in rare cases" lines applied to my computer set-up. I typed them in and got no error messages.
The final iwconfig output was a RT2500usb interface with my correct ssid but a missing "NickName" variable.
I'll try again tonight, but can you clarify the "set" error?

RutilT - should it respond when I have my RT2500 wireless working with 2.17 through my WPA network? I thought it only could see WEP or Open networks? But you say it will monitor RALINK/WPA set-ups, but only these for WPA? I had not been able to get anything set up here with RutilT and WPA. I only recall seeing WEP during goes with RutilT set-up.

Thanks for all your help,

David S.
Back to top
View user's profile Send private message 
tempestuous

Joined: 10 Jun 2005
Posts: 5281
Location: Australia

PostPosted: Tue 11 Dec 2007, 01:14    Post subject:  

Oops, I just realised that I should have made it clear that the Puppy Network Wizard uses wpa_supplicant for WPA configuration.
I have amended earlier instructions just now.

With your particular Ralink device in Puppy 3.01 you have 2 main options, with several sub-options:

A. unload the rt2570 module, and load the rt73 module instead, like this
Code:
rmmod rt2570
modprobe rt73

Don't assume that your interface name is "rausb0". I think that more recent versions of the rt73 driver (and the rt2570 driver) now create the more conventional interface "wlan0".
Run "ifconfig -a" to check. Then:

A1. Use the Network Wizard. The rt73 driver is compatible with wpa_supplicant so the Wizard should now work.

A2. Or if you prefer to run commands manually, use the wpa_supplicant commands explained in PART 2.

A3. If your wifi access point uses WPA, not WPA2, then you could use the iwpriv commands explained in PART 3, or you could use RutilT.

B. leave the rt2570 module loaded, then:
B1. Use iwpriv commands explained in PART 3, but again, don't assume that your interface name is "rausb0".

B2. Use Rutilt, which is effectively the same as B1.
Back to top
View user's profile Send private message 
tempestuous

Joined: 10 Jun 2005
Posts: 5281
Location: Australia

PostPosted: Tue 11 Dec 2007, 01:19    Post subject:  

PART 4: ad-hoc wifi connections, October 2009

ad-hoc is a peer to peer network connection. There's no master station, so there's no management of network communication. Multiple peers can join the same ad-hoc network, but network communication becomes more difficult as more peers join, since no one gives permission to talk.

ad-hoc mode should not be confused with mesh networking!

I have successfully established an ad-hoc wifi connection under Linux a few years ago using the prism2_usb driver, but wifi drivers have changed significantly since the recent introduction of the underlying mad80211 wifi stack, so the following information is theoretically correct, but untested by me.

When a Linux wifi driver loads, it defaults to "station" (managed) mode. To change the mode to ad-hoc (or any other mode) you must first bring down the interface, as such -
Code:
ifconfig wlan0 down

Now you can change the mode to ad-hoc -
Code:
iwconfig wlan0 mode ad-hoc

Now the interface can be brought up (made active) again -
Code:
ifconfig wlan0 up

Now let's say you want to create an adhoc connection, using the ESSID (wifi network identifier) "pup2pup" and a WEP encryption key (in hex form, not alphanumeric) of "1234567890". Do this -
Code:
iwconfig wlan0 channel 6

(both ad-hoc peers must select the same channel)
Code:
iwconfig wlan0 essid pup2pup
iwconfig wlan0 key 1234567890 restricted

Now each ad-hoc peer must select an IP address on the same subnet -
Code:
ifconfig wlan0 192.168.0.2 broadcast 192.168.0.255 netmask 255.255.255.0

I chose 192.168.0.2 to deliberately avoid the common IP address used by routers: 192.168.0.1
Your other ad-hoc peer should select something like 192.168.0.3
It's possible, but somewhat overcomplicated, to have one peer act as a DHCP server and the other peer acquire an automatic IP address.

It's possible to use WPA encrytion instead of WEP by replacing the "iwconfig wlan0 key ..." command with a wpa_supplicant command, but I haven't bothered to investigate this. And given that most ad-hoc connections are of a temporary nature, WPA encryption doesn't seem a vital requirement to me.

Last edited by tempestuous on Thu 29 Oct 2009, 05:58; edited 1 time in total
Back to top
View user's profile Send private message 
davids45


Joined: 26 Nov 2006
Posts: 655
Location: Chatswood, NSW

PostPosted: Tue 11 Dec 2007, 19:00    Post subject:  

G'day 'stu',
Thanks for your continued advice.
I did have another play last night trying wlan0 in place of rausb0 but got much the same result with your original code lines.
An extra Blinky appeared (eth0 is there and OK) but nothing wifi actually working.

However while later adding an sfs to my frugal /mnt/home, I noticed the 'system start' tool for doing this also has a black-listing capability for 'de-fault' drivers that are not suitable (= "the-fault drivers"??). So, using this, I stopped rt2570 from loading and added "ndiswrapper" as a to-be-loaded driver. On re-starting the 'puter, and then the network wizard, there was no pre-loaded default wifi network driver and I was able to click the ndiswrapper tab and link to my XP rt2500 inf file without error messages, or 'no new network' boxes when then testing with the wizard. So I had a working WPA wireless network. And it was registering on RutilT which I had thought was only for WEP systems.

The big test was this morning with a cold re-start. Having two minutes** before fleeing to work, had time to start-up, see the two network blinkies, use RutilT to check the wireless blinky was my network (and not one of the neighbours' open systems), check my email, then close down. So, success!

Thanks again,
David S.

**do that with Windows!
Back to top
View user's profile Send private message 
nobles

Joined: 12 Dec 2007
Posts: 9
Location: Winnipeg, Canada

PostPosted: Thu 13 Dec 2007, 00:26    Post subject:  

I edited /etc/wpa_supplicant.conf and followed the commands in Part 2 and did get WPA working with my DLink WPA-PSK router but I had to start another terminal session to enter the dhcpcd command as the wpa_supplicant command never successfully returned to the command prompt (although it obviously did its work as the encryption was setup). When I entered the dhcpcd command in the second terminal, I successfully got an IP address and I could browse the Internet. This was with a DLink Atheros based card using the ath_pci driver.
Back to top
View user's profile Send private message 
yorkiesnorkie


Joined: 04 Jun 2007
Posts: 505
Location: George's Island

PostPosted: Mon 07 Jan 2008, 12:04    Post subject: Re: excellent
Subject description: slap me up the side of the head but...
 

Hi,

I'm still a linux command line newbie. I can follow the command line stuff here but I'm not sure I quite understand what to do with a script. Where does the following script go? Is it just a file in /root? Do you call it anything special? Or, do I add it to one of the files?

Yorkiesnorkie
Smile

edit: I'm reading stuff on bash scripting...

raffy wrote:
Thanks! An excellent HowTo from an esteemed developer for Puppy Linux. This will be useful for inclusion in Puppy Linux manuals.

Recently, I experimented with a simple user-editable script for activating wifi in a simple network setup using only ESSID. The example device is D-Link USB DWL-G122 with driver rt2570.
Code:
#!/bin/sh
# Edit this file to input your own WiFi values
# then save and click to get your WiFi working!
# The file is in /root (open /root via Menu - Files - Rox)

####################################################################
# change rt2570 below to the name of your wifi chip

modprobe rt2570
sleep 5 # give it some time

####################################################################
# "rausb0" is for USB wifi device; use "ra0" if it is an internal device

ifconfig rausb0 up

####################################################################
# now start it - change "rausb0" to "ra0" if needed
# also change "linksys" to the essid of your wifi network

iwconfig rausb0 essid linksys

####################################################################
# clear the dhcpc folder (nothing to change here)

rm /etc/dhcpc/dhcpcd-eth0.pid 2>/dev/null #clear stale files
rm /etc/dhcpc/dhcpcd-eth0.cache 2>/dev/null #ditto
rm /etc/dhcpc/dhcpcd-eth0.info 2>/dev/null #ditto

####################################################################
# automatically get an IP address
# change "rausb0" to "ra0" if needed

dhcpcd -t 20 rausb0

(As to Jonyo, that could help. But note that Puppy was described as "amazing" in the Ubuntu forum: http://ubuntuforums.org/showthread.php?t=281922 )
Back to top
View user's profile Send private message 
Pizzasgood


Joined: 04 May 2005
Posts: 6270
Location: Knoxville, TN, USA

PostPosted: Mon 07 Jan 2008, 20:05    Post subject:  

The only important thing is that you set it executable. You could right-click it and go to properties or permissions to do it, or from the commandline run
chmod 755 script_name
(if you aren't in the same directory as it, you need to include the path to the script rather than just its name)

As for naming, scripts sometimes end with a .sh extension, but that's optional. Very few scripts in Puppy use that. You can pretty much name them whatever you want, but it's best to choose something unique, especially if you put it in the path.

Where you put it is up to you. If it's something to run each boot, you might want to put it in /etc/rc.d/ and maybe name it starting in rc.<whatever> (but that doesn't affect anything).

One thing to keep in mind with placement is that if you put it in the path (/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, etcetera) you can run it by just typing it's name in the commandline, just like it's another application. Otherwise, you need to include the path to run it.


If you want it run every boot, you could add a line in /etc/rc.d/rc.local to run it (just type the name or path as appropriate on a blank line). Another method is to add an
if [ "$1" = "start" ]; then
to the beginning (after the #!/bin/sh part though), and a
fi
to the end, then place it in /etc/init.d. Then it will be automatically run every time Puppy boots. (The reason for the changes is because Puppy runs ever executable file in that directory with the "start" parameter on boot, and with the "stop" parameter on shutdown. As it was, it would run the same no matter what parameters were passed in. For booting, that's fine. But you don't really want it getting run again when you try to shut down. You could actually add another section to bring down the wireless interface, but that's not necessary (might be handy if you needed to disable it though, like to unplug the USB dongle without locking up the machine).
Code:
if [ "$1" = "stop" ]; then
ifconfig rausb0 down
rmmod rt2570
fi

_________________
Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. --Muad'Dib

Back to top
View user's profile Send private message Visit poster's website 
yorkiesnorkie


Joined: 04 Jun 2007
Posts: 505
Location: George's Island

PostPosted: Tue 08 Jan 2008, 10:50    Post subject: Awesome Response  

Hi Pizzasgood,

Thanks for the detailed reply. Its awesome! That's exactly the information I was looking for to connect the dots. This stuff is very interesting I might add. While not a programming expert, I can see the potential to tinker with the inner workings and get it working the way I want.

So now I have to edit Raffy's script to fit my situation. I also have a choice to make, whether to run it myself whenever I want it to connect, or to have it run automatically. Hmmm... Well I'll definitely take a run at this because it would be nice to have it work on startup since the first thing I do usually is check the mail.

Until later!

Yorkiesnorkie
Smile
Back to top
View user's profile Send private message 
allanlewis

Joined: 03 Jan 2008
Posts: 24

PostPosted: Thu 10 Jan 2008, 06:12    Post subject: Roaming between three networks: 1 WEP, 1 WPA, 1 unsecured  

Hi,

I followed the instructions at the beginning of this thread to set up a WEP connection - let's call this location A - and it works perfectly, although it slows my startup by about 30 seconds. I'm now at location B where I have a WPA network - the wizard connected to that first time, no problems, and I know I could script this using wpa_supplicant, but how can I get Puppy to work out which network is visible (the two locations are ~150 miles apart) and then choose WEP (i.e. iwconfig) or WPA (i.e. wpa_supplicant) as the connection method? In addition, I also have access to an unsecured network (my University's - there is no encryption but you have to log on over the web to access the internet) which I would like to be able to connect to automatically, although this is not so important.

Can anyone give me some pointers as to how to do this?
Back to top
View user's profile Send private message 
Pizzasgood


Joined: 04 May 2005
Posts: 6270
Location: Knoxville, TN, USA

PostPosted: Thu 10 Jan 2008, 14:58    Post subject:  

Theoretically, you can save the settings for more than one network in wpa_supplicant.conf, and then the wpa_supplicant program is supposed to automagically choose which one to connect to. It's also supposed to be able to handle WEP networks. I don't know how to do that though.

A less elegant method would be to set it up to configure everything for the WEP network up to just before it runs dhcpcd. Then use iwlist to see if the network is available (pipe it into grep, and probably try it a couple times in case the card has trouble seeing it). If the network isn't available, switch to the WPA method.

_________________
Between depriving a man of one hour from his life and depriving him of his life there exists only a difference of degree. --Muad'Dib

Back to top
View user's profile Send private message Visit poster's website 
allanlewis

Joined: 03 Jan 2008
Posts: 24

PostPosted: Thu 10 Jan 2008, 17:53    Post subject:  

Ok, it seems that WPA supplicant solves all my problems - apparently I can just create a single configuration file listing my three networks and it will automatically choose the best one. It even prefers better security, all other things being equal! Brilliant Very Happy

Thanks!

Update:

I now have it automatically connecting to my WPA network by manually calling wpa_supplicant from rc.local with my new wpa_supplicant.conf! All I now have is four lines:
Code:
ifconfig eth0 up
wpa_supplicant -Dwext -ieth0 -c/etc/wpa_supplicant.conf
rm /etc/dhcpc/*.pid
dhcpcd -t 30 -h puppypc -d eth0

I think I'll write a quick "howto" on the appropriate board. (I'll put a link here if I remember.)

Update:

Take a look at my first ever HOWTO! (That's on anything, ever, IIRC!)
Back to top
View user's profile Send private message 
LuisS


Joined: 02 Dec 2007
Posts: 4

PostPosted: Sat 12 Jan 2008, 16:32    Post subject:  

Don't know if this public thanks fits the subject, but, by having my wireless pen SMC WUSB-G (ndiswrapper) working flawlessly with WPA2 I really feel I must thank everyone here, specially tempestuous and Pizzasgood. Thanks a lot.

(Sorry, I go sentimental when I get things done on computers)
Back to top
View user's profile Send private message 
crosscountry

Joined: 25 Jul 2007
Posts: 3

PostPosted: Sat 09 Feb 2008, 22:33    Post subject: Rutilit works for me  

Puppy 3.01 loads the bcm43xx module on my Dell D620. Both the network wizard and the command line tricks in the post fail every time on both dhcp and static ip. RutilT works perfectly tho, if you don't mind entering the key each time. Good enough for me, I can't fight this any more.
Back to top
View user's profile Send private message 
Display posts from previous:   Sort by:   
Page 1 of 13 [182 Posts]   Goto page: 1, 2, 3, ..., 11, 12, 13 Next
Post new topic   Reply to topic View previous topic :: View next topic
 Forum index » House Training » HOWTO ( Solutions )
Jump to:  

You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group
[ Time: 0.1524s ][ Queries: 12 (0.0052s) ][ GZIP on ]