mirror of https://gitee.com/openkylin/linux.git
ipvs: Use ERR_PTR for returning errors from make_receive_sock() and make_send_sock()
The additional information we now return to the caller is currently not used, but will be used to return errors to user space. Signed-off-by: Sven Wegener <sven.wegener@stealer.net> Acked-by: Simon Horman <horms@verge.net.au>
This commit is contained in:
parent
d56400504a
commit
e6dd731c75
|
@ -27,6 +27,7 @@
|
||||||
#include <linux/in.h>
|
#include <linux/in.h>
|
||||||
#include <linux/igmp.h> /* for ip_mc_join_group */
|
#include <linux/igmp.h> /* for ip_mc_join_group */
|
||||||
#include <linux/udp.h>
|
#include <linux/udp.h>
|
||||||
|
#include <linux/err.h>
|
||||||
|
|
||||||
#include <net/ip.h>
|
#include <net/ip.h>
|
||||||
#include <net/sock.h>
|
#include <net/sock.h>
|
||||||
|
@ -576,14 +577,17 @@ static int bind_mcastif_addr(struct socket *sock, char *ifname)
|
||||||
static struct socket * make_send_sock(void)
|
static struct socket * make_send_sock(void)
|
||||||
{
|
{
|
||||||
struct socket *sock;
|
struct socket *sock;
|
||||||
|
int result;
|
||||||
|
|
||||||
/* First create a socket */
|
/* First create a socket */
|
||||||
if (sock_create_kern(PF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock) < 0) {
|
result = sock_create_kern(PF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock);
|
||||||
|
if (result < 0) {
|
||||||
IP_VS_ERR("Error during creation of socket; terminating\n");
|
IP_VS_ERR("Error during creation of socket; terminating\n");
|
||||||
return NULL;
|
return ERR_PTR(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (set_mcast_if(sock->sk, ip_vs_master_mcast_ifn) < 0) {
|
result = set_mcast_if(sock->sk, ip_vs_master_mcast_ifn);
|
||||||
|
if (result < 0) {
|
||||||
IP_VS_ERR("Error setting outbound mcast interface\n");
|
IP_VS_ERR("Error setting outbound mcast interface\n");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
@ -591,14 +595,15 @@ static struct socket * make_send_sock(void)
|
||||||
set_mcast_loop(sock->sk, 0);
|
set_mcast_loop(sock->sk, 0);
|
||||||
set_mcast_ttl(sock->sk, 1);
|
set_mcast_ttl(sock->sk, 1);
|
||||||
|
|
||||||
if (bind_mcastif_addr(sock, ip_vs_master_mcast_ifn) < 0) {
|
result = bind_mcastif_addr(sock, ip_vs_master_mcast_ifn);
|
||||||
|
if (result < 0) {
|
||||||
IP_VS_ERR("Error binding address of the mcast interface\n");
|
IP_VS_ERR("Error binding address of the mcast interface\n");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sock->ops->connect(sock,
|
result = sock->ops->connect(sock, (struct sockaddr *) &mcast_addr,
|
||||||
(struct sockaddr*)&mcast_addr,
|
sizeof(struct sockaddr), 0);
|
||||||
sizeof(struct sockaddr), 0) < 0) {
|
if (result < 0) {
|
||||||
IP_VS_ERR("Error connecting to the multicast addr\n");
|
IP_VS_ERR("Error connecting to the multicast addr\n");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
@ -607,7 +612,7 @@ static struct socket * make_send_sock(void)
|
||||||
|
|
||||||
error:
|
error:
|
||||||
sock_release(sock);
|
sock_release(sock);
|
||||||
return NULL;
|
return ERR_PTR(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -617,27 +622,30 @@ static struct socket * make_send_sock(void)
|
||||||
static struct socket * make_receive_sock(void)
|
static struct socket * make_receive_sock(void)
|
||||||
{
|
{
|
||||||
struct socket *sock;
|
struct socket *sock;
|
||||||
|
int result;
|
||||||
|
|
||||||
/* First create a socket */
|
/* First create a socket */
|
||||||
if (sock_create_kern(PF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock) < 0) {
|
result = sock_create_kern(PF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock);
|
||||||
|
if (result < 0) {
|
||||||
IP_VS_ERR("Error during creation of socket; terminating\n");
|
IP_VS_ERR("Error during creation of socket; terminating\n");
|
||||||
return NULL;
|
return ERR_PTR(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* it is equivalent to the REUSEADDR option in user-space */
|
/* it is equivalent to the REUSEADDR option in user-space */
|
||||||
sock->sk->sk_reuse = 1;
|
sock->sk->sk_reuse = 1;
|
||||||
|
|
||||||
if (sock->ops->bind(sock,
|
result = sock->ops->bind(sock, (struct sockaddr *) &mcast_addr,
|
||||||
(struct sockaddr*)&mcast_addr,
|
sizeof(struct sockaddr));
|
||||||
sizeof(struct sockaddr)) < 0) {
|
if (result < 0) {
|
||||||
IP_VS_ERR("Error binding to the multicast addr\n");
|
IP_VS_ERR("Error binding to the multicast addr\n");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* join the multicast group */
|
/* join the multicast group */
|
||||||
if (join_mcast_group(sock->sk,
|
result = join_mcast_group(sock->sk,
|
||||||
(struct in_addr*)&mcast_addr.sin_addr,
|
(struct in_addr *) &mcast_addr.sin_addr,
|
||||||
ip_vs_backup_mcast_ifn) < 0) {
|
ip_vs_backup_mcast_ifn);
|
||||||
|
if (result < 0) {
|
||||||
IP_VS_ERR("Error joining to the multicast group\n");
|
IP_VS_ERR("Error joining to the multicast group\n");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
@ -646,7 +654,7 @@ static struct socket * make_receive_sock(void)
|
||||||
|
|
||||||
error:
|
error:
|
||||||
sock_release(sock);
|
sock_release(sock);
|
||||||
return NULL;
|
return ERR_PTR(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -719,7 +727,7 @@ static void sync_master_loop(void)
|
||||||
|
|
||||||
/* create the sending multicast socket */
|
/* create the sending multicast socket */
|
||||||
sock = make_send_sock();
|
sock = make_send_sock();
|
||||||
if (!sock)
|
if (IS_ERR(sock))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
IP_VS_INFO("sync thread started: state = MASTER, mcast_ifn = %s, "
|
IP_VS_INFO("sync thread started: state = MASTER, mcast_ifn = %s, "
|
||||||
|
@ -772,7 +780,7 @@ static void sync_backup_loop(void)
|
||||||
|
|
||||||
/* create the receiving multicast socket */
|
/* create the receiving multicast socket */
|
||||||
sock = make_receive_sock();
|
sock = make_receive_sock();
|
||||||
if (!sock)
|
if (IS_ERR(sock))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
IP_VS_INFO("sync thread started: state = BACKUP, mcast_ifn = %s, "
|
IP_VS_INFO("sync thread started: state = BACKUP, mcast_ifn = %s, "
|
||||||
|
|
Loading…
Reference in New Issue