mirror of
http://thekelleys.org.uk/git/dnsmasq.git
synced 2026-11-07 16:01:41 +00:00
Allow wildcard aliases in --bridge-interface option
This is useful when using dnsmasq as DHCP server for a set of VMs whose data is routed by the host instead of being bridged. In this scenario: - There is an unbounded set of TAP interfaces that have no IP address at the host end. - DHCP allocation is done from an IPv4 address range associated with a dummy interface. - We run dnsmasq with --interface dummy --interface tap* --bind-dynamic, so that it listens on all the TAP interfaces, and --bridge-interface=dummy,tap*, so that it will allocate IP addresses via the TAP interfaces from the range associated with the dummy interface.
This commit is contained in:
1 parent
10d8540f62
commit
70772c9091
5 files changed
+23
-2
No files matched your search
+1
-1
@@ -232,7 +232,7 @@ void dhcp_packet(time_t now, int pxe_fd)
|
||||
for (bridge = daemon->bridges; bridge; bridge = bridge->next)
|
||||
{
|
||||
for (alias = bridge->alias; alias; alias = alias->next)
|
||||
if (strncmp(ifr.ifr_name, alias->iface, IF_NAMESIZE) == 0)
|
||||
if (wildcard_matchn(alias->iface, ifr.ifr_name, IF_NAMESIZE))
|
||||
{
|
||||
if (!(iface_index = if_nametoindex(bridge->iface)))
|
||||
{
|
||||
|
||||
@@ -1150,6 +1150,7 @@ void bump_maxfd(int fd, int *max);
|
||||
int read_write(int fd, unsigned char *packet, int size, int rw);
|
||||
|
||||
int wildcard_match(const char* wildcard, const char* match);
|
||||
int wildcard_matchn(const char* wildcard, const char* match, int num);
|
||||
|
||||
/* log.c */
|
||||
void die(char *message, char *arg1, int exit_code);
|
||||
|
||||
+19
@@ -602,3 +602,22 @@ int wildcard_match(const char* wildcard, const char* match)
|
||||
|
||||
return *wildcard == *match;
|
||||
}
|
||||
|
||||
/* The same but comparing a maximum of NUM characters, like strncmp. */
|
||||
int wildcard_matchn(const char* wildcard, const char* match, int num)
|
||||
{
|
||||
while (*wildcard && *match && num)
|
||||
{
|
||||
if (*wildcard == '*')
|
||||
return 1;
|
||||
|
||||
if (*wildcard != *match)
|
||||
return 0;
|
||||
|
||||
++wildcard;
|
||||
++match;
|
||||
--num;
|
||||
}
|
||||
|
||||
return (!num) || (*wildcard == *match);
|
||||
}
|
||||
Reference in new issue
Block a user