X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_module%2Fiface-socket.c;h=3f8568208a3f8a5760c4650e2e6ad8c060e9e22d;hb=c8b23e99efde3aa5a2c26d1b8e9bc7dc914e6113;hp=39d18f09824d11a557d6567b9d8e3edaf766ce1c;hpb=791ea2f3e21cfbc9c47341efbb98995c33d86fcb;p=palacios.git diff --git a/linux_module/iface-socket.c b/linux_module/iface-socket.c index 39d18f0..3f85682 100644 --- a/linux_module/iface-socket.c +++ b/linux_module/iface-socket.c @@ -57,13 +57,20 @@ palacios_tcp_socket(const int bufsize, const int nodelay, } - sock = kmalloc(sizeof(struct palacios_socket), GFP_KERNEL); + sock = palacios_alloc(sizeof(struct palacios_socket)); + + if (!sock) { + ERROR("Cannot allocate TCP socket\n"); + return NULL; + } + memset(sock, 0, sizeof(struct palacios_socket)); err = sock_create(PF_INET, SOCK_STREAM, IPPROTO_TCP, &(sock->sock)); if (err < 0) { - kfree(sock); + ERROR("Cannot create TCP socket\n"); + palacios_free(sock); return NULL; } @@ -101,13 +108,19 @@ palacios_udp_socket( } - sock = kmalloc(sizeof(struct palacios_socket), GFP_KERNEL); + sock = palacios_alloc(sizeof(struct palacios_socket)); + if (!sock) { + ERROR("Cannot allocate UDP socket\n"); + return NULL; + } + memset(sock, 0, sizeof(struct palacios_socket)); err = sock_create(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &(sock->sock)) ; if (err < 0){ - kfree(sock); + ERROR("Cannot create UDP socket\n"); + palacios_free(sock); return NULL; } @@ -133,7 +146,7 @@ palacios_close(void * sock_ptr) sock->sock->ops->release(sock->sock); list_del(&(sock->sock_node)); - kfree(sock); + palacios_free(sock); } } @@ -193,12 +206,18 @@ static void * palacios_accept(const void * sock_ptr, unsigned int * remote_ip, u } - newsock = kmalloc(sizeof(struct palacios_socket), GFP_KERNEL); + newsock = palacios_alloc(sizeof(struct palacios_socket)); + + if (!newsock) { + ERROR("Cannot allocate new socket on accept\n"); + return NULL; + } err = sock_create(PF_INET, SOCK_STREAM, IPPROTO_TCP, &(newsock->sock)); if (err < 0) { - kfree(newsock); + ERROR("Cannot create new socket on accept\n"); + palacios_free(newsock); return NULL; } @@ -208,7 +227,8 @@ static void * palacios_accept(const void * sock_ptr, unsigned int * remote_ip, u err = newsock->sock->ops->accept(sock->sock, newsock->sock, 0); if (err < 0){ - kfree(newsock); + ERROR("Cannot accept\n"); + palacios_free(newsock); return NULL; } @@ -281,8 +301,12 @@ palacios_send( msg.msg_namelen = 0; msg.msg_control = NULL; msg.msg_controllen = 0; +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0) msg.msg_iov = &iov; msg.msg_iovlen = 1; +#else + iov_iter_init(&(msg.msg_iter),WRITE,&iov,1,0); +#endif iov.iov_base = (char *)buf; iov.iov_len = (size_t)len; @@ -320,8 +344,12 @@ palacios_recv( msg.msg_namelen = 0; msg.msg_control = NULL; msg.msg_controllen = 0; +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0) msg.msg_iov = &iov; msg.msg_iovlen = 1; +#else + iov_iter_init(&(msg.msg_iter),READ,&iov,1,0); +#endif iov.iov_base = (void *)&buf[0]; iov.iov_len = (size_t)len; @@ -365,8 +393,12 @@ palacios_sendto_ip( msg.msg_namelen = sizeof(struct sockaddr_in); msg.msg_control = NULL; msg.msg_controllen = 0; +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0) msg.msg_iov = &iov; msg.msg_iovlen = 1; +#else + iov_iter_init(&(msg.msg_iter),WRITE,&iov,1,0); +#endif iov.iov_base = (char *)buf; iov.iov_len = (size_t)len; @@ -394,7 +426,6 @@ palacios_recvfrom_ip( { struct palacios_socket * sock = (struct palacios_socket *)sock_ptr; struct sockaddr_in src; - int alen; struct msghdr msg; mm_segment_t oldfs; struct iovec iov; @@ -407,7 +438,6 @@ palacios_recvfrom_ip( src.sin_family = AF_INET; src.sin_port = htons(port); src.sin_addr.s_addr = htonl(ip_addr); - alen = sizeof(src); msg.msg_flags = 0; @@ -415,8 +445,12 @@ palacios_recvfrom_ip( msg.msg_namelen = sizeof(struct sockaddr_in); msg.msg_control = NULL; msg.msg_controllen = 0; +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0) msg.msg_iov = &iov; msg.msg_iovlen = 1; +#else + iov_iter_init(&(msg.msg_iter),READ,&iov,1,0); +#endif iov.iov_base = (void *)&buf[0]; iov.iov_len = (size_t)len;