summaryrefslogtreecommitdiffstats
path: root/usr.sbin/ctld/ctld.c
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2017-04-24 06:32:35 +0000
committermav <mav@FreeBSD.org>2017-04-24 06:32:35 +0000
commitb4740b046f8d26d0c17c438a6ccf6a48d4610c9c (patch)
tree816f765c3b3a4fb1ba5d2016e5cc942efb4bf85c /usr.sbin/ctld/ctld.c
parentbc743032ad67f907e01ab07b89fa2c5417004333 (diff)
downloadFreeBSD-src-b4740b046f8d26d0c17c438a6ccf6a48d4610c9c.zip
FreeBSD-src-b4740b046f8d26d0c17c438a6ccf6a48d4610c9c.tar.gz
MFC r316677: 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.
Diffstat (limited to 'usr.sbin/ctld/ctld.c')
-rw-r--r--usr.sbin/ctld/ctld.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/usr.sbin/ctld/ctld.c b/usr.sbin/ctld/ctld.c
index ed7d608..95294b0 100644
--- a/usr.sbin/ctld/ctld.c
+++ b/usr.sbin/ctld/ctld.c
@@ -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)
{
@@ -1885,10 +1897,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);
@@ -2008,11 +2020,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 {
OpenPOWER on IntegriCloud