mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-13 21:10:28 +00:00
pimg: Actually properly create the pim socket per vrf
Create the actual pim socket per vrf. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
1145d0256e
commit
f507c1966e
@ -46,24 +46,19 @@ static void mroute_read_on(struct pim_instance *pim);
|
||||
static int pim_mroute_set(struct pim_instance *pim, int enable)
|
||||
{
|
||||
int err;
|
||||
int opt = enable ? MRT_INIT : MRT_DONE;
|
||||
int opt;
|
||||
socklen_t opt_len = sizeof(opt);
|
||||
long flags;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/*
|
||||
* We need to create the VRF table for the pim mroute_socket
|
||||
*/
|
||||
if (pim->vrf_id != VRF_DEFAULT) {
|
||||
if (pimd_privs.change(ZPRIVS_RAISE))
|
||||
zlog_err(
|
||||
"pim_mroute_socket_enable: could not raise privs, %s",
|
||||
safe_strerror(errno));
|
||||
|
||||
opt = pim->vrf_id;
|
||||
err = setsockopt(pim->mroute_socket, IPPROTO_IP, MRT_TABLE,
|
||||
&opt, opt_len);
|
||||
@ -75,6 +70,22 @@ static int pim_mroute_set(struct pim_instance *pim, int enable)
|
||||
safe_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (pimd_privs.change(ZPRIVS_LOWER))
|
||||
zlog_err(
|
||||
"pim_mroute_socket_enable: could not lower privs, %s",
|
||||
safe_strerror(errno));
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
setsockopt_so_recvbuf(pim->mroute_socket, 1024 * 1024 * 8);
|
||||
|
10
pimd/pimd.c
10
pimd/pimd.c
@ -95,6 +95,7 @@ static int pim_vrf_enable(struct vrf *vrf)
|
||||
{
|
||||
struct pim_instance *pim;
|
||||
|
||||
zlog_debug("%s: for %s", __PRETTY_FUNCTION__, vrf->name);
|
||||
pim = pim_instance_init(vrf);
|
||||
if (pim == NULL) {
|
||||
zlog_err("%s %s: pim class init failure ", __FILE__,
|
||||
@ -233,9 +234,13 @@ static struct pim_instance *pim_instance_init(struct vrf *vrf)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
pim->mroute_socket = -1;
|
||||
pim->send_v6_secondary = 1;
|
||||
|
||||
if (vrf->vrf_id == VRF_DEFAULT)
|
||||
pimg = pim;
|
||||
|
||||
pim_mroute_socket_enable(pim);
|
||||
|
||||
return pim;
|
||||
}
|
||||
|
||||
@ -266,9 +271,6 @@ void pim_init()
|
||||
}
|
||||
qpim_static_route_list->del = (void (*)(void *))pim_static_route_free;
|
||||
|
||||
pim_mroute_socket_enable(pimg);
|
||||
|
||||
|
||||
/*
|
||||
RFC 4601: 4.6.3. Assert Metrics
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user