Project

General

Profile

USBNetworking » History » Revision 10

Revision 9 (Paul Kocialkowski, 10/19/2011 06:53 PM) → Revision 10/27 (Paul Kocialkowski, 02/05/2012 01:23 PM)


 h1. Replicant USB Networking 

 


 This page explains how to connect your Replciant phone to the Internet via an USB connection to a computer connected to the Internet.  

  


 h2. What you need 

 


 * A phone running Replicant (but it should also work on [[CyanogenMod]] or Android) 
 * A computer with USB connectivity and network access running GNU/Linux 

 


 h2. Automation scripts 

 


 Two scripts are necessary: one to run on the host computer and one to run on the device. 

 


 h3. Replicant USB Networking - PC 

 


 Here's the script to run on the computer. Copy the following text to a file named "run_pc.sh" (or any other name, you just need to keep the same name along the process): 

 <pre> 
 
 #!/bin/sh 

 # Replicant USB Networking 
 # ========================                              
 #  
 # Copyright (C) 2011 Paul Kocialkowski, GPLv3+ 
 #  
 # This program is free software: you can redistribute it and/or modify 
 # it under the terms of the GNU General Public License as published by 
 # the Free Software Foundation, either version 3 of the License, or 
 # (at your option) any later version. 
 #  
 # You should have received a copy of the GNU General Public License 
 # along with this program.    If not, see <http://www.gnu.org/licenses/>. 

 IPTABLES_CLEAN_RULES=true 

 USB_IFACE="usb0" 
 INTERNET_IFACE="eth0" 

 USB_IFACE_IP="192.168.4.200" 

 # Clean iptables rules 

 iptables_rules_clean () { 
	 if [ $IPTABLES_CLEAN_RULES = false ] 
	 then 
		 return 
	 fi 

	 iptables --flush 
	 iptables --table nat --flush 
	 iptables --delete-chain 
	 iptables --table nat --delete-chain 
 } 

 # Inject iptables forwarding rules 

 iptables_forward_rules_apply () { 
	 iptables --table nat --append POSTROUTING --out-interface $INTERNET_IFACE -j MASQUERADE 
	 iptables --append FORWARD --in-interface $USB_IFACE -j ACCEPT 
	 echo 1 > /proc/sys/net/ipv4/ip_forward  
 } 

 # Configure network link 

 usb_networking_configure () { 
	 ifconfig $USB_IFACE up 
	 ifconfig $USB_IFACE $USB_IFACE_IP 
 } 

 usb_networking_disable () { 
	 ifconfig $USB_IFACE down 
	 echo 0 > /proc/sys/net/ipv4/ip_forward  
 } 

 case $1 in 
	 "start") 
		 echo "Starting Replicant USB Networking" 
		 iptables_rules_clean 
		 usb_networking_configure 
		 iptables_forward_rules_apply 
	 ;; 
	 "stop") 
		 echo "Stopping Replicant USB Networking" 
		 usb_networking_disable 
		 iptables_rules_clean 
	 ;; 
	 *) 
		 echo "Usage: sh $0 {start|stop}" 
	 ;; 
 esac 
 </pre> 

 

 Then, set this file executable:  

  
 <pre> 


 h3. Replicant USB Networking - Device 

 


 Here's the script to run on the device. Copy the following text to a file named "run_dev.sh" (or any other name, you just need to keep the same name along the process): 

 <pre> 
 
 #!/system/bin/sh 

 # Replicant USB Networking 
 # ========================                              
 #  
 # Copyright (C) 2011 Paul Kocialkowski, GPLv3+ 
 #  
 # This program is free software: you can redistribute it and/or modify 
 # it under the terms of the GNU General Public License as published by 
 # the Free Software Foundation, either version 3 of the License, or 
 # (at your option) any later version. 
 #  
 # You should have received a copy of the GNU General Public License 
 # along with this program.    If not, see <http://www.gnu.org/licenses/>. 

 # Enable USB Networking 

 USB_IFACE="usb0" 

 USB_IFACE_IP="192.168.4.202" 
 GATEWAY_IP="192.168.4.200" 
 DNS1_IP="8.8.8.8" 

 usb_networking_enable () { 
	 echo 1 > /sys/class/usb_composite/rndis/enable 
	 ifconfig usb0 up 
 } 

 usb_networking_configure () { 
	 ifconfig $USB_IFACE $USB_IFACE_IP 
	 route add default gw $GATEWAY_IP dev $USB_IFACE 
	 setprop net.dns1 $DNS1_IP 

	 # setprop net.dns1 $( cat /system/etc/resolv.conf | sed -e "s|.*#.*||" -e "s|^.*nameserver \(.*\)$|\1|g" | grep -v "^$" | head -n 1 ) 
 } 

 usb_networking_disable () { 
	 echo 0 > /sys/class/usb_composite/rndis/enable 
	 ifconfig usb0 down 
 } 

 case $1 in 
	 "start") 
		 echo "Starting Replicant USB Networking" 
		 usb_networking_enable 
		 usb_networking_configure 
	 ;; 
	 "stop") 
		 echo "Stopping Replicant USB Networking" 
		 usb_networking_disable 
	 ;; 
	 *) 
		 echo "Usage: sh $0 {start|stop}" 
	 ;; 
 esac 
 </pre> 


 

 <pre> 
 <pre> 


 h3. Using the scripts 

 


 Now both scripts are in place. You should now:  
 <pre> 
 
 <pre> 

 

 Note that if you use [[NetworkManager]], it could notice a new network interface and try to configure it: you should disconnect this interface on [[NetworkManager]] before you run the second script.  

 Now everything is in place. If no error is shown, it should now be working. You can try to ping some website on the device. 
 If It doesn't work, try to run again each script, running the configuration one more time can't do any worse.  

  


 h4. Getting back to normal 

 


 If you want to disable Replicant USB Networking, you have to: 

 
 <pre> 
 <pre> 


 h3. Customizing the scripts 

 


 The variables at the beginning of each script can be customized for your usage: 

 


 h4. run_pc.sh 


 


 <pre> 
 <pre> 
 <pre> 
 <pre> 


 h4. run_dev.sh 
 


 <pre> 
 <pre> 
 <pre> 
 <pre>