]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: Start conversion of socket and counters for VRF
authorDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 10 May 2017 12:29:52 +0000 (08:29 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Mon, 24 Jul 2017 17:51:33 +0000 (13:51 -0400)
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 <sharpd@cumulusnetworks.com>
pimd/pim_cmd.c
pimd/pim_mroute.c
pimd/pimd.c
pimd/pimd.h

index e32643f66f10a511c2c82a1e8b9bc0d1b648e9b5..ff0167de30692363f1e6ac88056802a8d7787efd 100644 (file)
@@ -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");
index a3c1100ba7eaa2d8a5bef59cfde7ee0032dcd3ff..ad641c2d9c7f9624fad3c399b19c7fd41d7bf7e3 100644 (file)
@@ -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;
 
index 89b235bed1e8031e5f43cdc9e6575fe8268599d9..0db82073af125e81c8aa62da58778d6c71896b68 100644 (file)
@@ -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;
index 7934bce2d4f24f413f07d36b74efc549cb2dbdd2..c2868105dac43f8bbe6a03911962b66aa4a061c6 100644 (file)
@@ -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