Lines Matching defs:sock

23 #include "spdk/sock.h"
28 #include "spdk_internal/sock.h"
120 #define __posix_sock(sock) (struct spdk_posix_sock *)sock
231 struct spdk_posix_sock *sock = __posix_sock(_sock);
233 assert(sock != NULL);
234 return spdk_net_getaddr(sock->fd, saddr, slen, sport, caddr, clen, cport);
240 struct spdk_posix_sock *sock = __posix_sock(_sock);
244 rc = spdk_net_getaddr(sock->fd, saddr, sizeof(saddr), NULL, NULL, 0, NULL);
249 rc = spdk_net_get_interface_name(saddr, sock->interface_name,
250 sizeof(sock->interface_name));
255 return sock->interface_name;
259 posix_sock_get_numa_id(struct spdk_sock *sock)
265 interface_name = posix_sock_get_interface_name(sock);
285 posix_sock_alloc_pipe(struct spdk_posix_sock *sock, int sz)
295 if (sock->recv_buf_sz == sz) {
301 old_buf = spdk_pipe_destroy(sock->recv_pipe);
303 sock->recv_pipe = NULL;
325 if (sock->recv_pipe != NULL) {
327 sbytes = spdk_pipe_reader_get_buffer(sock->recv_pipe, sock->recv_buf_sz, siov);
341 old_buf = spdk_pipe_destroy(sock->recv_pipe);
345 sock->recv_buf_sz = sz;
346 sock->recv_pipe = new_pipe;
348 if (sock->base.group_impl) {
351 group = __posix_group_impl(sock->base.group_impl);
352 spdk_pipe_group_add(group->pipe_group, sock->recv_pipe);
361 struct spdk_posix_sock *sock = __posix_sock(_sock);
365 assert(sock != NULL);
368 rc = posix_sock_alloc_pipe(sock, sz);
382 rc = setsockopt(sock->fd, SOL_SOCKET, SO_RCVBUF, &sz, sizeof(sz));
395 struct spdk_posix_sock *sock = __posix_sock(_sock);
399 assert(sock != NULL);
409 rc = setsockopt(sock->fd, SOL_SOCKET, SO_SNDBUF, &sz, sizeof(sz));
420 posix_sock_init(struct spdk_posix_sock *sock, bool enable_zero_copy)
432 rc = setsockopt(sock->fd, SOL_SOCKET, SO_ZEROCOPY, &flag, sizeof(flag));
434 sock->zcopy = true;
442 if (sock->base.impl_opts.enable_quickack) {
443 rc = setsockopt(sock->fd, IPPROTO_TCP, TCP_QUICKACK, &flag, sizeof(flag));
449 spdk_sock_get_placement_id(sock->fd, sock->base.impl_opts.enable_placement_id,
450 &sock->placement_id);
452 if (sock->base.impl_opts.enable_placement_id == PLACEMENT_MARK) {
454 spdk_sock_map_insert(&g_map, sock->placement_id, NULL);
462 struct spdk_posix_sock *sock;
464 sock = calloc(1, sizeof(*sock));
465 if (sock == NULL) {
466 SPDK_ERRLOG("sock allocation failed\n");
470 sock->fd = fd;
471 memcpy(&sock->base.impl_opts, impl_opts, sizeof(*impl_opts));
472 posix_sock_init(sock, enable_zero_copy);
474 return sock;
935 struct spdk_posix_sock *sock;
1100 sock = posix_sock_alloc(fd, &impl_opts, enable_zcopy_user_opts && enable_zcopy_impl_opts);
1101 if (sock == NULL) {
1102 SPDK_ERRLOG("sock allocation failed\n");
1110 sock->ctx = ctx;
1114 sock->ssl = ssl;
1115 SSL_set_app_data(ssl, &sock->base.impl_opts);
1118 return &sock->base;
1136 struct spdk_posix_sock *sock = __posix_sock(_sock);
1137 struct spdk_posix_sock_group_impl *group = __posix_group_impl(sock->base.group_impl);
1149 assert(sock != NULL);
1152 if (group && sock->socket_has_data) {
1153 sock->socket_has_data = false;
1154 TAILQ_REMOVE(&group->socks_with_data, sock, link);
1157 rc = accept(sock->fd, (struct sockaddr *)&sa, &salen);
1174 if (sock->base.opts.priority) {
1175 rc = setsockopt(fd, SOL_SOCKET, SO_PRIORITY, &sock->base.opts.priority, sizeof(int));
1185 ctx = posix_sock_create_ssl_context(TLS_server_method(), &sock->base.opts, &sock->base.impl_opts);
1201 new_sock = posix_sock_alloc(fd, &sock->base.impl_opts, sock->zcopy);
1230 struct spdk_posix_sock *sock = __posix_sock(_sock);
1235 if (sock->ssl != NULL) {
1236 SSL_shutdown(sock->ssl);
1240 * leak the fd but continue to free the rest of the sock
1242 close(sock->fd);
1244 SSL_free(sock->ssl);
1245 SSL_CTX_free(sock->ctx);
1247 pipe_buf = spdk_pipe_destroy(sock->recv_pipe);
1249 free(sock);
1256 _sock_check_zcopy(struct spdk_sock *sock)
1258 struct spdk_posix_sock *psock = __posix_sock(sock);
1279 if (!TAILQ_EMPTY(&sock->pending_reqs)) {
1311 TAILQ_FOREACH_SAFE(req, &sock->pending_reqs, internal.link, treq) {
1314 rc = spdk_sock_request_put(sock, req, 0);
1320 rc = spdk_sock_request_put(sock, req, 0);
1346 _sock_flush(struct spdk_sock *sock)
1348 struct spdk_posix_sock *psock = __posix_sock(sock);
1362 if (sock->cb_cnt > 0) {
1376 iovcnt = spdk_sock_prep_reqs(sock, iovs, 0, NULL, &flags);
1414 req = TAILQ_FIRST(&sock->queued_reqs);
1443 spdk_sock_request_pend(sock, req);
1445 if (!req->internal.is_zcopy && req == TAILQ_FIRST(&sock->pending_reqs)) {
1448 retval = spdk_sock_request_put(sock, req, 0);
1463 req = TAILQ_FIRST(&sock->queued_reqs);
1470 posix_sock_flush(struct spdk_sock *sock)
1473 struct spdk_posix_sock *psock = __posix_sock(sock);
1475 if (psock->zcopy && !TAILQ_EMPTY(&sock->pending_reqs)) {
1476 _sock_check_zcopy(sock);
1480 return _sock_flush(sock);
1484 posix_sock_recv_from_pipe(struct spdk_posix_sock *sock, struct iovec *diov, int diovcnt)
1491 sbytes = spdk_pipe_reader_get_buffer(sock->recv_pipe, sock->recv_buf_sz, siov);
1508 spdk_pipe_reader_advance(sock->recv_pipe, bytes);
1511 if (spdk_pipe_reader_bytes_available(sock->recv_pipe) == 0) {
1512 assert(sock->pipe_has_data == true);
1514 group = __posix_group_impl(sock->base.group_impl);
1515 if (group && !sock->socket_has_data) {
1516 TAILQ_REMOVE(&group->socks_with_data, sock, link);
1519 sock->pipe_has_data = false;
1526 posix_sock_read(struct spdk_posix_sock *sock)
1532 bytes_avail = spdk_pipe_writer_get_buffer(sock->recv_pipe, sock->recv_buf_sz, iov);
1538 if (sock->ssl) {
1539 bytes_recvd = SSL_readv(sock->ssl, iov, 2);
1541 bytes_recvd = readv(sock->fd, iov, 2);
1544 assert(sock->pipe_has_data == false);
1548 if (sock->base.group_impl && sock->socket_has_data) {
1549 group = __posix_group_impl(sock->base.group_impl);
1550 TAILQ_REMOVE(&group->socks_with_data, sock, link);
1553 sock->socket_has_data = false;
1558 spdk_pipe_writer_advance(sock->recv_pipe, bytes_recvd);
1561 if (sock->base.group_impl) {
1562 assert(sock->socket_has_data == true);
1566 sock->pipe_has_data = true;
1569 sock->socket_has_data = false;
1578 struct spdk_posix_sock *sock = __posix_sock(_sock);
1579 struct spdk_posix_sock_group_impl *group = __posix_group_impl(sock->base.group_impl);
1583 if (sock->recv_pipe == NULL) {
1584 assert(sock->pipe_has_data == false);
1585 if (group && sock->socket_has_data) {
1586 sock->socket_has_data = false;
1587 TAILQ_REMOVE(&group->socks_with_data, sock, link);
1589 if (sock->ssl) {
1590 return SSL_readv(sock->ssl, iov, iovcnt);
1592 return readv(sock->fd, iov, iovcnt);
1598 if (!sock->pipe_has_data && (group == NULL || sock->socket_has_data)) {
1608 if (sock->ssl) {
1609 return SSL_readv(sock->ssl, iov, iovcnt);
1611 return readv(sock->fd, iov, iovcnt);
1616 rc = posix_sock_read(sock);
1622 return posix_sock_recv_from_pipe(sock, iov, iovcnt);
1626 posix_sock_recv(struct spdk_sock *sock, void *buf, size_t len)
1633 return posix_sock_readv(sock, iov, 1);
1639 struct spdk_posix_sock *sock = __posix_sock(_sock);
1655 if (sock->ssl) {
1656 return SSL_writev(sock->ssl, iov, iovcnt);
1658 return writev(sock->fd, iov, iovcnt);
1665 struct spdk_posix_sock *sock = __posix_sock(_sock);
1669 if (sock->recv_pipe != NULL) {
1692 posix_sock_writev_async(struct spdk_sock *sock, struct spdk_sock_request *req)
1696 spdk_sock_request_queue(sock, req);
1699 if (sock->queued_iovcnt >= IOV_BATCH_SIZE) {
1700 rc = _sock_flush(sock);
1702 spdk_sock_abort_requests(sock);
1710 struct spdk_posix_sock *sock = __posix_sock(_sock);
1714 assert(sock != NULL);
1717 rc = setsockopt(sock->fd, SOL_SOCKET, SO_RCVLOWAT, &val, sizeof val);
1727 struct spdk_posix_sock *sock = __posix_sock(_sock);
1732 assert(sock != NULL);
1736 rc = getsockname(sock->fd, (struct sockaddr *) &sa, &salen);
1748 struct spdk_posix_sock *sock = __posix_sock(_sock);
1753 assert(sock != NULL);
1757 rc = getsockname(sock->fd, (struct sockaddr *) &sa, &salen);
1769 struct spdk_posix_sock *sock = __posix_sock(_sock);
1773 rc = recv(sock->fd, &byte, 1, MSG_PEEK);
1792 struct spdk_posix_sock *sock = __posix_sock(_sock);
1795 if (sock->placement_id != -1) {
1796 spdk_sock_map_lookup(&g_map, sock->placement_id, &group_impl, hint);
1858 posix_sock_mark(struct spdk_posix_sock_group_impl *group, struct spdk_posix_sock *sock,
1864 rc = setsockopt(sock->fd, SOL_SOCKET, SO_MARK,
1875 SPDK_ERRLOG("Failed to insert sock group into map: %d\n", rc);
1879 sock->placement_id = placement_id;
1893 struct spdk_sock *sock, *tmp;
1895 TAILQ_FOREACH_SAFE(sock, &_group->socks, link, tmp) {
1896 posix_sock_mark(group, __posix_sock(sock), group->placement_id);
1914 struct spdk_posix_sock *sock = __posix_sock(_sock);
1923 event.data.ptr = sock;
1925 rc = epoll_ctl(group->fd, EPOLL_CTL_ADD, sock->fd, &event);
1930 EV_SET(&event, sock->fd, EVFILT_READ, EV_ADD, 0, 0, sock);
1940 if (spdk_unlikely(sock->recv_pipe != NULL &&
1941 (spdk_pipe_reader_bytes_available(sock->recv_pipe) > 0))) {
1942 sock->pipe_has_data = true;
1943 sock->socket_has_data = false;
1944 TAILQ_INSERT_TAIL(&group->socks_with_data, sock, link);
1945 } else if (sock->recv_pipe != NULL) {
1946 rc = spdk_pipe_group_add(group->pipe_group, sock->recv_pipe);
1952 } else if (sock->placement_id != -1) {
1953 rc = spdk_sock_map_insert(&g_map, sock->placement_id, &group->base);
1955 SPDK_ERRLOG("Failed to insert sock group into map: %d\n", rc);
1967 struct spdk_posix_sock *sock = __posix_sock(_sock);
1970 if (sock->pipe_has_data || sock->socket_has_data) {
1971 TAILQ_REMOVE(&group->socks_with_data, sock, link);
1972 sock->pipe_has_data = false;
1973 sock->socket_has_data = false;
1974 } else if (sock->recv_pipe != NULL) {
1975 rc = spdk_pipe_group_remove(group->pipe_group, sock->recv_pipe);
1979 if (sock->placement_id != -1) {
1980 spdk_sock_map_release(&g_map, sock->placement_id);
1987 rc = epoll_ctl(group->fd, EPOLL_CTL_DEL, sock->fd, &event);
1992 EV_SET(&event, sock->fd, EVFILT_READ, EV_DELETE, 0, 0, NULL);
2011 struct spdk_sock *sock, *tmp;
2067 * a completion callback could remove the sock from the
2069 TAILQ_FOREACH_SAFE(sock, &_group->socks, link, tmp) {
2070 rc = _sock_flush(sock);
2072 spdk_sock_abort_requests(sock);
2087 sock = TAILQ_FIRST(&_group->socks);
2088 psock = __posix_sock(sock);
2092 if (sock->opts.priority) {
2103 sock = events[i].data.ptr;
2104 psock = __posix_sock(sock);
2108 rc = _sock_check_zcopy(sock);
2112 if (rc || sock->cb_fn == NULL) {
2122 sock = events[i].udata;
2123 psock = __posix_sock(sock);