Do not register in CTL portal groups without portals.

From config synthax point of view such portal groups are not incorrect,
but they are useless since can not receive any connection.  And since
CTL port resource is very limited, it is good to save it.

MFC after:	2 weeks
This commit is contained in:
mav 2017-04-10 10:38:12 +00:00
parent 42f4e00617
commit f99e09f8a5
2 changed files with 18 additions and 6 deletions

View File

@ -1237,7 +1237,6 @@ port_new(struct conf *conf, struct target *target, struct portal_group *pg)
port->p_target = target;
TAILQ_INSERT_TAIL(&pg->pg_ports, port, p_pgs);
port->p_portal_group = pg;
port->p_foreign = pg->pg_foreign;
return (port);
}
@ -1310,6 +1309,19 @@ port_delete(struct port *port)
free(port);
}
int
port_is_dummy(struct port *port)
{
if (port->p_portal_group) {
if (port->p_portal_group->pg_foreign)
return (1);
if (TAILQ_EMPTY(&port->p_portal_group->pg_portals))
return (1);
}
return (0);
}
struct target *
target_new(struct conf *conf, const char *name)
{
@ -1887,10 +1899,10 @@ conf_apply(struct conf *oldconf, struct conf *newconf)
* and missing in the new one.
*/
TAILQ_FOREACH_SAFE(oldport, &oldconf->conf_ports, p_next, tmpport) {
if (oldport->p_foreign)
if (port_is_dummy(oldport))
continue;
newport = port_find(newconf, oldport->p_name);
if (newport != NULL && !newport->p_foreign)
if (newport != NULL && !port_is_dummy(newport))
continue;
log_debugx("removing port \"%s\"", oldport->p_name);
error = kernel_port_remove(oldport);
@ -2010,11 +2022,11 @@ conf_apply(struct conf *oldconf, struct conf *newconf)
* Now add new ports or modify existing ones.
*/
TAILQ_FOREACH(newport, &newconf->conf_ports, p_next) {
if (newport->p_foreign)
if (port_is_dummy(newport))
continue;
oldport = port_find(oldconf, newport->p_name);
if (oldport == NULL || oldport->p_foreign) {
if (oldport == NULL || port_is_dummy(oldport)) {
log_debugx("adding port \"%s\"", newport->p_name);
error = kernel_port_add(newport);
} else {

View File

@ -149,7 +149,6 @@ struct port {
struct portal_group *p_portal_group;
struct pport *p_pport;
struct target *p_target;
int p_foreign;
uint32_t p_ctl_port;
};
@ -373,6 +372,7 @@ struct port *port_find(const struct conf *conf, const char *name);
struct port *port_find_in_pg(const struct portal_group *pg,
const char *target);
void port_delete(struct port *port);
int port_is_dummy(struct port *port);
struct target *target_new(struct conf *conf, const char *name);
void target_delete(struct target *target);