⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ospf6_hook.c

📁 大名鼎鼎的路由器源码。程序分ZEBRA、OSPFRIP等3个包。程序框架采用一个路由协议一个进程的方式
💻 C
字号:
/* * Copyright (C) 2001 Yasuhiro Ohara * * This file is part of GNU Zebra. * * GNU Zebra is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * GNU Zebra 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 GNU Zebra; see the file COPYING.  If not, write to the  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,  * Boston, MA 02111-1307, USA.   */#include <zebra.h>#include "log.h"#include "memory.h"#include "ospf6_hook.h"struct ospf6_hook_master neighbor_hook;struct ospf6_hook_master interface_hook;struct ospf6_hook_master area_hook;struct ospf6_hook_master top_hook;struct ospf6_hook_master database_hook;struct ospf6_hook_master intra_topology_hook;struct ospf6_hook_master inter_topology_hook;struct ospf6_hook_master route_hook;struct ospf6_hook_master redistribute_hook;static struct ospf6_hook *ospf6_hook_create (){  struct ospf6_hook *new;  new = XMALLOC (MTYPE_OSPF6_OTHER, sizeof (struct ospf6_hook));  if (new == NULL)    return NULL;  memset (new, 0, sizeof (struct ospf6_hook));  return new;}static voidospf6_hook_delete (struct ospf6_hook *hook){  XFREE (MTYPE_OSPF6_OTHER, hook);}static intospf6_hook_issame (struct ospf6_hook *hook1, struct ospf6_hook *hook2){  if (hook1->name && hook2->name &&      strcmp (hook1->name, hook2->name) != 0)    return 0;  if (hook1->hook_add != hook2->hook_add)    return 0;  if (hook1->hook_change != hook2->hook_change)    return 0;  if (hook1->hook_remove != hook2->hook_remove)    return 0;  return 1;}voidospf6_hook_register (struct ospf6_hook *hook,                     struct ospf6_hook_master *master){  struct ospf6_hook *new;  new = ospf6_hook_create ();  if (hook->name)    new->name = strdup (hook->name);  new->hook_add = hook->hook_add;  new->hook_change = hook->hook_change;  new->hook_remove = hook->hook_remove;  new->prev = master->tail;  if (master->tail)    master->tail->next = new;  master->tail = new;  if (! master->head)    master->head = new;  master->count++;  if (IS_OSPF6_DUMP_HOOK)    {      zlog_info ("HOOK: Register hook%s%s%s%s",                 (hook->name ? " " : ""),                 (hook->name ? hook->name : ""),                 (master->name ? " to " : ""),                 (master->name ? master->name : ""));    }}voidospf6_hook_unregister (struct ospf6_hook *req,                       struct ospf6_hook_master *master){  struct ospf6_hook *hook;  for (hook = master->head; hook; hook = hook->next)    {      if (ospf6_hook_issame (hook, req))        break;    }  if (! hook)    return;  if (hook->prev)    hook->prev->next = hook->next;  if (hook->next)    hook->next->prev = hook->prev;  if (master->head == hook)    master->head = hook->next;  if (master->tail == hook)    master->tail = hook->prev;  master->count--;  if (IS_OSPF6_DUMP_HOOK)    {      zlog_info ("HOOK: Unregister hook%s%s%s%s",                 (hook->name ? " " : ""),                 (hook->name ? hook->name : ""),                 (master->name ? " to " : ""),                 (master->name ? master->name : ""));    }  if (hook->name)    free (hook->name);  ospf6_hook_delete (hook);}voidospf6_hook_unregister_all (struct ospf6_hook_master *master){  struct ospf6_hook *hook, *next;  for (hook = master->head; hook; hook = next)    {      next = hook->next;      ospf6_hook_delete (hook);    }  master->head = NULL;  master->tail = NULL;  master->count = 0;}voidospf6_hook_init (){  neighbor_hook.name       =      "Neighbor Hooklist";  interface_hook.name      =     "Interface Hooklist";  area_hook.name           =          "Area Hooklist";  top_hook.name            =           "Top Hooklist";  database_hook.name       =      "Database Hooklist";  intra_topology_hook.name = "IntraTopology Hooklist";  inter_topology_hook.name = "InterTopology Hooklist";  route_hook.name          =         "Route Hooklist";}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -