mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-24 22:50:43 +00:00
commit
f2c5e94a67
@ -48,8 +48,8 @@ static void mroute_read_on(struct pim_instance *pim);
|
||||
static int pim_mroute_set(struct pim_instance *pim, int enable)
|
||||
{
|
||||
int err;
|
||||
int opt;
|
||||
socklen_t opt_len = sizeof(opt);
|
||||
int opt, data;
|
||||
socklen_t data_len = sizeof(data);
|
||||
long flags;
|
||||
|
||||
/*
|
||||
@ -58,15 +58,15 @@ static int pim_mroute_set(struct pim_instance *pim, int enable)
|
||||
if (pim->vrf_id != VRF_DEFAULT) {
|
||||
frr_elevate_privs(&pimd_privs) {
|
||||
|
||||
opt = pim->vrf->data.l.table_id;
|
||||
data = pim->vrf->data.l.table_id;
|
||||
err = setsockopt(pim->mroute_socket, IPPROTO_IP,
|
||||
MRT_TABLE,
|
||||
&opt, opt_len);
|
||||
&data, data_len);
|
||||
if (err) {
|
||||
zlog_warn(
|
||||
"%s %s: failure: setsockopt(fd=%d,IPPROTO_IP, MRT_TABLE=%d): errno=%d: %s",
|
||||
__FILE__, __PRETTY_FUNCTION__,
|
||||
pim->mroute_socket, opt, errno,
|
||||
pim->mroute_socket, data, errno,
|
||||
safe_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
@ -74,23 +74,32 @@ static int pim_mroute_set(struct pim_instance *pim, int enable)
|
||||
}
|
||||
}
|
||||
|
||||
opt = enable ? MRT_INIT : MRT_DONE;
|
||||
err = setsockopt(pim->mroute_socket, IPPROTO_IP, opt, &opt, opt_len);
|
||||
if (err) {
|
||||
zlog_warn(
|
||||
"%s %s: failure: setsockopt(fd=%d,IPPROTO_IP,%s=%d): errno=%d: %s",
|
||||
__FILE__, __PRETTY_FUNCTION__, pim->mroute_socket,
|
||||
enable ? "MRT_INIT" : "MRT_DONE", opt, errno,
|
||||
safe_strerror(errno));
|
||||
return -1;
|
||||
frr_elevate_privs(&pimd_privs) {
|
||||
opt = enable ? MRT_INIT : MRT_DONE;
|
||||
/*
|
||||
* *BSD *cares* about what value we pass down
|
||||
* here
|
||||
*/
|
||||
data = 1;
|
||||
err = setsockopt(pim->mroute_socket, IPPROTO_IP,
|
||||
opt, &data, data_len);
|
||||
if (err) {
|
||||
zlog_warn(
|
||||
"%s %s: failure: setsockopt(fd=%d,IPPROTO_IP,%s=%d): errno=%d: %s",
|
||||
__FILE__, __PRETTY_FUNCTION__,
|
||||
pim->mroute_socket,
|
||||
enable ? "MRT_INIT" : "MRT_DONE", data, errno,
|
||||
safe_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(HAVE_IP_PKTINFO)
|
||||
if (enable) {
|
||||
/* Linux and Solaris IP_PKTINFO */
|
||||
opt = 1;
|
||||
if (setsockopt(pim->mroute_socket, IPPROTO_IP, IP_PKTINFO, &opt,
|
||||
sizeof(opt))) {
|
||||
data = 1;
|
||||
if (setsockopt(pim->mroute_socket, IPPROTO_IP, IP_PKTINFO,
|
||||
&data, data_len)) {
|
||||
zlog_warn(
|
||||
"Could not set IP_PKTINFO on socket fd=%d: errno=%d: %s",
|
||||
pim->mroute_socket, errno,
|
||||
|
Loading…
Reference in New Issue
Block a user