]> git.proxmox.com Git - mirror_frr.git/blobdiff - isisd/isis_zebra.c
*: Convert `struct event_master` to `struct event_loop`
[mirror_frr.git] / isisd / isis_zebra.c
index 27e80e25012c234cd01b3ba71fb1d4e717885b3c..8a279558aa719d60ec3ec4796cc26dfea68004cd 100644 (file)
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * IS-IS Rout(e)ing protocol - isis_zebra.c
  *
@@ -5,25 +6,11 @@
  *                           Tampere University of Technology
  *                           Institute of Communications Engineering
  * Copyright (C) 2013-2015   Christian Franke <chris@opensourcerouting.org>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public Licenseas published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; see the file COPYING; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
 #include <zebra.h>
 
-#include "thread.h"
+#include "event.h"
 #include "command.h"
 #include "memory.h"
 #include "log.h"
@@ -38,6 +25,7 @@
 #include "vrf.h"
 #include "libfrr.h"
 #include "bfd.h"
+#include "link_state.h"
 
 #include "isisd/isis_constants.h"
 #include "isisd/isis_common.h"
@@ -747,6 +735,25 @@ static void isis_zebra_connected(struct zclient *zclient)
        bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER, VRF_DEFAULT);
 }
 
+/**
+ * Register / unregister Link State ZAPI Opaque Message
+ *
+ * @param up   True to register, false to unregister
+ *
+ * @return     0 if success, -1 otherwise
+ */
+int isis_zebra_ls_register(bool up)
+{
+       int rc;
+
+       if (up)
+               rc = ls_register(zclient, true);
+       else
+               rc = ls_unregister(zclient, true);
+
+       return rc;
+}
+
 /*
  * opaque messages between processes
  */
@@ -754,6 +761,7 @@ static int isis_opaque_msg_handler(ZAPI_CALLBACK_ARGS)
 {
        struct stream *s;
        struct zapi_opaque_msg info;
+       struct zapi_opaque_reg_info dst;
        struct ldp_igp_sync_if_state state;
        struct ldp_igp_sync_announce announce;
        struct zapi_rlfa_response rlfa;
@@ -764,6 +772,13 @@ static int isis_opaque_msg_handler(ZAPI_CALLBACK_ARGS)
                return -1;
 
        switch (info.type) {
+       case LINK_STATE_SYNC:
+               STREAM_GETC(s, dst.proto);
+               STREAM_GETW(s, dst.instance);
+               STREAM_GETL(s, dst.session_id);
+               dst.type = LINK_STATE_SYNC;
+               ret = isis_te_sync_ted(dst);
+               break;
        case LDP_IGP_SYNC_IF_STATE_UPDATE:
                STREAM_GET(&state, s, sizeof(state));
                ret = isis_ldp_sync_state_update(state);
@@ -813,7 +828,7 @@ static zclient_handler *const isis_handlers[] = {
        [ZEBRA_CLIENT_CLOSE_NOTIFY] = isis_zebra_client_close_notify,
 };
 
-void isis_zebra_init(struct thread_master *master, int instance)
+void isis_zebra_init(struct event_loop *master, int instance)
 {
        /* Initialize asynchronous zclient. */
        zclient = zclient_new(master, &zclient_options_default, isis_handlers,