Wildcards in dhcp-range constructors

This commit is contained in:
Simon Kelley
2012-12-30 17:38:09 +00:00
parent dc9476b670
commit 771287be11
4 changed files with 17 additions and 6 deletions

View File

@@ -712,14 +712,19 @@ void log_context(int family, struct dhcp_context *context)
#ifdef HAVE_DHCP6 #ifdef HAVE_DHCP6
if (context->flags & CONTEXT_CONSTRUCTED) if (context->flags & CONTEXT_CONSTRUCTED)
{ {
n = p; char ifrn_name[IFNAMSIZ];
p += sprintf(p, ", constructed for %s", context->template_interface); if (indextoname(daemon->doing_dhcp6 ? daemon->dhcp6fd : daemon->icmp6fd, context->if_index, ifrn_name))
{
n = p;
p += sprintf(p, ", constructed for %s", ifrn_name);
}
} }
if (context->flags & CONTEXT_TEMPLATE) if (context->flags & CONTEXT_TEMPLATE)
{ {
n = p; n = p;
p += sprintf(p, ", template for %s", context->template_interface); p += sprintf(p, ", template for %s%s", context->template_interface,
(context->flags & CONTEXT_WILDCARD) ? "*" : "");
} }
#endif #endif

View File

@@ -531,8 +531,9 @@ static int construct_worker(struct in6_addr *local, int prefix,
} }
} }
else if (strcmp(ifrn_name, template->template_interface) == 0 && else if (addr6part(local) == addr6part(&template->start6) &&
addr6part(local) == addr6part(&template->start6)) strncmp(template->template_interface, ifrn_name, strlen(template->template_interface)) == 0 &&
(strlen(template->template_interface) == strlen(ifrn_name) || (template->flags & CONTEXT_WILDCARD)))
{ {
start6 = *local; start6 = *local;
setaddr6part(&start6, addr6part(&template->start6)); setaddr6part(&start6, addr6part(&template->start6));

View File

@@ -706,7 +706,7 @@ struct dhcp_context {
#define CONTEXT_CONSTRUCTED 2048 #define CONTEXT_CONSTRUCTED 2048
#define CONTEXT_GC 4096 #define CONTEXT_GC 4096
#define CONTEXT_RA 8192 #define CONTEXT_RA 8192
#define CONTEXT_WILDCARD 16384
struct ping_result { struct ping_result {
struct in_addr addr; struct in_addr addr;

View File

@@ -2291,6 +2291,11 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
new->flags |= CONTEXT_DHCP; new->flags |= CONTEXT_DHCP;
else if (strstr(a[leasepos], "constructor:") == a[leasepos]) else if (strstr(a[leasepos], "constructor:") == a[leasepos])
{ {
if (a[leasepos][strlen(a[leasepos])-1] == '*')
{
a[leasepos][strlen(a[leasepos])-1] = 0;
new->flags |= CONTEXT_WILDCARD;
}
new->template_interface = opt_string_alloc(a[leasepos] + 12); new->template_interface = opt_string_alloc(a[leasepos] + 12);
new->flags |= CONTEXT_TEMPLATE; new->flags |= CONTEXT_TEMPLATE;
} }