Allow LAN interface to be given as interface names.
(instead of interface IP addresses) It will allow IPv6 operations.
This commit is contained in:
parent
225b59a6d3
commit
6d32d69608
|
@ -1,6 +1,8 @@
|
||||||
$Id: Changelog.txt,v 1.266 2012/04/06 15:27:20 nanard Exp $
|
$Id: Changelog.txt,v 1.266 2012/04/06 15:27:20 nanard Exp $
|
||||||
|
|
||||||
2012/04/06:
|
2012/04/06:
|
||||||
|
Allow LAN interface to be given as interface names, instead of interface
|
||||||
|
IP addresses. It will allow IPv6 operations.
|
||||||
fix linux/getifstats.c when bitrate is unknown
|
fix linux/getifstats.c when bitrate is unknown
|
||||||
|
|
||||||
2012/03/31:
|
2012/03/31:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: miniupnpd.c,v 1.149 2012/03/31 06:57:12 nanard Exp $ */
|
/* $Id: miniupnpd.c,v 1.150 2012/04/06 15:27:20 nanard Exp $ */
|
||||||
/* MiniUPnP project
|
/* MiniUPnP project
|
||||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||||
* (c) 2006-2012 Thomas Bernard
|
* (c) 2006-2012 Thomas Bernard
|
||||||
|
@ -519,6 +519,8 @@ struct runtime_vars {
|
||||||
* external interface associated with the lan subnet follows.
|
* external interface associated with the lan subnet follows.
|
||||||
* ex : 192.168.1.1/24 81.21.41.11
|
* ex : 192.168.1.1/24 81.21.41.11
|
||||||
*
|
*
|
||||||
|
* Can also use the interface name (ie eth0)
|
||||||
|
*
|
||||||
* return value :
|
* return value :
|
||||||
* 0 : ok
|
* 0 : ok
|
||||||
* -1 : error */
|
* -1 : error */
|
||||||
|
@ -529,14 +531,26 @@ parselanaddr(struct lan_addr_s * lan_addr, const char * str)
|
||||||
int n;
|
int n;
|
||||||
char tmp[16];
|
char tmp[16];
|
||||||
|
|
||||||
|
memset(lan_addr, 0, sizeof(struct lan_addr_s));
|
||||||
p = str;
|
p = str;
|
||||||
while(*p && *p != '/' && !isspace(*p))
|
while(*p && *p != '/' && !isspace(*p))
|
||||||
p++;
|
p++;
|
||||||
n = p - str;
|
n = p - str;
|
||||||
if(n>15)
|
if(!isdigit(str[0]) && n < sizeof(lan_addr->ifname))
|
||||||
goto parselan_error;
|
{
|
||||||
memcpy(lan_addr->str, str, n);
|
/* not starting with a digit : suppose it is an interface name */
|
||||||
lan_addr->str[n] = '\0';
|
memcpy(lan_addr->ifname, str, n);
|
||||||
|
lan_addr->ifname[n] = '\0';
|
||||||
|
if(getifaddr(lan_addr->ifname, lan_addr->str, sizeof(lan_addr->str)) < 0)
|
||||||
|
goto parselan_error;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(n>15)
|
||||||
|
goto parselan_error;
|
||||||
|
memcpy(lan_addr->str, str, n);
|
||||||
|
lan_addr->str[n] = '\0';
|
||||||
|
}
|
||||||
if(!inet_aton(lan_addr->str, &lan_addr->addr))
|
if(!inet_aton(lan_addr->str, &lan_addr->addr))
|
||||||
goto parselan_error;
|
goto parselan_error;
|
||||||
if(*p == '/')
|
if(*p == '/')
|
||||||
|
@ -587,10 +601,20 @@ parselanaddr(struct lan_addr_s * lan_addr, const char * str)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef ENABLE_IPV6
|
||||||
|
if(lan_addr->ifname[0] != '\0')
|
||||||
|
{
|
||||||
|
lan_addr->index = if_nametoindex(lan_addr->ifname);
|
||||||
|
if(lan_addr->index == 0)
|
||||||
|
fprintf(stderr, "Cannot get index for network interface %s",
|
||||||
|
lan_addr->ifname);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
parselan_error:
|
parselan_error:
|
||||||
fprintf(stderr, "Error parsing address/mask : %s\n", str);
|
fprintf(stderr, "Error parsing address/mask (or interface name) : %s\n",
|
||||||
|
str);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,13 +8,15 @@ ext_ifname=eth1
|
||||||
# LAN network interfaces IPs / networks
|
# LAN network interfaces IPs / networks
|
||||||
# there can be multiple listening ips for SSDP traffic.
|
# there can be multiple listening ips for SSDP traffic.
|
||||||
# should be under the form nnn.nnn.nnn.nnn/nn
|
# should be under the form nnn.nnn.nnn.nnn/nn
|
||||||
# HTTP is available on all interfaces
|
# It can also be the network interface name (ie "eth0")
|
||||||
|
# It if mandatory to use the network interface name to enable IPv6
|
||||||
|
# HTTP is available on all interfaces.
|
||||||
# When MULTIPLE_EXTERNAL_IP is enabled, the external ip
|
# When MULTIPLE_EXTERNAL_IP is enabled, the external ip
|
||||||
# address associated with the subnet follows. for example :
|
# address associated with the subnet follows. for example :
|
||||||
# listening_ip=192.168.0.1/24 88.22.44.13
|
# listening_ip=192.168.0.1/24 88.22.44.13
|
||||||
#listening_ip=192.168.0.1/24
|
#listening_ip=192.168.0.1/24
|
||||||
listening_ip=192.168.11.33/24
|
listening_ip=192.168.10.109/24
|
||||||
#listening_ip=
|
#listening_ip=eth0
|
||||||
# port for HTTP (descriptions and SOAP) traffic. set 0 for autoselect.
|
# port for HTTP (descriptions and SOAP) traffic. set 0 for autoselect.
|
||||||
port=0
|
port=0
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* $Id: miniupnpdtypes.h,v 1.3 2011/05/13 13:56:18 nanard Exp $ */
|
/* $Id: miniupnpdtypes.h,v 1.4 2012/04/06 15:27:21 nanard Exp $ */
|
||||||
/* MiniUPnP project
|
/* MiniUPnP project
|
||||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||||
* (c) 2006-2007 Thomas Bernard
|
* (c) 2006-2012 Thomas Bernard
|
||||||
* This software is subject to the conditions detailed
|
* This software is subject to the conditions detailed
|
||||||
* in the LICENCE file provided within the distribution */
|
* in the LICENCE file provided within the distribution */
|
||||||
#ifndef __MINIUPNPDTYPES_H__
|
#ifndef __MINIUPNPDTYPES_H__
|
||||||
|
@ -9,11 +9,16 @@
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#include <net/if.h>
|
||||||
#include <sys/queue.h>
|
#include <sys/queue.h>
|
||||||
|
|
||||||
/* structure and list for storing lan addresses
|
/* structure and list for storing lan addresses
|
||||||
* with ascii representation and mask */
|
* with ascii representation and mask */
|
||||||
struct lan_addr_s {
|
struct lan_addr_s {
|
||||||
|
char ifname[IFNAMSIZ]; /* example: eth0 */
|
||||||
|
#ifdef ENABLE_IPV6
|
||||||
|
unsigned int index; /* use if_nametoindex() */
|
||||||
|
#endif
|
||||||
char str[16]; /* example: 192.168.0.1 */
|
char str[16]; /* example: 192.168.0.1 */
|
||||||
struct in_addr addr, mask; /* ip/mask */
|
struct in_addr addr, mask; /* ip/mask */
|
||||||
#ifdef MULTIPLE_EXTERNAL_IP
|
#ifdef MULTIPLE_EXTERNAL_IP
|
||||||
|
|
Loading…
Reference in New Issue