pim_time_uptime_begin(uptime_scan_oil, sizeof(uptime_scan_oil), now,
qpim_scan_oil_last);
pim_time_uptime_begin(uptime_mroute_add, sizeof(uptime_mroute_add), now,
- qpim_mroute_add_last);
+ pimg->mroute_add_last);
pim_time_uptime_begin(uptime_mroute_del, sizeof(uptime_mroute_del), now,
- qpim_mroute_del_last);
+ pimg->mroute_del_last);
vty_out(vty,
"Scan OIL - Last: %s Events: %lld\n"
"MFC Add - Last: %s Events: %lld\n"
"MFC Del - Last: %s Events: %lld\n",
uptime_scan_oil, (long long)qpim_scan_oil_events,
- uptime_mroute_add, (long long)qpim_mroute_add_events,
- uptime_mroute_del, (long long)qpim_mroute_del_events);
+ uptime_mroute_add, (long long)pimg->mroute_add_events,
+ uptime_mroute_del, (long long)pimg->mroute_del_events);
}
static void pim_show_rpf(struct vty *vty, u_char uj)
memset(&vreq, 0, sizeof(vreq));
vreq.vifi = pim_ifp->mroute_vif_index;
- if (ioctl(qpim_mroute_socket_fd, SIOCGETVIFCNT, &vreq)) {
+ if (ioctl(pimg->mroute_socket, SIOCGETVIFCNT, &vreq)) {
zlog_warn(
"ioctl(SIOCGETVIFCNT=%lu) failure for interface %s vif_index=%d: errno=%d: %s\n",
(unsigned long)SIOCGETVIFCNT, ifp->name,
char uptime[10];
- vty_out(vty, "Mroute socket descriptor: %d\n", qpim_mroute_socket_fd);
+ vty_out(vty, "Mroute socket descriptor: %d\n", pimg->mroute_socket);
pim_time_uptime(uptime, sizeof(uptime),
- now - qpim_mroute_socket_creation);
+ now - pimg->mroute_socket_creation);
vty_out(vty, "Mroute socket uptime: %s\n", uptime);
vty_out(vty, "\n");
static void mroute_read_on()
{
- thread_add_read(master, mroute_read, 0, qpim_mroute_socket_fd,
+ thread_add_read(master, mroute_read, 0, pimg->mroute_socket,
&qpim_mroute_socket_reader);
}
return -3;
}
- qpim_mroute_socket_fd = fd;
+ pimg->mroute_socket = fd;
+ pimg->mroute_socket_creation = pim_time_monotonic_sec();
- qpim_mroute_socket_creation = pim_time_monotonic_sec();
mroute_read_on();
return 0;
int pim_mroute_socket_disable()
{
- if (pim_mroute_set(qpim_mroute_socket_fd, 0)) {
+ if (pim_mroute_set(pimg->mroute_socket, 0)) {
zlog_warn(
"Could not disable mroute on socket fd=%d: errno=%d: %s",
- qpim_mroute_socket_fd, errno, safe_strerror(errno));
+ pimg->mroute_socket, errno, safe_strerror(errno));
return -2;
}
- if (close(qpim_mroute_socket_fd)) {
+ if (close(pimg->mroute_socket)) {
zlog_warn("Failure closing mroute socket: fd=%d errno=%d: %s",
- qpim_mroute_socket_fd, errno, safe_strerror(errno));
+ pimg->mroute_socket, errno, safe_strerror(errno));
return -3;
}
mroute_read_off();
- qpim_mroute_socket_fd = -1;
+ pimg->mroute_socket = -1;
return 0;
}
}
#endif
- err = setsockopt(qpim_mroute_socket_fd, IPPROTO_IP, MRT_ADD_VIF,
+ err = setsockopt(pimg->mroute_socket, IPPROTO_IP, MRT_ADD_VIF,
(void *)&vc, sizeof(vc));
if (err) {
char ifaddr_str[INET_ADDRSTRLEN];
zlog_warn(
"%s %s: failure: setsockopt(fd=%d,IPPROTO_IP,MRT_ADD_VIF,vif_index=%d,ifaddr=%s,flag=%d): errno=%d: %s",
- __FILE__, __PRETTY_FUNCTION__, qpim_mroute_socket_fd,
+ __FILE__, __PRETTY_FUNCTION__, pimg->mroute_socket,
ifp->ifindex, ifaddr_str, flags, errno,
safe_strerror(errno));
return -2;
memset(&vc, 0, sizeof(vc));
vc.vifc_vifi = vif_index;
- err = setsockopt(qpim_mroute_socket_fd, IPPROTO_IP, MRT_DEL_VIF,
+ err = setsockopt(pimg->mroute_socket, IPPROTO_IP, MRT_DEL_VIF,
(void *)&vc, sizeof(vc));
if (err) {
zlog_warn(
"%s %s: failure: setsockopt(fd=%d,IPPROTO_IP,MRT_DEL_VIF,vif_index=%d): errno=%d: %s",
- __FILE__, __PRETTY_FUNCTION__, qpim_mroute_socket_fd,
+ __FILE__, __PRETTY_FUNCTION__, pimg->mroute_socket,
vif_index, errno, safe_strerror(errno));
return -2;
}
int orig = 0;
int orig_iif_vif = 0;
- qpim_mroute_add_last = pim_time_monotonic_sec();
- ++qpim_mroute_add_events;
+ pimg->mroute_add_last = pim_time_monotonic_sec();
+ ++pimg->mroute_add_events;
/* Do not install route if incoming interface is undefined. */
if (c_oil->oil.mfcc_parent >= MAXVIFS) {
orig_iif_vif = c_oil->oil.mfcc_parent;
c_oil->oil.mfcc_parent = 0;
}
- err = setsockopt(qpim_mroute_socket_fd, IPPROTO_IP, MRT_ADD_MFC,
+ err = setsockopt(pimg->mroute_socket, IPPROTO_IP, MRT_ADD_MFC,
&c_oil->oil, sizeof(c_oil->oil));
if (!err && !c_oil->installed
&& c_oil->oil.mfcc_origin.s_addr != INADDR_ANY
&& orig_iif_vif != 0) {
c_oil->oil.mfcc_parent = orig_iif_vif;
- err = setsockopt(qpim_mroute_socket_fd, IPPROTO_IP, MRT_ADD_MFC,
+ err = setsockopt(pimg->mroute_socket, IPPROTO_IP, MRT_ADD_MFC,
&c_oil->oil, sizeof(c_oil->oil));
}
if (err) {
zlog_warn(
"%s %s: failure: setsockopt(fd=%d,IPPROTO_IP,MRT_ADD_MFC): errno=%d: %s",
- __FILE__, __PRETTY_FUNCTION__, qpim_mroute_socket_fd,
+ __FILE__, __PRETTY_FUNCTION__, pimg->mroute_socket,
errno, safe_strerror(errno));
return -2;
}
{
int err;
- qpim_mroute_del_last = pim_time_monotonic_sec();
- ++qpim_mroute_del_events;
+ pimg->mroute_del_last = pim_time_monotonic_sec();
+ ++pimg->mroute_del_events;
if (!c_oil->installed) {
if (PIM_DEBUG_MROUTE) {
return -2;
}
- err = setsockopt(qpim_mroute_socket_fd, IPPROTO_IP, MRT_DEL_MFC,
+ err = setsockopt(pimg->mroute_socket, IPPROTO_IP, MRT_DEL_MFC,
&c_oil->oil, sizeof(c_oil->oil));
if (err) {
if (PIM_DEBUG_MROUTE)
zlog_warn(
"%s %s: failure: setsockopt(fd=%d,IPPROTO_IP,MRT_DEL_MFC): errno=%d: %s",
__FILE__, __PRETTY_FUNCTION__,
- qpim_mroute_socket_fd, errno,
+ pimg->mroute_socket, errno,
safe_strerror(errno));
return -2;
}
sgreq.grp = c_oil->oil.mfcc_mcastgrp;
pim_zlookup_sg_statistics(c_oil);
- if (ioctl(qpim_mroute_socket_fd, SIOCGETSGCNT, &sgreq)) {
+ if (ioctl(pimg->mroute_socket, SIOCGETSGCNT, &sgreq)) {
if (PIM_DEBUG_MROUTE) {
struct prefix_sg sg;
extern struct thread_master *master;
extern struct zebra_privs_t pimd_privs;
uint32_t qpim_debugs;
-int qpim_mroute_socket_fd;
-int64_t qpim_mroute_socket_creation; /* timestamp of creation */
struct in_addr qpim_all_pim_routers_addr;
int qpim_t_periodic; /* Period between Join/Prune Messages */
struct pim_assert_metric qpim_infinite_assert_metric;
struct in_addr qpim_ssmpingd_group_addr;
int64_t qpim_scan_oil_events;
int64_t qpim_scan_oil_last;
-int64_t qpim_mroute_add_events;
-int64_t qpim_mroute_add_last;
-int64_t qpim_mroute_del_events;
-int64_t qpim_mroute_del_last;
int64_t qpim_nexthop_lookups;
struct list *qpim_static_route_list; /* list of routes added statically */
extern unsigned int qpim_keep_alive_time;
void *ssm_info; /* per-vrf SSM configuration */
int send_v6_secondary;
+
+ int mroute_socket;
+ int64_t mroute_socket_creation;
+ int64_t mroute_add_events;
+ int64_t mroute_add_last;
+ int64_t mroute_del_events;
+ int64_t mroute_del_last;
};
extern struct pim_instance *pimg; // Pim Global Instance