Reduce sizeof isc_sockaddr from 152 to 48 bytes
After removing sockaddr_unix from isc_sockaddr, we can also remove
sockaddr_storage and reduce the isc_sockaddr size from 152 bytes to just
48 bytes needed to hold IPv6 addresses.
(cherry picked from commit 2367b6a2e1)
This commit is contained in:
@@ -247,7 +247,7 @@ add_server(isc_mem_t *mctx, const char *address_str,
|
||||
goto cleanup;
|
||||
}
|
||||
address->length = (unsigned int)res->ai_addrlen;
|
||||
memmove(&address->type.ss, res->ai_addr, res->ai_addrlen);
|
||||
memmove(&address->type.sa, res->ai_addr, res->ai_addrlen);
|
||||
ISC_LINK_INIT(address, link);
|
||||
ISC_LIST_APPEND(*nameservers, address, link);
|
||||
|
||||
|
||||
@@ -29,11 +29,9 @@
|
||||
*/
|
||||
struct isc_sockaddr {
|
||||
union {
|
||||
struct sockaddr sa;
|
||||
struct sockaddr_in sin;
|
||||
struct sockaddr_in6 sin6;
|
||||
struct sockaddr_storage ss;
|
||||
struct sockaddr_un sunix;
|
||||
struct sockaddr sa;
|
||||
struct sockaddr_in sin;
|
||||
struct sockaddr_in6 sin6;
|
||||
} type;
|
||||
unsigned int length; /* XXXRTH beginning? */
|
||||
ISC_LINK(struct isc_sockaddr) link;
|
||||
|
||||
@@ -348,10 +348,6 @@ isc_netaddr_fromsockaddr(isc_netaddr_t *t, const isc_sockaddr_t *s) {
|
||||
memmove(&t->type.in6, &s->type.sin6.sin6_addr, 16);
|
||||
t->zone = s->type.sin6.sin6_scope_id;
|
||||
break;
|
||||
case AF_UNIX:
|
||||
memmove(t->type.un, s->type.sunix.sun_path, sizeof(t->type.un));
|
||||
t->zone = 0;
|
||||
break;
|
||||
default:
|
||||
UNREACHABLE();
|
||||
}
|
||||
|
||||
@@ -137,24 +137,7 @@ isc_sockaddr_totext(const isc_sockaddr_t *sockaddr, isc_buffer_t *target) {
|
||||
ntohs(sockaddr->type.sin6.sin6_port));
|
||||
break;
|
||||
case AF_UNIX:
|
||||
plen = strlen(sockaddr->type.sunix.sun_path);
|
||||
if (plen >= isc_buffer_availablelength(target)) {
|
||||
return ISC_R_NOSPACE;
|
||||
}
|
||||
|
||||
isc_buffer_putmem(
|
||||
target,
|
||||
(const unsigned char *)sockaddr->type.sunix.sun_path,
|
||||
plen);
|
||||
|
||||
/*
|
||||
* Null terminate after used region.
|
||||
*/
|
||||
isc_buffer_availableregion(target, &avail);
|
||||
INSIST(avail.length >= 1);
|
||||
avail.base[0] = '\0';
|
||||
|
||||
return ISC_R_SUCCESS;
|
||||
return ISC_R_NOTIMPLEMENTED;
|
||||
default:
|
||||
return ISC_R_FAILURE;
|
||||
}
|
||||
@@ -461,16 +444,9 @@ isc_sockaddr_isnetzero(const isc_sockaddr_t *sockaddr) {
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
isc_sockaddr_frompath(isc_sockaddr_t *sockaddr, const char *path) {
|
||||
if (strlen(path) >= sizeof(sockaddr->type.sunix.sun_path)) {
|
||||
return ISC_R_NOSPACE;
|
||||
}
|
||||
memset(sockaddr, 0, sizeof(*sockaddr));
|
||||
sockaddr->length = sizeof(sockaddr->type.sunix);
|
||||
sockaddr->type.sunix.sun_family = AF_UNIX;
|
||||
strlcpy(sockaddr->type.sunix.sun_path, path,
|
||||
sizeof(sockaddr->type.sunix.sun_path));
|
||||
return ISC_R_SUCCESS;
|
||||
isc_sockaddr_frompath(isc_sockaddr_t *sockaddr ISC_ATTR_UNUSED,
|
||||
const char *path ISC_ATTR_UNUSED) {
|
||||
return ISC_R_NOTIMPLEMENTED;
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
@@ -485,8 +461,7 @@ isc_sockaddr_fromsockaddr(isc_sockaddr_t *isa, const struct sockaddr *sa) {
|
||||
length = sizeof(isa->type.sin6);
|
||||
break;
|
||||
case AF_UNIX:
|
||||
length = sizeof(isa->type.sunix);
|
||||
break;
|
||||
return ISC_R_NOTIMPLEMENTED;
|
||||
default:
|
||||
return ISC_R_NOTIMPLEMENTED;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user