Allow more than one --bridge-interface option to refer to an interface.

This commit is contained in:
Simon Kelley
2018-01-14 22:57:14 +00:00
parent 3c973ad92d
commit 22cd860124
3 changed files with 28 additions and 7 deletions

View File

@@ -23,6 +23,14 @@ version 2.79
time validation when --dnssec-no-timecheck is in use.
Note that this is an incompatible change from earlier releases.
Allow more than one --bridge-interface option to refer to an
interface, so that we can use
--bridge-interface=int1,alias1
--bridge-interface=int1,alias2
as an alternative to
--bridge-interface=int1,alias1,alias2
Thanks to Neil Jerram for work on this.
version 2.78
Fix logic of appending ".<layer>" to PXE basename. Thanks to Chris

View File

@@ -1695,13 +1695,17 @@ option also forces the leasechange script to be called on changes
to the client-id and lease length and expiry time.
.TP
.B --bridge-interface=<interface>,<alias>[,<alias>]
Treat DHCP (v4 and v6) request and IPv6 Router Solicit packets
Treat DHCP (v4 and v6) requests and IPv6 Router Solicit packets
arriving at any of the <alias> interfaces as if they had arrived at
<interface>. This option allows dnsmasq to provide DHCP and RA
service over unaddressed and unbridged Ethernet interfaces, e.g. on an
OpenStack compute host where each such interface is a TAP interface to
a VM, or as in "old style bridging" on BSD platforms. A trailing '*'
wildcard can be used in each <alias>.
It is permissible to add more than one alias using more than one --bridge-interface option since
--bridge-interface=int1,alias1,alias2 is exactly equivalent to
--bridge-interface=int1,alias1 --bridge-interface=int1,alias2
.TP
.B \-s, --domain=<domain>[,<address range>[,local]]
Specifies DNS domains for the DHCP server. Domains may be be given

View File

@@ -2733,15 +2733,24 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
case LOPT_BRIDGE: /* --bridge-interface */
{
struct dhcp_bridge *new = opt_malloc(sizeof(struct dhcp_bridge));
struct dhcp_bridge *new;
if (!(comma = split(arg)) || strlen(arg) > IF_NAMESIZE - 1 )
ret_err(_("bad bridge-interface"));
strcpy(new->iface, arg);
new->alias = NULL;
new->next = daemon->bridges;
daemon->bridges = new;
for (new = daemon->bridges; new; new = new->next)
if (strcmp(new->iface, arg) == 0)
break;
if (!new)
{
new = opt_malloc(sizeof(struct dhcp_bridge));
strcpy(new->iface, arg);
new->alias = NULL;
new->next = daemon->bridges;
daemon->bridges = new;
}
do {
arg = comma;
comma = split(arg);