From: Donald Sharp Date: Wed, 10 May 2017 12:29:52 +0000 (-0400) Subject: pimd: Start conversion of socket and counters for VRF X-Git-Tag: frr-4.0-dev~468^2~151 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=ff673f452527e67f260ec779698044fabe134e79;p=mirror%2Ffrr.git pimd: Start conversion of socket and counters for VRF Convert the socket fd to be owned by the pimg pointer as well as the counters associated with the fd. This will allow us to future proof our code. Signed-off-by: Donald Sharp --- diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index e32643f66f..ff0167de30 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -2555,17 +2555,17 @@ static void show_scan_oil_stats(struct vty *vty, time_t now) 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) @@ -3659,7 +3659,7 @@ static void show_multicast_interfaces(struct vty *vty) 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, @@ -3688,10 +3688,10 @@ DEFUN (show_ip_multicast, 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"); diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c index a3c1100ba7..ad641c2d9c 100644 --- a/pimd/pim_mroute.c +++ b/pimd/pim_mroute.c @@ -655,7 +655,7 @@ done: 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); } @@ -692,9 +692,9 @@ int pim_mroute_socket_enable() 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; @@ -702,21 +702,21 @@ int pim_mroute_socket_enable() 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; } @@ -757,7 +757,7 @@ int pim_mroute_add_vif(struct interface *ifp, struct in_addr ifaddr, } #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]; @@ -767,7 +767,7 @@ int pim_mroute_add_vif(struct interface *ifp, struct in_addr ifaddr, 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; @@ -791,12 +791,12 @@ int pim_mroute_del_vif(int vif_index) 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; } @@ -810,8 +810,8 @@ int pim_mroute_add(struct channel_oil *c_oil, const char *name) 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) { @@ -846,14 +846,14 @@ int pim_mroute_add(struct channel_oil *c_oil, const char *name) 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)); } @@ -863,7 +863,7 @@ int pim_mroute_add(struct channel_oil *c_oil, const char *name) 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; } @@ -882,8 +882,8 @@ int pim_mroute_del(struct channel_oil *c_oil, const char *name) { 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) { @@ -897,14 +897,14 @@ int pim_mroute_del(struct channel_oil *c_oil, const char *name) 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; } @@ -949,7 +949,7 @@ void pim_mroute_update_counters(struct channel_oil *c_oil) 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; diff --git a/pimd/pimd.c b/pimd/pimd.c index 89b235bed1..0db82073af 100644 --- a/pimd/pimd.c +++ b/pimd/pimd.c @@ -52,8 +52,6 @@ const char *const PIM_ALL_IGMP_ROUTERS = MCAST_ALL_IGMP_ROUTERS; struct thread_master *master = NULL; uint32_t qpim_debugs = 0; -int qpim_mroute_socket_fd = -1; -int64_t qpim_mroute_socket_creation = 0; /* timestamp of creation */ int qpim_t_periodic = PIM_DEFAULT_T_PERIODIC; /* Period between Join/Prune Messages */ struct pim_assert_metric qpim_infinite_assert_metric; @@ -66,10 +64,6 @@ struct list *qpim_ssmpingd_list = NULL; struct in_addr qpim_ssmpingd_group_addr; int64_t qpim_scan_oil_events = 0; int64_t qpim_scan_oil_last = 0; -int64_t qpim_mroute_add_events = 0; -int64_t qpim_mroute_add_last = 0; -int64_t qpim_mroute_del_events = 0; -int64_t qpim_mroute_del_last = 0; struct list *qpim_static_route_list = NULL; unsigned int qpim_keep_alive_time = PIM_KEEPALIVE_PERIOD; signed int qpim_rp_keep_alive_time = 0; @@ -114,6 +108,8 @@ static int pim_vrf_enable(struct vrf *vrf) exit(1); } + pimg->mroute_socket = -1; + pimg->send_v6_secondary = 1; } return 0; diff --git a/pimd/pimd.h b/pimd/pimd.h index 7934bce2d4..c2868105da 100644 --- a/pimd/pimd.h +++ b/pimd/pimd.h @@ -128,8 +128,6 @@ const char *const PIM_ALL_IGMP_ROUTERS; 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; @@ -142,10 +140,6 @@ struct list *qpim_ssmpingd_list; /* list of struct ssmpingd_sock */ 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; @@ -256,6 +250,13 @@ struct pim_instance { 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