Merge pull request #3263 from donaldsharp/pim_bsd

Pim bsd
This commit is contained in:
Jafar Al-Gharaibeh 2018-10-31 11:27:56 -05:00 committed by GitHub
commit f2c5e94a67
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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,