Changeset View
Changeset View
Standalone View
Standalone View
usr.sbin/ctld/ctld.c
Show First 20 Lines • Show All 619 Lines • ▼ Show 20 Lines | portal_group_new(struct conf *conf, const char *name) | ||||
if (pg == NULL) | if (pg == NULL) | ||||
log_err(1, "calloc"); | log_err(1, "calloc"); | ||||
pg->pg_name = checked_strdup(name); | pg->pg_name = checked_strdup(name); | ||||
TAILQ_INIT(&pg->pg_options); | TAILQ_INIT(&pg->pg_options); | ||||
TAILQ_INIT(&pg->pg_portals); | TAILQ_INIT(&pg->pg_portals); | ||||
TAILQ_INIT(&pg->pg_ports); | TAILQ_INIT(&pg->pg_ports); | ||||
pg->pg_conf = conf; | pg->pg_conf = conf; | ||||
pg->pg_tag = 0; /* Assigned later in conf_apply(). */ | pg->pg_tag = 0; /* Assigned later in conf_apply(). */ | ||||
pg->pg_dscp = -1; | |||||
TAILQ_INSERT_TAIL(&conf->conf_portal_groups, pg, pg_next); | TAILQ_INSERT_TAIL(&conf->conf_portal_groups, pg, pg_next); | ||||
return (pg); | return (pg); | ||||
} | } | ||||
void | void | ||||
portal_group_delete(struct portal_group *pg) | portal_group_delete(struct portal_group *pg) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 1,539 Lines • ▼ Show 20 Lines | #endif | ||||
SO_REUSEADDR, &one, sizeof(one)); | SO_REUSEADDR, &one, sizeof(one)); | ||||
if (error != 0) { | if (error != 0) { | ||||
log_warn("setsockopt(SO_REUSEADDR) failed " | log_warn("setsockopt(SO_REUSEADDR) failed " | ||||
"for %s", newp->p_listen); | "for %s", newp->p_listen); | ||||
close(newp->p_socket); | close(newp->p_socket); | ||||
newp->p_socket = 0; | newp->p_socket = 0; | ||||
cumulated_error++; | cumulated_error++; | ||||
continue; | continue; | ||||
} | |||||
if (newpg->pg_dscp != -1) { | |||||
struct sockaddr sa; | |||||
int len = sizeof(sa); | |||||
getsockname(newp->p_socket, &sa, &len); | |||||
/* | |||||
* Only allow the 6-bit DSCP | |||||
* field to be modified | |||||
*/ | |||||
int dscp = newpg->pg_dscp >> 2; | |||||
mav: It looks weird to modify the configuration while applying it. I'd say either modify it while… | |||||
if (sa.sa_family == AF_INET) { | |||||
if (setsockopt(newp->p_socket, | |||||
IPPROTO_IP, IP_TOS, | |||||
&dscp, sizeof(dscp)) == -1) | |||||
log_warn("setsockopt(IP_TOS) " | |||||
"failed for %s", | |||||
newp->p_listen); | |||||
} else | |||||
if (sa.sa_family == AF_INET6) { | |||||
if (setsockopt(newp->p_socket, | |||||
IPPROTO_IPV6, IPV6_TCLASS, | |||||
&dscp, sizeof(dscp)) == -1) | |||||
log_warn("setsockopt(IPV6_TCLASS) " | |||||
"failed for %s", | |||||
newp->p_listen); | |||||
} | |||||
} | } | ||||
error = bind(newp->p_socket, newp->p_ai->ai_addr, | error = bind(newp->p_socket, newp->p_ai->ai_addr, | ||||
newp->p_ai->ai_addrlen); | newp->p_ai->ai_addrlen); | ||||
if (error != 0) { | if (error != 0) { | ||||
log_warn("bind(2) failed for %s", | log_warn("bind(2) failed for %s", | ||||
newp->p_listen); | newp->p_listen); | ||||
close(newp->p_socket); | close(newp->p_socket); | ||||
newp->p_socket = 0; | newp->p_socket = 0; | ||||
▲ Show 20 Lines • Show All 609 Lines • Show Last 20 Lines |
It looks weird to modify the configuration while applying it. I'd say either modify it while parsing or use local variable here.