mirror of
https://git.proxmox.com/git/mirror_corosync
synced 2025-05-25 21:25:26 +00:00
Remove BINDTODEVICE socket option and replace with MULTICAST_IF
to be more portable and require less root privs. (Logical change 1.42) git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@121 fd59a12c-fef9-0310-b244-a6a79926bd2f
This commit is contained in:
parent
093cccd334
commit
f446ed6a5b
21
exec/gmi.c
21
exec/gmi.c
@ -400,7 +400,7 @@ static int message_handler_memb_join (struct sockaddr_in *, struct iovec *, int,
|
||||
static int message_handler_memb_form_token (struct sockaddr_in *, struct iovec *, int, int);
|
||||
static void memb_conf_id_build (struct memb_conf_id *, struct in_addr);
|
||||
static int recv_handler (poll_handle handle, int fd, int revents, void *data);
|
||||
static int netif_determine (struct sockaddr_in *bindnet, struct sockaddr_in *bound_to, char *name);
|
||||
static int netif_determine (struct sockaddr_in *bindnet, struct sockaddr_in *bound_to);
|
||||
static int gmi_build_sockets (struct sockaddr_in *sockaddr_mcast,
|
||||
struct sockaddr_in *sockaddr_bindnet,
|
||||
int *fd_mcast,
|
||||
@ -726,8 +726,7 @@ printf ("CALCULATED TOTAL is %d\n", calced_total);
|
||||
}
|
||||
|
||||
static int netif_determine (struct sockaddr_in *bindnet,
|
||||
struct sockaddr_in *bound_to,
|
||||
char *ifname)
|
||||
struct sockaddr_in *bound_to)
|
||||
{
|
||||
struct sockaddr_in *sockaddr_in;
|
||||
int id_fd;
|
||||
@ -766,8 +765,6 @@ static int netif_determine (struct sockaddr_in *bindnet,
|
||||
(bindnet->sin_addr.s_addr & mask_addr)) {
|
||||
|
||||
bound_to->sin_addr.s_addr = sockaddr_in->sin_addr.s_addr;
|
||||
|
||||
strcpy (ifname, ifc.ifc_ifcu.ifcu_req[i].ifr_ifrn.ifrn_name);
|
||||
res = i;
|
||||
break; /* for */
|
||||
}
|
||||
@ -787,18 +784,16 @@ static int gmi_build_sockets (struct sockaddr_in *sockaddr_mcast,
|
||||
struct ip_mreq mreq;
|
||||
struct sockaddr_in sockaddr_in;
|
||||
char flag;
|
||||
struct ifreq interface;
|
||||
int res;
|
||||
|
||||
memset (&mreq, 0, sizeof (struct ip_mreq));
|
||||
memset (&interface, 0, sizeof (struct ifreq));
|
||||
|
||||
/*
|
||||
* Determine the ip address bound to and the interface name
|
||||
*/
|
||||
res = netif_determine (sockaddr_bindnet,
|
||||
bound_to,
|
||||
interface.ifr_ifrn.ifrn_name);
|
||||
bound_to);
|
||||
|
||||
if (res == -1) {
|
||||
return (-1);
|
||||
}
|
||||
@ -817,11 +812,9 @@ static int gmi_build_sockets (struct sockaddr_in *sockaddr_mcast,
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Bind the multicast socket to the correct device (eth0, eth1)
|
||||
*/
|
||||
if (setsockopt(*fd_mcast, SOL_SOCKET, SO_BINDTODEVICE,
|
||||
(char *)&interface, sizeof(interface)) < 0) {
|
||||
if (setsockopt (*fd_mcast, SOL_IP, IP_MULTICAST_IF,
|
||||
&bound_to->sin_addr, sizeof (struct in_addr)) < 0) {
|
||||
|
||||
gmi_log_printf (gmi_log_level_warning, "Could not bind to device for multicast, group messaging may not work properly. (%s)\n", strerror (errno));
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user