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