mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-13 22:26:14 +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)
|
static int pim_mroute_set(struct pim_instance *pim, int enable)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
int opt = enable ? MRT_INIT : MRT_DONE;
|
int opt;
|
||||||
socklen_t opt_len = sizeof(opt);
|
socklen_t opt_len = sizeof(opt);
|
||||||
long flags;
|
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
|
* We need to create the VRF table for the pim mroute_socket
|
||||||
*/
|
*/
|
||||||
if (pim->vrf_id != VRF_DEFAULT) {
|
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;
|
opt = pim->vrf_id;
|
||||||
err = setsockopt(pim->mroute_socket, IPPROTO_IP, MRT_TABLE,
|
err = setsockopt(pim->mroute_socket, IPPROTO_IP, MRT_TABLE,
|
||||||
&opt, opt_len);
|
&opt, opt_len);
|
||||||
@ -75,6 +70,22 @@ static int pim_mroute_set(struct pim_instance *pim, int enable)
|
|||||||
safe_strerror(errno));
|
safe_strerror(errno));
|
||||||
return -1;
|
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);
|
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;
|
struct pim_instance *pim;
|
||||||
|
|
||||||
|
zlog_debug("%s: for %s", __PRETTY_FUNCTION__, vrf->name);
|
||||||
pim = pim_instance_init(vrf);
|
pim = pim_instance_init(vrf);
|
||||||
if (pim == NULL) {
|
if (pim == NULL) {
|
||||||
zlog_err("%s %s: pim class init failure ", __FILE__,
|
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;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
pim->mroute_socket = -1;
|
|
||||||
pim->send_v6_secondary = 1;
|
pim->send_v6_secondary = 1;
|
||||||
|
|
||||||
|
if (vrf->vrf_id == VRF_DEFAULT)
|
||||||
|
pimg = pim;
|
||||||
|
|
||||||
|
pim_mroute_socket_enable(pim);
|
||||||
|
|
||||||
return pim;
|
return pim;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -266,9 +271,6 @@ void pim_init()
|
|||||||
}
|
}
|
||||||
qpim_static_route_list->del = (void (*)(void *))pim_static_route_free;
|
qpim_static_route_list->del = (void (*)(void *))pim_static_route_free;
|
||||||
|
|
||||||
pim_mroute_socket_enable(pimg);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
RFC 4601: 4.6.3. Assert Metrics
|
RFC 4601: 4.6.3. Assert Metrics
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user