Skip to content

Commit

Permalink
First version of nat enabling
Browse files Browse the repository at this point in the history
Signed-off-by: Philippe De Swert <philippe.deswert@jollamobile.com>
  • Loading branch information
philippedeswert committed Nov 27, 2013
1 parent a72e9c6 commit 10d307a
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 1 deletion.
3 changes: 2 additions & 1 deletion docs/usb_moded-doc.txt
Expand Up @@ -143,8 +143,9 @@ on the device to route traffic coming from your pc/laptop. The best use case exa
to the internet over USB using the data connection of your smartphone.

To enable this you need to add the following lines to your network config (the example expects rmnet0 to be
your internet facing interface). When a nat_interface is defined it will be enabled.
your internet facing interface). When a nat is set to 1 it will set up the forwarding.

nat = 1
nat_interface = rmnet0


Expand Down
5 changes: 5 additions & 0 deletions src/usb_moded-config.c
Expand Up @@ -143,6 +143,11 @@ const char * get_network_gateway(void)
return(get_conf_string(NETWORK_ENTRY, NETWORK_GATEWAY_KEY));
}

int get_network_nat(void)
{
return(get_conf_int(NETWORK_ENTRY, NETWORK_NAT_KEY));
}

const char * get_network_nat_interface(void)
{
return(get_conf_string(NETWORK_ENTRY, NETWORK_NAT_INTERFACE_KEY));
Expand Down
2 changes: 2 additions & 0 deletions src/usb_moded-config.h
Expand Up @@ -48,6 +48,7 @@
#define NETWORK_IP_KEY "ip"
#define NETWORK_INTERFACE_KEY "interface"
#define NETWORK_GATEWAY_KEY "gateway"
#define NETWORK_NAT_KEY "nat"
#define NETWORK_NAT_INTERFACE_KEY "nat_interface"
#define ANDROID_ENTRY "android"
#define ANDROID_MANUFACTURER_KEY "iManufacturer"
Expand Down Expand Up @@ -81,6 +82,7 @@ const char * get_network_ip(void);
const char * get_network_interface(void);
const char * get_network_gateway(void);
const char * get_network_nat_interface(void);
int get_network_nat(void);

const char * get_android_manufacturer(void);
const char * get_android_vendor_id(void);
Expand Down
29 changes: 29 additions & 0 deletions src/usb_moded-network.c
Expand Up @@ -34,6 +34,7 @@
#include "usb_moded-network.h"
#include "usb_moded-config.h"
#include "usb_moded-log.h"
#include "usb_moded-modesetting.h"

#if CONNMAN
#include <dbus/dbus.h>
Expand Down Expand Up @@ -67,6 +68,31 @@ static char* get_interface(struct mode_list_elem *data)
return interface;
}

/**
* Turn on ip forwarding on the usb interface
*/
static void set_usb_ip_forward(struct mode_list_elem *data)
{
const char *interface, *nat_interface;
char command[128];

interface = get_interface(data);
nat_interface = get_network_nat_interface();

write_to_file("/proc/sys/net/ipv4/ip_forward", "1");
snprintf(command, 128, "/sbin/iptables -t nat -A POSTROUTING -o %s -j MASQUERADE", nat_interface);
system(command);

snprintf(command, 128, "/sbin/iptables -A FORWARD -i %s -o %s -m state --state RELATED,ESTABLISHED -j ACCEPT", nat_interface, interface);
system(command);

snprintf(command, 128, "/sbin/iptables -A FORWARD -i %s -o %s -j ACCEPT", interface, nat_interface);
system(command);

free((char *)interface);
free((char *)nat_interface);
}

/**
* Activate the network interface
*
Expand Down Expand Up @@ -132,6 +158,9 @@ int usb_network_up(struct mode_list_elem *data)
system(command);
}

if(get_network_nat())
set_usb_ip_forward(data);

clean:
free((char *)interface);
free((char *)gateway);
Expand Down

0 comments on commit 10d307a

Please sign in to comment.