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

📄 ospf6_lsdb.c

📁 zebra测试源代码用于 SOCKET 通信
💻 C
📖 第 1 页 / 共 2 页
字号:
        lsdb = as->lsdb;        break;      default:        zlog_warn ("LSDB: Can't install: scope unknown: %s", new->str);        return;    }  /* whether schedule calculation or not */  old = ospf6_lsdb_lookup_lsdb (new->header->type, new->header->id,                                new->header->adv_router, lsdb);  if (! old || ospf6_lsa_differ (old, new))    need_hook++;  /* log */  if (IS_OSPF6_DUMP_LSDB)    zlog_info ("LSDB: Install: %s %s", new->str,               ((IS_LSA_MAXAGE (new)) ? "(MaxAge)" : ""));  if (old)    ospf6_lsa_lock (old);  ospf6_lsdb_add (new, lsdb);  gettimeofday (&new->installed, NULL);  hook = ospf6_lsdb_hook[ntohs (new->header->type) &                         OSPF6_LSTYPE_CODE_MASK].hook;  if (need_hook && hook)    (*hook) (old, new);  /* old LSA should be freed here */  if (old)    ospf6_lsa_unlock (old);}voidospf6_lsdb_remove_all (struct ospf6_lsdb *lsdb){  struct ospf6_lsdb_node node;  for (ospf6_lsdb_head (&node, lsdb); ! ospf6_lsdb_is_end (&node);       ospf6_lsdb_next (&node))    ospf6_lsdb_remove (node.lsa, lsdb);}voidospf6_lsdb_remove_maxage (struct ospf6_lsdb *lsdb){  struct ospf6_lsdb_node node;  struct ospf6_lsa *lsa;  for (ospf6_lsdb_head (&node, lsdb); ! ospf6_lsdb_is_end (&node);       ospf6_lsdb_next (&node))    {      lsa = node.lsa;      /* contiue if it's not MaxAge */      if (! IS_LSA_MAXAGE (lsa))        continue;      /* continue if it's referenced by some retrans-lists */      if (lsa->lock != 1)        continue;      if (IS_OSPF6_DUMP_LSDB)        zlog_info ("Remove MaxAge LSA: %s", lsa->str);      ospf6_lsdb_remove (lsa, lsdb);    }}/* vty functions */static intospf6_lsdb_match (int flag, u_int16_t type, u_int32_t id,                  u_int32_t adv_router, struct ospf6_lsa *lsa){  if (CHECK_FLAG (flag, OSPF6_LSDB_MATCH_TYPE) &&      lsa->header->type != type)    return 0;  if (CHECK_FLAG (flag, OSPF6_LSDB_MATCH_ID) &&      lsa->header->id != id)    return 0;  if (CHECK_FLAG (flag, OSPF6_LSDB_MATCH_ADV_ROUTER) &&      lsa->header->adv_router != adv_router)    return 0;  return 1;}intshow_ipv6_ospf6_lsdb (struct vty *vty, int argc, char **argv,                      struct ospf6_lsdb *lsdb){  u_int flag;  u_int16_t type = 0;  u_int32_t id, adv_router;  int ret;  struct ospf6_lsdb_node node;  char invalid[32], *invalidp;  int l_argc = argc;  char **l_argv = argv;  flag = 0;  memset (invalid, 0, sizeof (invalid));  invalidp = invalid;  /* chop tail if the words is 'dump' or 'summary' */  if (l_argc > 0 && ! strcmp (l_argv[l_argc - 1], "dump"))    {      SET_FLAG (flag, OSPF6_LSDB_SHOW_DUMP);      l_argc --;    }  else if (l_argc > 0 && ! strcmp (l_argv[l_argc - 1], "detail"))    {      SET_FLAG (flag, OSPF6_LSDB_SHOW_DETAIL);      l_argc --;    }  if (l_argc > 0)    {      SET_FLAG (flag, OSPF6_LSDB_MATCH_TYPE);      if (! strncmp (l_argv[0], "r", 1))        type = htons (OSPF6_LSA_TYPE_ROUTER);      if (! strncmp (l_argv[0], "n", 1))        type = htons (OSPF6_LSA_TYPE_NETWORK);      if (! strncmp (l_argv[0], "a", 1))        type = htons (OSPF6_LSA_TYPE_AS_EXTERNAL);      if (! strcmp (l_argv[0], "intra-prefix"))        type = htons (OSPF6_LSA_TYPE_INTRA_PREFIX);      if (! strcmp (l_argv[0], "inter-router"))        type = htons (OSPF6_LSA_TYPE_INTER_ROUTER);      if (! strcmp (l_argv[0], "inter-prefix"))        type = htons (OSPF6_LSA_TYPE_INTER_PREFIX);      if (! strncmp (l_argv[0], "l", 1))        type = htons (OSPF6_LSA_TYPE_LINK);      if (! strncmp (l_argv[0], "0x", 2) && strlen (l_argv[0]) == 6)        type = htons ((short) strtol (l_argv[0], (char **)NULL, 16));      if (! strncmp (l_argv[0], "*", 1))        UNSET_FLAG (flag, OSPF6_LSDB_MATCH_TYPE);    }  if (l_argc > 1)    {      SET_FLAG (flag, OSPF6_LSDB_MATCH_ID);      if (! strncmp (l_argv[1], "*", 1))        UNSET_FLAG (flag, OSPF6_LSDB_MATCH_ID);      else        {          ret = inet_pton (AF_INET, l_argv[1], &id);          if (ret != 1)            {              id = htonl (strtoul (l_argv[1], &invalidp, 10));              if (invalid[0] != '\0')                {                  vty_out (vty, "Link State ID is not parsable: %s%s",                           l_argv[1], VTY_NEWLINE);                  return CMD_SUCCESS;                }            }        }    }  if (l_argc > 2)    {      SET_FLAG (flag, OSPF6_LSDB_MATCH_ADV_ROUTER);      if (! strncmp (l_argv[2], "*", 1))        UNSET_FLAG (flag, OSPF6_LSDB_MATCH_ADV_ROUTER);      else        {          ret = inet_pton (AF_INET, l_argv[2], &adv_router);          if (ret != 1)            {              adv_router = htonl (strtoul (l_argv[2], &invalidp, 10));              if (invalid[0] != '\0')                {                  vty_out (vty, "Advertising Router is not parsable: %s%s",                           l_argv[2], VTY_NEWLINE);                  return CMD_SUCCESS;                }            }        }    }  if (! CHECK_FLAG (flag, OSPF6_LSDB_SHOW_DETAIL))    ospf6_lsa_show_summary_header (vty);  for (ospf6_lsdb_head (&node, lsdb); ! ospf6_lsdb_is_end (&node);       ospf6_lsdb_next (&node))    {      if (! ospf6_lsdb_match (flag, type, id, adv_router, node.lsa))        continue;      if (CHECK_FLAG (flag, OSPF6_LSDB_SHOW_DUMP))        ospf6_lsa_show_dump (vty, node.lsa);      else if (CHECK_FLAG (flag, OSPF6_LSDB_SHOW_DETAIL))        ospf6_lsa_show (vty, node.lsa);      else        ospf6_lsa_show_summary (vty, node.lsa);    }  return CMD_SUCCESS;}DEFUN (show_ipv6_ospf6_database,       show_ipv6_ospf6_database_cmd,       "show ipv6 ospf6 database",       SHOW_STR       IP6_STR       OSPF6_STR       "LSA Database\n"       ){  struct ospf6_area *o6a;  struct ospf6_interface *o6i;  listnode i, j;  /* call show function for each of LSAs in the LSDBs */  for (i = listhead (ospf6->area_list); i; nextnode (i))    {      o6a = (struct ospf6_area *) getdata (i);      /* LinkLocal LSDBs */      for (j = listhead (o6a->if_list); j; nextnode (j))        {          o6i = (struct ospf6_interface *) getdata (j);          vty_out (vty, "%s", VTY_NEWLINE);          vty_out (vty, "                Interface %s (Area: %s):%s",                   o6i->interface->name, o6a->str, VTY_NEWLINE);          vty_out (vty, "%s", VTY_NEWLINE);          show_ipv6_ospf6_lsdb (vty, argc, argv, o6i->lsdb);        }      /* Area LSDBs */      vty_out (vty, "%s", VTY_NEWLINE);      vty_out (vty, "                Area %s:%s", o6a->str, VTY_NEWLINE);      vty_out (vty, "%s", VTY_NEWLINE);      show_ipv6_ospf6_lsdb (vty, argc, argv, o6a->lsdb);    }  /* AS LSDBs */  vty_out (vty, "%s", VTY_NEWLINE);  vty_out (vty, "                AS:%s", VTY_NEWLINE);  vty_out (vty, "%s", VTY_NEWLINE);  show_ipv6_ospf6_lsdb (vty, argc, argv, ospf6->lsdb);  return CMD_SUCCESS;}ALIAS (show_ipv6_ospf6_database,       show_ipv6_ospf6_database_type_cmd,       "show ipv6 ospf6 database (router|network|as-external|intra-prefix|inter-prefix|inter-router|link|*|HEX|dump|detail)",       SHOW_STR       IP6_STR       OSPF6_STR       "LSA Database\n"       "Router-LSA\n"       "Network-LSA\n"       "AS-External-LSA\n"       "Intra-Area-Prefix-LSA\n"       "Inter-Area-Router-LSA\n"       "Inter-Area-Prefix-LSA\n"       "Link-LSA\n"       "All LS Type\n"       "Specify LS Type by Hex\n"       "Dump raw LSA data in Hex\n"       "show detail of LSAs\n"       );ALIAS (show_ipv6_ospf6_database,       show_ipv6_ospf6_database_type_id_cmd,       "show ipv6 ospf6 database (router|network|as-external|intra-prefix|inter-prefix|inter-router|link|*|HEX) (A.B.C.D|*|dump|detail)",       SHOW_STR       IP6_STR       OSPF6_STR       "LSA Database\n"       "Router-LSA\n"       "Network-LSA\n"       "AS-External-LSA\n"       "Intra-Area-Prefix-LSA\n"       "Inter-Area-Router-LSA\n"       "Inter-Area-Prefix-LSA\n"       "Link-LSA\n"       "All LS Type\n"       "Specify LS Type by Hex\n"       "Link State ID\n"       "All Link State ID\n"       "Dump raw LSA data in Hex\n"       "show detail of LSAs\n"       );ALIAS (show_ipv6_ospf6_database,       show_ipv6_ospf6_database_type_id_adv_router_cmd,       "show ipv6 ospf6 database (router|network|as-external|intra-prefix|inter-prefix|inter-router|link|*|HEX) (A.B.C.D|*) (A.B.C.D|*|dump|detail)",       SHOW_STR       IP6_STR       OSPF6_STR       "LSA Database\n"       "Router-LSA\n"       "Network-LSA\n"       "AS-External-LSA\n"       "Intra-Area-Prefix-LSA\n"       "Inter-Area-Router-LSA\n"       "Inter-Area-Prefix-LSA\n"       "Link-LSA\n"       "All LS Type\n"       "Specify LS Type by Hex\n"       "Link State ID\n"       "All Link State ID\n"       "Advertising Router\n"       "All Advertising Router\n"       "Dump raw LSA data in Hex\n"       "show detail of LSAs\n"       );ALIAS (show_ipv6_ospf6_database,       show_ipv6_ospf6_database_type_id_adv_router_dump_cmd,       "show ipv6 ospf6 database (router|network|as-external|intra-prefix|inter-prefix|inter-router|link|*|HEX) (A.B.C.D|*) (A.B.C.D|*) (dump|detail|)",       SHOW_STR       IP6_STR       OSPF6_STR       "LSA Database\n"       "Router-LSA\n"       "Network-LSA\n"       "AS-External-LSA\n"       "Intra-Area-Prefix-LSA\n"       "Inter-Area-Router-LSA\n"       "Inter-Area-Prefix-LSA\n"       "Link-LSA\n"       "All LS Type\n"       "Specify LS Type by Hex\n"       "Link State ID\n"       "All Link State ID\n"       "Advertising Router\n"       "All Advertising Router\n"       "Dump raw LSA data in Hex\n"       "show detail of LSAs\n"       );voidospf6_lsdb_init (){  install_element (VIEW_NODE, &show_ipv6_ospf6_database_cmd);  install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_cmd);  install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_cmd);  install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_adv_router_cmd);  install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_adv_router_dump_cmd);  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_cmd);  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_cmd);  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_cmd);  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_adv_router_cmd);  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_adv_router_dump_cmd);}

⌨️ 快捷键说明

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