/*
- * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
+ * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
{
switch (want) {
case SSL_NOTHING:
- NOT_REACHED();
+ OVS_NOT_REACHED();
case SSL_READING:
return POLLIN;
return POLLOUT;
default:
- NOT_REACHED();
+ OVS_NOT_REACHED();
}
}
static int
new_ssl_stream(const char *name, int fd, enum session_type type,
- enum ssl_state state, const struct sockaddr_in *remote,
- struct stream **streamp)
+ enum ssl_state state, struct stream **streamp)
{
- struct sockaddr_in local;
+ struct sockaddr_storage local;
socklen_t local_len = sizeof local;
struct ssl_stream *sslv;
SSL *ssl = NULL;
/* Create and return the ssl_stream. */
sslv = xmalloc(sizeof *sslv);
stream_init(&sslv->stream, &ssl_stream_class, EAGAIN, name);
- stream_set_remote_ip(&sslv->stream, remote->sin_addr.s_addr);
- stream_set_remote_port(&sslv->stream, remote->sin_port);
- stream_set_local_ip(&sslv->stream, local.sin_addr.s_addr);
- stream_set_local_port(&sslv->stream, local.sin_port);
sslv->state = state;
sslv->type = type;
sslv->fd = fd;
static int
ssl_open(const char *name, char *suffix, struct stream **streamp, uint8_t dscp)
{
- struct sockaddr_in sin;
int error, fd;
error = ssl_init();
return error;
}
- error = inet_open_active(SOCK_STREAM, suffix, OFP_OLD_PORT, &sin, &fd,
+ error = inet_open_active(SOCK_STREAM, suffix, OFP_OLD_PORT, NULL, &fd,
dscp);
if (fd >= 0) {
int state = error ? STATE_TCP_CONNECTING : STATE_SSL_CONNECTING;
- return new_ssl_stream(name, fd, CLIENT, state, &sin, streamp);
+ return new_ssl_stream(name, fd, CLIENT, state, streamp);
} else {
VLOG_ERR("%s: connect: %s", name, ovs_strerror(error));
return error;
}
}
- NOT_REACHED();
+ OVS_NOT_REACHED();
}
static void
break;
default:
- NOT_REACHED();
+ OVS_NOT_REACHED();
}
}
break;
break;
default:
- NOT_REACHED();
+ OVS_NOT_REACHED();
}
}
pssl_open(const char *name OVS_UNUSED, char *suffix, struct pstream **pstreamp,
uint8_t dscp)
{
+ char bound_name[SS_NTOP_BUFSIZE + 16];
+ char addrbuf[SS_NTOP_BUFSIZE];
+ struct sockaddr_storage ss;
struct pssl_pstream *pssl;
- struct sockaddr_in sin;
- char bound_name[128];
+ uint16_t port;
int retval;
int fd;
return retval;
}
- fd = inet_open_passive(SOCK_STREAM, suffix, OFP_OLD_PORT, &sin, dscp);
+ fd = inet_open_passive(SOCK_STREAM, suffix, OFP_OLD_PORT, &ss, dscp);
if (fd < 0) {
return -fd;
}
- sprintf(bound_name, "pssl:%"PRIu16":"IP_FMT,
- ntohs(sin.sin_port), IP_ARGS(sin.sin_addr.s_addr));
+
+ port = ss_get_port(&ss);
+ snprintf(bound_name, sizeof bound_name, "ptcp:%"PRIu16":%s",
+ port, ss_format_address(&ss, addrbuf, sizeof addrbuf));
pssl = xmalloc(sizeof *pssl);
pstream_init(&pssl->pstream, &pssl_pstream_class, bound_name);
- pstream_set_bound_port(&pssl->pstream, sin.sin_port);
+ pstream_set_bound_port(&pssl->pstream, htons(port));
pssl->fd = fd;
*pstreamp = &pssl->pstream;
return 0;
pssl_accept(struct pstream *pstream, struct stream **new_streamp)
{
struct pssl_pstream *pssl = pssl_pstream_cast(pstream);
- struct sockaddr_in sin;
- socklen_t sin_len = sizeof sin;
- char name[128];
+ char name[SS_NTOP_BUFSIZE + 16];
+ char addrbuf[SS_NTOP_BUFSIZE];
+ struct sockaddr_storage ss;
+ socklen_t ss_len = sizeof ss;
int new_fd;
int error;
- new_fd = accept(pssl->fd, (struct sockaddr *) &sin, &sin_len);
+ new_fd = accept(pssl->fd, (struct sockaddr *) &ss, &ss_len);
if (new_fd < 0) {
error = errno;
if (error != EAGAIN) {
return error;
}
- sprintf(name, "ssl:"IP_FMT, IP_ARGS(sin.sin_addr.s_addr));
- if (sin.sin_port != htons(OFP_OLD_PORT)) {
- sprintf(strchr(name, '\0'), ":%"PRIu16, ntohs(sin.sin_port));
- }
- return new_ssl_stream(name, new_fd, SERVER, STATE_SSL_CONNECTING, &sin,
+ snprintf(name, sizeof name, "tcp:%s:%"PRIu16,
+ ss_format_address(&ss, addrbuf, sizeof addrbuf),
+ ss_get_port(&ss));
+ return new_ssl_stream(name, new_fd, SERVER, STATE_SSL_CONNECTING,
new_streamp);
}
if (i) {
ds_put_char(&fp, ':');
}
- ds_put_format(&fp, "%02hhx", digest[i]);
+ ds_put_format(&fp, "%02x", digest[i]);
}
}
subject = X509_NAME_oneline(X509_get_subject_name(cert), NULL, 0);
for (i = 0; i < n_certs; i++) {
/* SSL_CTX_add_client_CA makes a copy of the relevant data. */
if (SSL_CTX_add_client_CA(ctx, certs[i]) != 1) {
- VLOG_ERR("failed to add client certificate %zu from %s: %s",
+ VLOG_ERR("failed to add client certificate %"PRIuSIZE" from %s: %s",
i, file_name,
ERR_error_string(ERR_get_error(), NULL));
} else {
ds_put_format(&details, "type %d", content_type);
}
- VLOG_DBG("%s%u%s%s %s (%zu bytes)",
+ VLOG_DBG("%s%u%s%s %s (%"PRIuSIZE" bytes)",
sslv->type == CLIENT ? "client" : "server",
sslv->session_nr, write_p ? "-->" : "<--",
stream_get_name(&sslv->stream), ds_cstr(&details), len);