Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[network] Add netmask handling. Fixes: JB#31127
Handle netmask from command line and config file.
At the same time fix some issues with the network code.

Signed-off-by: Philippe De Swert <philippe.deswert@jollamobile.com>
  • Loading branch information
philippedeswert committed Aug 3, 2015
1 parent c02b3b1 commit dedf81d
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 13 deletions.
1 change: 0 additions & 1 deletion src/usb_moded-config-private.h
Expand Up @@ -27,4 +27,3 @@
char * get_mode_setting(void);
set_config_result_t set_mode_setting(const char *mode);
set_config_result_t set_network_setting(const char *config, const char *setting);
char *get_network_setting(const char *config);
20 changes: 20 additions & 0 deletions src/usb_moded-config.c
Expand Up @@ -145,6 +145,15 @@ char * get_network_gateway(void)
return(get_conf_string(NETWORK_ENTRY, NETWORK_GATEWAY_KEY));
}

char * get_network_netmask(void)
{
char * netmask = get_kcmdline_string(NETWORK_NETMASK_KEY);
if (netmask != NULL)
return(netmask);

return(get_conf_string(NETWORK_ENTRY, NETWORK_NETMASK_KEY));
}

char * get_network_nat_interface(void)
{
return(get_conf_string(NETWORK_ENTRY, NETWORK_NAT_INTERFACE_KEY));
Expand Down Expand Up @@ -312,6 +321,11 @@ static char * get_kcmdline_string(const char *entry)
log_debug("Command line gateway = %s\n", ret);
}
}
if(!strcmp(entry, NETWORK_NETMASK_KEY))
{
ret = g_strdup(network_tokens[3]);
log_debug("Command line netmask = %s\n", ret);
}
}
}
g_strfreev(arg_tokens);
Expand Down Expand Up @@ -475,6 +489,12 @@ char * get_network_setting(const char *config)
}
else if(!strcmp(config, NETWORK_GATEWAY_KEY))
return(get_network_gateway());
else if(strcmp(config, NETWORK_NETMASK_KEY))
{
ret = get_network_netmask();
if(!ret)
ret = strdup("255.255.255.0");
}
else
/* no matching keys, return error */
return(NULL);
Expand Down
3 changes: 3 additions & 0 deletions src/usb_moded-config.h
Expand Up @@ -50,6 +50,7 @@
#define NETWORK_INTERFACE_KEY "interface"
#define NETWORK_GATEWAY_KEY "gateway"
#define NETWORK_NAT_INTERFACE_KEY "nat_interface"
#define NETWORK_NETMASK_KEY "netmask"
#define NO_ROAMING_KEY "noroaming"
#define ANDROID_ENTRY "android"
#define ANDROID_MANUFACTURER_KEY "iManufacturer"
Expand All @@ -70,9 +71,11 @@ char * get_trigger_mode(void);
char * get_trigger_property(void);
char * get_trigger_value(void);

char * get_network_setting(const char *config);
char * get_network_ip(void);
char * get_network_interface(void);
char * get_network_gateway(void);
char * get_network_netmask(void);
char * get_network_nat_interface(void);

char * get_android_manufacturer(void);
Expand Down
31 changes: 19 additions & 12 deletions src/usb_moded-network.c
Expand Up @@ -124,6 +124,7 @@ static char* get_interface(struct mode_list_elem *data)
if(check)
{
log_warning("Configured interface is incorrect, nor does usb0 exists. Check your config!\n");
free((char *)interface);
return(0);
}

Expand Down Expand Up @@ -323,7 +324,7 @@ static int checklink(void)
static int write_udhcpd_conf(struct ipforward_data *ipforward, struct mode_list_elem *data)
{
FILE *conffile;
char *ip, *interface;
char *ip, *interface, *netmask;
char *ipstart, *ipend;
int dot = 0, i = 0, test;
struct stat st;
Expand All @@ -339,14 +340,12 @@ static int write_udhcpd_conf(struct ipforward_data *ipforward, struct mode_list_

interface = get_interface(data);
if(interface == NULL)
return(1);

/* generate start and end ip based on the setting */
ip = get_network_ip();
if(ip == NULL)
{
ip = strdup("192.168.2.15");
fclose(conffile);
return(1);
}
/* generate start and end ip based on the setting */
ip = get_network_setting(NETWORK_IP_KEY);
ipstart = malloc(sizeof(char)*15);
ipend = malloc(sizeof(char)*15);
while(i < 15)
Expand All @@ -369,11 +368,13 @@ static int write_udhcpd_conf(struct ipforward_data *ipforward, struct mode_list_
strcat(ipstart,"1");
strcat(ipend, "15");

netmask = get_network_setting(NETWORK_NETMASK_KEY);

/* print all data in the file */
fprintf(conffile, "start\t%s\n", ipstart);
fprintf(conffile, "end\t%s\n", ipend);
fprintf(conffile, "interface\t%s\n", interface);
fprintf(conffile, "option\tsubnet\t255.255.255.0\n");
fprintf(conffile, "option\tsubnet\t%s\n", netmask);
fprintf(conffile, "option\tlease\t3600\n");

if(ipforward != NULL)
Expand All @@ -391,6 +392,7 @@ static int write_udhcpd_conf(struct ipforward_data *ipforward, struct mode_list_
free(ipend);
free(ip);
free(interface);
free(netmask);
fclose(conffile);

/* check if it is a symlink, if not remove and link, create the link if missing */
Expand Down Expand Up @@ -1075,17 +1077,21 @@ int usb_network_up(struct mode_list_elem *data)
#else
char command[128];
const char *interface;
char *netmask;

interface = get_interface(data);
ip = get_network_ip();
gateway = get_network_gateway();

if(interface == NULL)
return(1);

/* interface found, so we can get all the rest */
ip = get_network_ip();
gateway = get_network_gateway();
netmask = get_network_setting(NETWORK_NETMASK_KEY);

if(ip == NULL)
{
sprintf(command,"ifconfig %s 192.168.2.15", interface);
sprintf(command,"ifconfig %s 192.168.2.15 %s", interface, netmask);
system(command);
goto clean;
}
Expand All @@ -1102,7 +1108,7 @@ int usb_network_up(struct mode_list_elem *data)
}
else
{
sprintf(command, "ifconfig %s %s\n", interface, ip);
sprintf(command, "ifconfig %s %s %s\n", interface, ip, netmask);
system(command);
}

Expand All @@ -1117,6 +1123,7 @@ int usb_network_up(struct mode_list_elem *data)
free((char *)interface);
free((char *)gateway);
free((char *)ip);
free(netmask);

return(0);
#endif /* CONNMAN */
Expand Down

0 comments on commit dedf81d

Please sign in to comment.