Changeset View
Changeset View
Standalone View
Standalone View
usr.sbin/ctld/ctld.c
Show First 20 Lines • Show All 620 Lines • ▼ Show 20 Lines | 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; | pg->pg_dscp = -1; | ||||
pg->pg_pcp = -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,568 Lines • ▼ Show 20 Lines | #endif | ||||
"failed for %s", | "failed for %s", | ||||
newp->p_listen); | newp->p_listen); | ||||
} else | } else | ||||
if (sa.sa_family == AF_INET6) { | if (sa.sa_family == AF_INET6) { | ||||
if (setsockopt(newp->p_socket, | if (setsockopt(newp->p_socket, | ||||
IPPROTO_IPV6, IPV6_TCLASS, | IPPROTO_IPV6, IPV6_TCLASS, | ||||
&tos, sizeof(tos)) == -1) | &tos, sizeof(tos)) == -1) | ||||
log_warn("setsockopt(IPV6_TCLASS) " | log_warn("setsockopt(IPV6_TCLASS) " | ||||
"failed for %s", | |||||
newp->p_listen); | |||||
} | |||||
} | |||||
if (newpg->pg_pcp != -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 pcp = newpg->pg_pcp; | |||||
if (sa.sa_family == AF_INET) { | |||||
if (setsockopt(newp->p_socket, | |||||
IPPROTO_IP, IP_VLAN_PCP, | |||||
&pcp, sizeof(pcp)) == -1) | |||||
log_warn("setsockopt(IP_VLAN_PCP) " | |||||
"failed for %s", | |||||
newp->p_listen); | |||||
} else | |||||
if (sa.sa_family == AF_INET6) { | |||||
if (setsockopt(newp->p_socket, | |||||
IPPROTO_IPV6, IPV6_VLAN_PCP, | |||||
&pcp, sizeof(pcp)) == -1) | |||||
log_warn("setsockopt(IPV6_VLAN_PCP) " | |||||
"failed for %s", | "failed for %s", | ||||
newp->p_listen); | 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", | ||||
▲ Show 20 Lines • Show All 612 Lines • Show Last 20 Lines |