[[PageOutline]] = 12. GENI WiMAX Mobile Stations = == 12.1 Linux PC with Intel WiMAX Modem Card == === 12.1.1 Linux Laptop PC Platform === === 12.1.2 Intel 6250 WiMAX Modem Card === === 12.1.3 Installing Image === Samsung NC10 !NetBook[[BR]] The firmware, tools , network service and the patch were downloaded from [http://linuxwimax.org/Download LinuxWimax] 1. Compile a Linux Kernel to Version greater than 2.6.35 and reboot into that kernel.[[BR]] 2. Install the i2400m firmware[[BR]] Download the i2400 firmware 1.5.0 version.[[BR]] Untar the source , cd to the directory and [[BR]] {{{ install -o root -g root -m 0644 *.sbcf /lib/firmware }}} 3. Install the Wimax Tools[[BR]] First install libnl and libnl's development packages[[BR]] {{{ apt-get install libnl1 libnl-dev libglib2.0-0 libglib2.0-dev apt-get install build-essential pkg-config cd ~Download/wimax-tools-1.4.3 export I2400M=/lib/firmware/ ./configure make make install }}} 4. Build the libeap library[[BR]] To do that first install openssl libraries. [[BR]] {{{ apt-get install libglobus-openssl-module0 libglobus-openssl-module-dev libssl-dev }}} Download the Supplicant from [http://hostap.epitest.fi wpa-supplicant] Untar and unzip the download {{{ cd ~Downloads/wpa_supplicant-0.7.3 patch -p1 < ../wpa_supplicant-0.7.3-generate-libeap-peer.patch make -C src/eap_peer make -C src/eap_peer install ldconfig }}} Please do not forget to run '''ldconfig''' otherwise you will not be able to build the Wimax-Tools from Intel. 5. Build the Intel-Wimax-Tools Untar and unzip the downloaded source and cd ~Downloads/wimax-1.5.1[[BR]] Copy the [http://wimax.orbit-lab.org/downloads/NDnSAgentConfig_forDriver.xml NDnSAgentConfig_forDriver.xml] file to ./InfraStack/OSAgnostic/WiMax/Agents/NDnS/XML_Files or modify NSP_ID 51 in the file to look like [[BR]] {{{ 51 4451DB 1 AB ListFirst Strict ListFirst Strict AB 2590000 2590000 10000 ffffffffffffffffffffffffffffff 10000 1024 1 0 -1 -1 1 GENI -1 10 False EAP_TLS 13 13 www.geni.net False -1 False 0 http://wimax.orbit-lab.org GENI WiMAX Technical Support 1 http://www.geni.net GENI Portal }}} Update the .bin files source files located at ./InfraStack/OSAgnostic/Product/AppSrvInfra/ with the GENI files[[BR]] [http://wimax.orbit-lab.org/downloads/WiMAX_Def.bin GENI Definition File] [[BR]] [http://wimax.orbit-lab.org/downloads/WiMAX_DB.bin GENI Database File] Now configure the wimax service and install the service. {{{ ./configure --with-linux=/usr --with-libwimaxll=/usr --sysconfdir=/etc --localstatedir=/var --prefix=/usr --enable-instrument --with-wimax-db-bin=/var --with-ver-info-bin=/var make make install }}} This new configuration with the .bin enabled allows us now to modify the NDns parameters on the fly by modifying WiMAX_Def.bin and WiMAX_DB.bin files located in /var/lib/wimax directory. [[BR]] You can edit the file and restart the wimaxd service to see the changes. Connection and Scan Mode settings are set using the following commands[[BR]] {{{ wimaxcu connectmode connect manual wimaxcu connectmode scan semi }}} [[BR]] Instructions are Here === 12.1.4 Downloading Complete Image === Based on Ubuntu 10.04 with compiled Kernel .35 and the Intel WiMAX driver source compiled on 8/25/2010 and with the GENI configuration file; [http://wimax.orbit-lab.org/downloads/nc10-geni.ndz latest image] for NC10! === 12.1.5 Using the Service === 1. wimaxcu ron - Turn the Software Radio On [[BR]] 2. wimaxcu plist - Check to See Geni Profile is Available[[BR]] 3. wimaxcu scan wide - Scan all the available Base Stations [[BR]] 4. wimaxcu connect network Geni - Connect to the GENI wimax station [[BR]] 5. dhclient wmx0 - Obtain an IP address [[BR]] 6. wimaxcu -i wmxX -b - Start the wimax service in background [[BR]] 7. wimaxcu -i wmxX -k - Kill the wimax service === 12.1.6 Enable debugging on the client[[BR]] === You can get enhanced debugging for the following parameters by increasing the verbosity level[[BR]] echo 3 > /sys/kernel/debug/wimax:wmx0/wimax_dl_stack [[BR]] echo 3 > /sys/kernel/debug/wimax:wmx0/wimax_dl_op_rfkill echo 3 > /sys/kernel/debug/wimax:wmx0/wimax_dl_op_reset echo 3 > /sys/kernel/debug/wimax:wmx0/wimax_dl_op_msg echo 3 > /sys/kernel/debug/wimax:wmx0/wimax_dl_id_table echo 3 > /sys/kernel/debug/wimax:wmx0/wimax_dl_debugfs == 12.2 Intel WiMAX Modem with USB Adaptor == === 12.2.1 Intel 6250 WiMAX Modem in USB Adaptor === === 12.2.2 PC Platforms === === 12.2.3 Installing Image === === 12.2.4 Manufacturing USB Adaptor === ==== General Info ==== The WiMAX model USB adaptor is an 'open source' WINLAB designed board. This section provides links to the instructions and the files necessary to produce the board.[[BR]] Please note that the instructions and files provided meet the specifications and requirements set by [http://www.4pcb.com/ Advanced Circuits]. If using another vendor please be aware that the tolerances may be different. ==== Files Needed ==== The following files are needed to make the board and attached to this page. Additionally the schematic is also provided as a reference. * USB_mPCIx_Board.zip - These files describe the physical board. All fabrication houses should accept the gerber file format. * USB_MPCIX.TOP & USB_MPCIX.BOT - Top and Bottom copper gerber files, respectively. * USB_MPCIX.SMT & USB_MPCIX.SMB - Top and bottom soldermask gerber files, respectively. * USB_MPCIX.SST - Top silkscreen gerber file. * USB_MPCIX_thruhole.tap - Drill list gerber file. * USB_mPCIx_Pop.zip - These files describe the position of the components. * USB_MPCIX.AST - Assembly drawing of the board * USB_MPCIX.SPT - Top solderpaste gerber file, there is only components on the top side. * USB_MPCIX_BOM.xls - Bill of materials, provides links and vendors for parts being used. * USB_MPCIX_INSERT.TXT - mounting locations for the components on the board. ==== Fabrication and Population ==== The following set of instructions is specific to the production house WINLAB uses, [http://www.4pcb.com/ Advanced Circuits]. Other manufacturer may require additional information, however the process should be similar. [[BR]] To have a board made the fabricated you must provide 'USB_mPCIx_Board.zip' as it contains all the physical board information. Typically this can be sent directly to a sales representative for quoting. If you intend for the boards to be populated, some manufacturers (definitely Advanced Circuits) require minimum quantities and dimensions, so you may request for the board to be panelized to meet those conditions. WINLAB had them produced 4 boards to a panel to meet Advanced Circuit requirements. Some additional information that might be required is as follows: || Material Type: || FR4 || || Material Thickness: || 0.031" || || Number of Layers: || 2 || || First Dimension: || 1.428" || || Second Dimension: || 2.668" || || Finish Plating: || LFSOLDER|| || Copper Outers: || 1oz || || Copper Inners: || 0 oz || || Solder Mask Sides || Both || || Solder Mask Type || LPI || || Solder Mask Color || Green || || Silkscreen Sides || Top || || Silkscreen Color || White || [[BR]] If ordering through Advanced Circuits it is a good idea to run the design through the automated [https://www.my4pcb.com/net35/FreeDFMNet/FreeDFMHome.aspx FreeDFM] service. The design has already passed the check, but it also creates a quote matrix and populates any additional information on the board. [[BR]] To have the board populated with parts send the additional zip file (USB_mPCIx_Pop.zip) for quoting. The bill of materials (BOM) currently lists the right angle SMA header as not in use and 'do not install', if you wish to use it change that line in the BOM. == 12.3 Configuring a Teltonika WiMAX USB Card to Ping Base station from an Ubuntu Host == === 12.3.1. Install Driver / Eject "CD-ROM" === When first inserted into a new computer, the Teltonika device is mounted as a CDROM. It will immediatly begin installing a driver on host machine. On Ubuntu this process is non-obvious; allow the computer to sit for 5 minutes after inserting the device to give the driver time to install. After the time to install has passed, determine the device that the "CDROM" is associated with by running: {{{ $ dmesg }}} Somewhere near the bottom of the messages should be a message that contains "Attached scsi CD-ROM [device]". This interface must be ejected so that the device can act as a wireless transmitter rather than a CD-ROM. In most instances the CD-ROM will be associated with either sr0 or sr1. Eject the device using the command: {{{ $ eject [device] }}} After a few moments a notification about a new ethernet interface becoming available should appear. This is the interface that the computer will use to communicate with the wireless dongle. In some cases after this initial setup was completed the computer would always recognize the device as an ethernet interface, and sometimes the CD-ROM device would need to be ejected each time. Reasons for this difference is unknown at the time of writing. === 12.3.2. Update Firefox (or Google Chrome) === A web interface is provided to configure and interact with the dongle graphically. This webpage requires the most recent version of Adobe Flash. To update/download Firefox and the Flash plugin run: {{{ # apt-get install firefox flashplugin-installer }}} NOTE: Adobe has announced that it will no longer support Flash for Linux, and so in the near future Firefox may have depreciated Flash support. In this even Google has commited to maintaining Flash for Linux in it's Chrome browser, and it can be used as a viable alternative to Firefox. === 12.3.3. Connect to the WebUI === If the the Teltonika dongle is recognized as a wireless interface open up the WebUI in Firefox or Chrome by navigating to 192.168.0.1 . If this IP address does not direct the browser to the WebUI then ask the previous user of the device for the new address, it is a configurable parameter and may be changed. Login as an administrator by CTRL-SHIFT-Clicking the Teltonika banner at the top of the page. Login credentials are also configurable, but are most likely set to:[[BR]] username: admin[[BR]] password: genipass[[BR]] Other passwords may be: admin OR EifAFKt8 === 12.3.4. Configure Device === The device can be configured to look for networks on a number of channels under the WiMAX->Channels tab. The GENI network has the profile: Frequency (kHz): 2590000[[BR]] Bandwidth: 10000[[BR]] FFT: 1024 Other configuration parameters can be configured by altering the config.sh file, found under the Files tab of the WebUI. '''WARNING:''' it is entirely possible to brick the dongle if parameters are altered in this file in a way that should not be. It is fairly safe to alter the fields: ipaddr (IP address where the WebUI can be reached), netmask (Subnet mask that the device will operate on), dhcpdsip (DHCP server IP address), dhcpdeip (unknown meaning at time of writing, may be expected IP address from DHCP server). === 12.3.5. Statically Set Device IP Address === Telnet to the device: {{{ $ telnet [WebUI address] 700 }}} The login credentials for the telnet session are:[[BR]] username: admin [[BR]] password: admin01 Within the telnet session run the following command to statically set the devices IP address: {{{ # ifconfig icc0 [desired address] netmask [desired netmask] }}} This static address is not preserved when the Teltonika device is removed from the host machine, and it needs to be configured each time that the device is connected to the host. After statically setting the IP address, you need to also set up the iptables rules to send traffic to and from the host device. An easy way to do this is to use the same script that the DHCP client uses for this purpose. Run the following commands within a telnet session on the Teltonika device: {{{ # export interface=icc0 # export subnet=[desired subnet, e.g. 16,24] # export ip=[desired address] # /etc/udhcpc.script bound }}} If you are planning to use the WiMAX interface for the default route, not just for traffic on its own subnet, you should also add {{{ # export router=[router IP] }}} before /etc/udhcpc.script bound. === 12.3.6. More Information === [http://wimax.orbit-lab.org/wiki/Internal/Teltonika Here.] == 12.4 Installing the Beceem Driver for Linux-Airspan BS Compatibility == Commands to be run as the root user have the `#` prompt, commands to be run as a normal user have the `$` prompt. === 1. Install Linux === Install Ubuntu version 12.04 a netbook. A Linux kernel of version of 2.6.38 or greater is required to install the drivers; to determine the current systems kernel version run: {{{ $ uname -r }}} If the kernel image needs to be updated then do the following: {{{ $ apt-cache search linux-image | grep generic }}} This will provide a list of available kernel images for the running system. To install the linux image version 3.8.0-31: {{{ $ apt-get install linux-image-3.8.0-31-generic }}} Reboot the machine to load the new kernel: {{{ $ reboot }}} The following steps were completed successfully on Ubuntu 12.04. === 2. Resources === A WiMAX dongle with a Beceem chipset is required to use the driver to connect to a WiMAX network. An AWB US211 USB adapter was used when testing the netbook configured using this guide, although any dongle with a Beceem chipset should work. Files in the following tarball are required to install the driver: http://wimax.orbit-lab.org/downloads/BeceemSource.tar.gz . The tarball is quite large (~150 MB) and may take a few minutes or more to download. Download the tarball and extract the files: {{{ $ cd ~/Downloads $ wget http://wimax.orbit-lab.org/downloads/BeceemSource.tar.gz $ tar -xzf BeceemSource.tar.gz }}} The following packages must be installed via apt-get: {{{ # apt-get install libssl-dev linux-headers-$(uname -r) make patch unzip }}} It's most likely the linux header files are downloaded into the directory /usr/src. Download the source files for the linux kernel distribution into /usr/src and create a symlink to simplify installation when building the driver: {{{ # pushd /usr/src # apt-get source linux-image-$(uname -r) # ln -s linux # popd }}} Note: should be suffixed with the kernel version. === 3. Install libeap Library === Patch and install the wpa_supplicant using the commands: {{{ $ cd ~/Downloads/BeceemSource/ $ tar -xzf wpa_supplicant-0.7.3.tar.gz $ cd wpa_supplicant-0.7.3 $ patch -p1 < ../wpa_supplicant-0.7.3-generate-libeap-peer.patch $ make -C src/eap_peer # make -C src/eap_peer install }}} This library is required to install the wimaxd utility, and does not get installed properly by the script provided in the Sprint tarball. === 4. Build the Driver === Unpack the Sprint tarball and run the script. This will build and install the driver: {{{ $ cd ~/Downloads/BeceemSource/ $ tar -xzf Sprint4GDeveloperPack-1.6.1.2.2.tar.gz $ cd Sprint4GDeveloperPack-1.6.1.2.2 # ./install.sh }}} The installer will prompt for various file paths, if the symlink was created in the previous step then the default choices should be correct. On some recent kernels, you will need to blacklist the `bcm_wimax` driver to prevent it from claiming the device on start up. {{{ # echo "blacklist bcm_wimax" > /etc/modprobe.d/blacklist-bcm-wimax.conf }}} Run the following command to add the new driver to the startup modules: {{{ # modprobe drxvi314 }}} To check if above driver registered properly: {{{ # dmesg | grep usbbcm }}} This should output a line that includes " usbcore: registered new interface driver usbbcm" === 5. Reboot, Configure, and Verify === Reboot the machine: {{{ # reboot }}} After startup copy the following files with the commands: {{{ # cp /usr/src/USB_350/Source/CSCM/BeceemCSCM/wimaxd.conf /etc # cp /lib/firmware/macxvi350.bin /lib/firmware/macxvi200.bin }}} In a another terminal window and tail the syslog file. This show the results wimax commands down below. {{{ # tail -f /var/log/syslog }}} Edit the new /etc/wimaxd.conf file as desired, the file is heavily commented and should be self explanatory. Make sure that the network's center frequency can be found in the CenterFrequencyMHz parameter of the config file, the GENI network center frequency (2590) is not one of the default frequencies. The firmware file is copied because the utilities expect that both the macxvi350.bin and macxvi200.bin will be present when utilities are run. Plug the dongle into a usb port and list the USB devices: {{{ $ lsusb Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 003 Device 002: ID 198f:0220 Beceem Communications Inc. BCSM250 WiMAX Adapter Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub }}} One of the devices should include "Beceem Communications Inc." if the installation was successful. The Bus and Device number may be different. === 6. Start the Server and Connect === Start the wimax daemon: {{{ # wimaxd -c /etc/wimaxd.conf ********** CSCM Server Started ********** 05/13/14 10:24:11 }}} Use the connection utility to search for the base station and check for similar output: {{{ # wimaxc search Beceem CM Server Version 1.1.7.0 Network search returned 1 base station. Idx BSID Pre Freq BW RSSI CINR 0 01:01:44:51:db:00:00:01 0x00 2590.000 10.000 -56 31 }}} If networks are found then the installation is complete and the wimax interface will try to connect to a base station. The syslog file should show a similar output: {{{ May 13 10:24:27 localhost kernel: [ 260.814967] LinkControlResponseMessage:PHY_SYNC_ACHIVED May 13 10:24:34 localhost kernel: [ 268.573803] LinkControlResponseMessage:PHS Support Status Recieved In LinkUp Ack : 1 May 13 10:24:34 localhost kernel: [ 268.573806] May 13 10:24:35 localhost kernel: [ 269.186284] CmControlResponseMessage:### TID RECEIVED 35968 }}} If an error occurs, such as the device can not be found, the interface must be started. Determine the interface for the dongle by running === 7. Configure the interface === Once connected the wimax dongle should come up as an ''eth'' interface. Match the dongle's MAC address to ''eth'' interface. In this example, the MAC address of the wimax dongle used is b8:61:6f:0d:a0:6d. To see a list of interfaces: {{{ $ ifconfig -a eth0 Link encap:Ethernet HWaddr 00:03:1d:0c:7d:d0 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Interrupt:20 Memory:f0700000-f0720000 eth1 Link encap:Ethernet HWaddr 00:03:1d:0c:7d:d1 inet addr:10.10.7.10 Bcast:10.10.255.255 Mask:255.255.0.0 inet6 addr: fe80::203:1dff:fe0c:7dd1/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:710 errors:0 dropped:0 overruns:0 frame:0 TX packets:576 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:71675 (71.6 KB) TX bytes:92532 (92.5 KB) Interrupt:17 Memory:f0600000-f0620000 eth2 Link encap:Ethernet HWaddr b8:61:6f:0d:a0:6d BROADCAST MULTICAST MTU:1400 Metric:1 RX packets:35246 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:11366 (11.3 KB) TX bytes:0 (0.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:35 errors:0 dropped:0 overruns:0 frame:0 TX packets:35 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2590 (2.5 KB) TX bytes:2590 (2.5 KB) }}} The wimax dongle came up on ''eth2''. We'll configure this interface as working example: {{{ # ifconfig eth2 10.41.41.29 netmask 255.255.0.0 up }}} Now check ''eth2'' interface. {{{ # ifconfig eth2 eth2 Link encap:Ethernet HWaddr b8:61:6f:0d:a0:6d inet addr:10.41.41.29 Bcast:10.41.255.255 Mask:255.255.0.0 inet6 addr: fe80::ba61:6fff:fe0d:a06d/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1400 Metric:1 RX packets:41362 errors:0 dropped:0 overruns:0 frame:0 TX packets:2 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:13174 (13.1 KB) TX bytes:168 (168.0 B) }}} Test the interface by pinging the gateway (10.41.0.1): {{{ # ping 10.41.0.1 -c 5 PING 10.41.0.1 (10.41.0.1) 56(84) bytes of data. 64 bytes from 10.41.0.1: icmp_req=1 ttl=254 time=61.7 ms 64 bytes from 10.41.0.1: icmp_req=2 ttl=254 time=59.9 ms 64 bytes from 10.41.0.1: icmp_req=3 ttl=254 time=57.9 ms 64 bytes from 10.41.0.1: icmp_req=4 ttl=254 time=61.9 ms 64 bytes from 10.41.0.1: icmp_req=5 ttl=254 time=60.9 ms --- 10.41.0.1 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4005ms rtt min/avg/max/mdev = 57.951/60.522/61.963/1.494 ms }}}