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