ospf_vty.c
上传用户:xiaozhuqw
上传日期:2009-11-15
资源大小:1338k
文件大小:217k
源码类别:

网络

开发平台:

Unix_Linux

  1.        SHOW_STR
  2.        IP_STR
  3.        "OSPF informationn"
  4.        "Database summaryn"
  5.        OSPF_LSA_TYPES_DESC
  6.        "Link State ID (as an IP address)n"
  7.        "Advertising Router link statesn"
  8.        "Advertising Router (as an IP address)n");
  9. ALIAS (show_ip_ospf_database,
  10.        show_ip_ospf_database_type_id_self_cmd,
  11.        "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR ") A.B.C.D (self-originate|)",
  12.        SHOW_STR
  13.        IP_STR
  14.        "OSPF informationn"
  15.        "Database summaryn"
  16.        OSPF_LSA_TYPES_DESC
  17.        "Link State ID (as an IP address)n"
  18.        "Self-originated link statesn"
  19.        "n");
  20. DEFUN (show_ip_ospf_database_type_adv_router,
  21.        show_ip_ospf_database_type_adv_router_cmd,
  22.        "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR ") adv-router A.B.C.D",
  23.        SHOW_STR
  24.        IP_STR
  25.        "OSPF informationn"
  26.        "Database summaryn"
  27.        OSPF_LSA_TYPES_DESC
  28.        "Advertising Router link statesn"
  29.        "Advertising Router (as an IP address)n")
  30. {
  31.   struct ospf *ospf;
  32.   int type, ret;
  33.   struct in_addr adv_router;
  34.   ospf = ospf_lookup ();
  35.   if (ospf == NULL)
  36.     return CMD_SUCCESS;
  37.   vty_out (vty, "%s       OSPF Router with ID (%s)%s%s", VTY_NEWLINE,
  38.            inet_ntoa (ospf->router_id), VTY_NEWLINE, VTY_NEWLINE);
  39.   if (argc != 2)
  40.     return CMD_WARNING;
  41.   /* Set database type to show. */
  42.   if (strncmp (argv[0], "r", 1) == 0)
  43.     type = OSPF_ROUTER_LSA;
  44.   else if (strncmp (argv[0], "ne", 2) == 0)
  45.     type = OSPF_NETWORK_LSA;
  46. #ifdef HAVE_NSSA
  47.   else if (strncmp (argv[0], "ns", 2) == 0)
  48.     type = OSPF_AS_NSSA_LSA;
  49. #endif /* HAVE_NSSA */
  50.   else if (strncmp (argv[0], "s", 1) == 0)
  51.     type = OSPF_SUMMARY_LSA;
  52.   else if (strncmp (argv[0], "a", 1) == 0)
  53.     type = OSPF_ASBR_SUMMARY_LSA;
  54.   else if (strncmp (argv[0], "e", 1) == 0)
  55.     type = OSPF_AS_EXTERNAL_LSA;
  56. #ifdef HAVE_OPAQUE_LSA
  57.   else if (strncmp (argv[0], "opaque-l", 8) == 0)
  58.     type = OSPF_OPAQUE_LINK_LSA;
  59.   else if (strncmp (argv[0], "opaque-ar", 9) == 0)
  60.     type = OSPF_OPAQUE_AREA_LSA;
  61.   else if (strncmp (argv[0], "opaque-as", 9) == 0)
  62.     type = OSPF_OPAQUE_AS_LSA;
  63. #endif /* HAVE_OPAQUE_LSA */
  64.   else
  65.     return CMD_WARNING;
  66.   /* `show ip ospf database LSA adv-router ADV_ROUTER'. */
  67.   if (strncmp (argv[1], "s", 1) == 0)
  68.     adv_router = ospf->router_id;
  69.   else
  70.     {
  71.       ret = inet_aton (argv[1], &adv_router);
  72.       if (!ret)
  73. return CMD_WARNING;
  74.     }
  75.   show_lsa_detail_adv_router (vty, ospf, type, &adv_router);
  76.   return CMD_SUCCESS;
  77. }
  78. ALIAS (show_ip_ospf_database_type_adv_router,
  79.        show_ip_ospf_database_type_self_cmd,
  80.        "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR ") (self-originate|)",
  81.        SHOW_STR
  82.        IP_STR
  83.        "OSPF informationn"
  84.        "Database summaryn"
  85.        OSPF_LSA_TYPES_DESC
  86.        "Self-originated link statesn");
  87. DEFUN (ip_ospf_authentication_args,
  88.        ip_ospf_authentication_args_addr_cmd,
  89.        "ip ospf authentication (null|message-digest) A.B.C.D",
  90.        "IP Informationn"
  91.        "OSPF interface commandsn"
  92.        "Enable authentication on this interfacen"
  93.        "Use null authenticationn"
  94.        "Use message-digest authenticationn"
  95.        "Address of interface")
  96. {
  97.   struct interface *ifp;
  98.   struct in_addr addr;
  99.   int ret;
  100.   struct ospf_if_params *params;
  101.   
  102.   ifp = vty->index;
  103.   params = IF_DEF_PARAMS (ifp);
  104.   if (argc == 2)
  105.     {
  106.       ret = inet_aton(argv[1], &addr);
  107.       if (!ret)
  108. {
  109.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  110.    VTY_NEWLINE);
  111.   return CMD_WARNING;
  112. }
  113.       params = ospf_get_if_params (ifp, addr);
  114.       ospf_if_update_params (ifp, addr);
  115.     }
  116.   /* Handle null authentication */
  117.   if ( argv[0][0] == 'n' )
  118.     {
  119.       SET_IF_PARAM (params, auth_type);
  120.       params->auth_type = OSPF_AUTH_NULL;
  121.       return CMD_SUCCESS;
  122.     }
  123.   /* Handle message-digest authentication */
  124.   if ( argv[0][0] == 'm' )
  125.     {
  126.       SET_IF_PARAM (params, auth_type);
  127.       params->auth_type = OSPF_AUTH_CRYPTOGRAPHIC;
  128.       return CMD_SUCCESS;
  129.     }
  130.   vty_out (vty, "You shouldn't get here!%s", VTY_NEWLINE);
  131.   return CMD_WARNING;
  132. }
  133. ALIAS (ip_ospf_authentication_args,
  134.        ip_ospf_authentication_args_cmd,
  135.        "ip ospf authentication (null|message-digest)",
  136.        "IP Informationn"
  137.        "OSPF interface commandsn"
  138.        "Enable authentication on this interfacen"
  139.        "Use null authenticationn"
  140.        "Use message-digest authenticationn");
  141. DEFUN (ip_ospf_authentication,
  142.        ip_ospf_authentication_addr_cmd,
  143.        "ip ospf authentication A.B.C.D",
  144.        "IP Informationn"
  145.        "OSPF interface commandsn"
  146.        "Enable authentication on this interfacen"
  147.        "Address of interface")
  148. {
  149.   struct interface *ifp;
  150.   struct in_addr addr;
  151.   int ret;
  152.   struct ospf_if_params *params;
  153.   
  154.   ifp = vty->index;
  155.   params = IF_DEF_PARAMS (ifp);
  156.   if (argc == 1)
  157.     {
  158.       ret = inet_aton(argv[1], &addr);
  159.       if (!ret)
  160. {
  161.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  162.    VTY_NEWLINE);
  163.   return CMD_WARNING;
  164. }
  165.       params = ospf_get_if_params (ifp, addr);
  166.       ospf_if_update_params (ifp, addr);
  167.     }
  168.   
  169.   SET_IF_PARAM (params, auth_type);
  170.   params->auth_type = OSPF_AUTH_SIMPLE;
  171.   return CMD_SUCCESS;
  172. }
  173. ALIAS (ip_ospf_authentication,
  174.        ip_ospf_authentication_cmd,
  175.        "ip ospf authentication",
  176.        "IP Informationn"
  177.        "OSPF interface commandsn"
  178.        "Enable authentication on this interfacen");
  179. DEFUN (no_ip_ospf_authentication,
  180.        no_ip_ospf_authentication_addr_cmd,
  181.        "no ip ospf authentication A.B.C.D",
  182.        NO_STR
  183.        "IP Informationn"
  184.        "OSPF interface commandsn"
  185.        "Enable authentication on this interfacen"
  186.        "Address of interface")
  187. {
  188.   struct interface *ifp;
  189.   struct in_addr addr;
  190.   int ret;
  191.   struct ospf_if_params *params;
  192.   
  193.   ifp = vty->index;
  194.   params = IF_DEF_PARAMS (ifp);
  195.   if (argc == 1)
  196.     {
  197.       ret = inet_aton(argv[1], &addr);
  198.       if (!ret)
  199. {
  200.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  201.    VTY_NEWLINE);
  202.   return CMD_WARNING;
  203. }
  204.       params = ospf_lookup_if_params (ifp, addr);
  205.       if (params == NULL)
  206. return CMD_SUCCESS;
  207.     }
  208.   params->auth_type = OSPF_AUTH_NOTSET;
  209.   UNSET_IF_PARAM (params, auth_type);
  210.   
  211.   if (params != IF_DEF_PARAMS (ifp))
  212.     {
  213.       ospf_free_if_params (ifp, addr);
  214.       ospf_if_update_params (ifp, addr);
  215.     }
  216.   
  217.   return CMD_SUCCESS;
  218. }
  219. ALIAS (no_ip_ospf_authentication,
  220.        no_ip_ospf_authentication_cmd,
  221.        "no ip ospf authentication",
  222.        NO_STR
  223.        "IP Informationn"
  224.        "OSPF interface commandsn"
  225.        "Enable authentication on this interfacen");
  226. DEFUN (ip_ospf_authentication_key,
  227.        ip_ospf_authentication_key_addr_cmd,
  228.        "ip ospf authentication-key AUTH_KEY A.B.C.D",
  229.        "IP Informationn"
  230.        "OSPF interface commandsn"
  231.        "Authentication password (key)n"
  232.        "The OSPF password (key)n"
  233.        "Address of interface")
  234. {
  235.   struct interface *ifp;
  236.   struct in_addr addr;
  237.   int ret;
  238.   struct ospf_if_params *params;
  239.   
  240.   ifp = vty->index;
  241.   params = IF_DEF_PARAMS (ifp);
  242.   if (argc == 2)
  243.     {
  244.       ret = inet_aton(argv[1], &addr);
  245.       if (!ret)
  246. {
  247.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  248.    VTY_NEWLINE);
  249.   return CMD_WARNING;
  250. }
  251.       params = ospf_get_if_params (ifp, addr);
  252.       ospf_if_update_params (ifp, addr);
  253.     }
  254.   memset (params->auth_simple, 0, OSPF_AUTH_SIMPLE_SIZE + 1);
  255.   strncpy (params->auth_simple, argv[0], OSPF_AUTH_SIMPLE_SIZE);
  256.   SET_IF_PARAM (params, auth_simple);
  257.   return CMD_SUCCESS;
  258. }
  259. ALIAS (ip_ospf_authentication_key,
  260.        ip_ospf_authentication_key_cmd,
  261.        "ip ospf authentication-key AUTH_KEY",
  262.        "IP Informationn"
  263.        "OSPF interface commandsn"
  264.        "Authentication password (key)n"
  265.        "The OSPF password (key)");
  266. ALIAS (ip_ospf_authentication_key,
  267.        ospf_authentication_key_cmd,
  268.        "ospf authentication-key AUTH_KEY",
  269.        "OSPF interface commandsn"
  270.        "Authentication password (key)n"
  271.        "The OSPF password (key)");
  272. DEFUN (no_ip_ospf_authentication_key,
  273.        no_ip_ospf_authentication_key_addr_cmd,
  274.        "no ip ospf authentication-key A.B.C.D",
  275.        NO_STR
  276.        "IP Informationn"
  277.        "OSPF interface commandsn"
  278.        "Authentication password (key)n"
  279.        "Address of interface")
  280. {
  281.   struct interface *ifp;
  282.   struct in_addr addr;
  283.   int ret;
  284.   struct ospf_if_params *params;
  285.   
  286.   ifp = vty->index;
  287.   params = IF_DEF_PARAMS (ifp);
  288.   if (argc == 2)
  289.     {
  290.       ret = inet_aton(argv[1], &addr);
  291.       if (!ret)
  292. {
  293.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  294.    VTY_NEWLINE);
  295.   return CMD_WARNING;
  296. }
  297.       params = ospf_lookup_if_params (ifp, addr);
  298.       if (params == NULL)
  299. return CMD_SUCCESS;
  300.     }
  301.   memset (params->auth_simple, 0, OSPF_AUTH_SIMPLE_SIZE);
  302.   UNSET_IF_PARAM (params, auth_simple);
  303.   
  304.   if (params != IF_DEF_PARAMS (ifp))
  305.     {
  306.       ospf_free_if_params (ifp, addr);
  307.       ospf_if_update_params (ifp, addr);
  308.     }
  309.   
  310.   return CMD_SUCCESS;
  311. }
  312. ALIAS (no_ip_ospf_authentication_key,
  313.        no_ip_ospf_authentication_key_cmd,
  314.        "no ip ospf authentication-key",
  315.        NO_STR
  316.        "IP Informationn"
  317.        "OSPF interface commandsn"
  318.        "Authentication password (key)n");
  319. ALIAS (no_ip_ospf_authentication_key,
  320.        no_ospf_authentication_key_cmd,
  321.        "no ospf authentication-key",
  322.        NO_STR
  323.        "OSPF interface commandsn"
  324.        "Authentication password (key)n");
  325. DEFUN (ip_ospf_message_digest_key,
  326.        ip_ospf_message_digest_key_addr_cmd,
  327.        "ip ospf message-digest-key <1-255> md5 KEY A.B.C.D",
  328.        "IP Informationn"
  329.        "OSPF interface commandsn"
  330.        "Message digest authentication password (key)n"
  331.        "Key IDn"
  332.        "Use MD5 algorithmn"
  333.        "The OSPF password (key)"
  334.        "Address of interface")
  335. {
  336.   struct interface *ifp;
  337.   struct crypt_key *ck;
  338.   u_char key_id;
  339.   struct in_addr addr;
  340.   int ret;
  341.   struct ospf_if_params *params;
  342.   
  343.   ifp = vty->index;
  344.   params = IF_DEF_PARAMS (ifp);
  345.   if (argc == 3)
  346.     {
  347.       ret = inet_aton(argv[2], &addr);
  348.       if (!ret)
  349. {
  350.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  351.    VTY_NEWLINE);
  352.   return CMD_WARNING;
  353. }
  354.       params = ospf_get_if_params (ifp, addr);
  355.       ospf_if_update_params (ifp, addr);
  356.     }
  357.   key_id = strtol (argv[0], NULL, 10);
  358.   if (ospf_crypt_key_lookup (params->auth_crypt, key_id) != NULL)
  359.     {
  360.       vty_out (vty, "OSPF: Key %d already exists%s", key_id, VTY_NEWLINE);
  361.       return CMD_WARNING;
  362.     }
  363.   ck = ospf_crypt_key_new ();
  364.   ck->key_id = (u_char) key_id;
  365.   memset (ck->auth_key, 0, OSPF_AUTH_MD5_SIZE+1);
  366.   strncpy (ck->auth_key, argv[1], OSPF_AUTH_MD5_SIZE);
  367.   ospf_crypt_key_add (params->auth_crypt, ck);
  368.   SET_IF_PARAM (params, auth_crypt);
  369.   
  370.   return CMD_SUCCESS;
  371. }
  372. ALIAS (ip_ospf_message_digest_key,
  373.        ip_ospf_message_digest_key_cmd,
  374.        "ip ospf message-digest-key <1-255> md5 KEY",
  375.        "IP Informationn"
  376.        "OSPF interface commandsn"
  377.        "Message digest authentication password (key)n"
  378.        "Key IDn"
  379.        "Use MD5 algorithmn"
  380.        "The OSPF password (key)");
  381. ALIAS (ip_ospf_message_digest_key,
  382.        ospf_message_digest_key_cmd,
  383.        "ospf message-digest-key <1-255> md5 KEY",
  384.        "OSPF interface commandsn"
  385.        "Message digest authentication password (key)n"
  386.        "Key IDn"
  387.        "Use MD5 algorithmn"
  388.        "The OSPF password (key)");
  389. DEFUN (no_ip_ospf_message_digest_key,
  390.        no_ip_ospf_message_digest_key_addr_cmd,
  391.        "no ip ospf message-digest-key <1-255> A.B.C.D",
  392.        NO_STR
  393.        "IP Informationn"
  394.        "OSPF interface commandsn"
  395.        "Message digest authentication password (key)n"
  396.        "Key IDn"
  397.        "Address of interface")
  398. {
  399.   struct interface *ifp;
  400.   struct crypt_key *ck;
  401.   int key_id;
  402.   struct in_addr addr;
  403.   int ret;
  404.   struct ospf_if_params *params;
  405.   
  406.   ifp = vty->index;
  407.   params = IF_DEF_PARAMS (ifp);
  408.   if (argc == 2)
  409.     {
  410.       ret = inet_aton(argv[1], &addr);
  411.       if (!ret)
  412. {
  413.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  414.    VTY_NEWLINE);
  415.   return CMD_WARNING;
  416. }
  417.       params = ospf_lookup_if_params (ifp, addr);
  418.       if (params == NULL)
  419. return CMD_SUCCESS;
  420.     }
  421.   key_id = strtol (argv[0], NULL, 10);
  422.   ck = ospf_crypt_key_lookup (params->auth_crypt, key_id);
  423.   if (ck == NULL)
  424.     {
  425.       vty_out (vty, "OSPF: Key %d does not exist%s", key_id, VTY_NEWLINE);
  426.       return CMD_WARNING;
  427.     }
  428.   ospf_crypt_key_delete (params->auth_crypt, key_id);
  429.   if (params != IF_DEF_PARAMS (ifp))
  430.     {
  431.       ospf_free_if_params (ifp, addr);
  432.       ospf_if_update_params (ifp, addr);
  433.     }
  434.   
  435.   return CMD_SUCCESS;
  436. }
  437. ALIAS (no_ip_ospf_message_digest_key,
  438.        no_ip_ospf_message_digest_key_cmd,
  439.        "no ip ospf message-digest-key <1-255>",
  440.        NO_STR
  441.        "IP Informationn"
  442.        "OSPF interface commandsn"
  443.        "Message digest authentication password (key)n"
  444.        "Key IDn");
  445.      
  446. ALIAS (no_ip_ospf_message_digest_key,
  447.        no_ospf_message_digest_key_cmd,
  448.        "no ospf message-digest-key <1-255>",
  449.        NO_STR
  450.        "OSPF interface commandsn"
  451.        "Message digest authentication password (key)n"
  452.        "Key IDn");
  453. DEFUN (ip_ospf_cost,
  454.        ip_ospf_cost_addr_cmd,
  455.        "ip ospf cost <1-65535> A.B.C.D",
  456.        "IP Informationn"
  457.        "OSPF interface commandsn"
  458.        "Interface costn"
  459.        "Costn"
  460.        "Address of interface")
  461. {
  462.   struct interface *ifp = vty->index;
  463.   u_int32_t cost;
  464.   struct in_addr addr;
  465.   int ret;
  466.   struct ospf_if_params *params;
  467.       
  468.   params = IF_DEF_PARAMS (ifp);
  469.   cost = strtol (argv[0], NULL, 10);
  470.   /* cost range is <1-65535>. */
  471.   if (cost < 1 || cost > 65535)
  472.     {
  473.       vty_out (vty, "Interface output cost is invalid%s", VTY_NEWLINE);
  474.       return CMD_WARNING;
  475.     }
  476.   if (argc == 2)
  477.     {
  478.       ret = inet_aton(argv[1], &addr);
  479.       if (!ret)
  480. {
  481.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  482.    VTY_NEWLINE);
  483.   return CMD_WARNING;
  484. }
  485.       params = ospf_get_if_params (ifp, addr);
  486.       ospf_if_update_params (ifp, addr);
  487.     }
  488.   SET_IF_PARAM (params, output_cost_cmd);
  489.   params->output_cost_cmd = cost;
  490.   ospf_if_recalculate_output_cost (ifp);
  491.     
  492.   return CMD_SUCCESS;
  493. }
  494. ALIAS (ip_ospf_cost,
  495.        ip_ospf_cost_cmd,
  496.        "ip ospf cost <1-65535>",
  497.        "IP Informationn"
  498.        "OSPF interface commandsn"
  499.        "Interface costn"
  500.        "Cost");
  501. ALIAS (ip_ospf_cost,
  502.        ospf_cost_cmd,
  503.        "ospf cost <1-65535>",
  504.        "OSPF interface commandsn"
  505.        "Interface costn"
  506.        "Cost");
  507. DEFUN (no_ip_ospf_cost,
  508.        no_ip_ospf_cost_addr_cmd,
  509.        "no ip ospf cost A.B.C.D",
  510.        NO_STR
  511.        "IP Informationn"
  512.        "OSPF interface commandsn"
  513.        "Interface costn"
  514.        "Address of interface")
  515. {
  516.   struct interface *ifp = vty->index;
  517.   struct in_addr addr;
  518.   int ret;
  519.   struct ospf_if_params *params;
  520.   
  521.   ifp = vty->index;
  522.   params = IF_DEF_PARAMS (ifp);
  523.   if (argc == 1)
  524.     {
  525.       ret = inet_aton(argv[0], &addr);
  526.       if (!ret)
  527. {
  528.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  529.    VTY_NEWLINE);
  530.   return CMD_WARNING;
  531. }
  532.       params = ospf_lookup_if_params (ifp, addr);
  533.       if (params == NULL)
  534. return CMD_SUCCESS;
  535.     }
  536.   UNSET_IF_PARAM (params, output_cost_cmd);
  537.   if (params != IF_DEF_PARAMS (ifp))
  538.     {
  539.       ospf_free_if_params (ifp, addr);
  540.       ospf_if_update_params (ifp, addr);
  541.     }
  542.   ospf_if_recalculate_output_cost (ifp);
  543.   
  544.   return CMD_SUCCESS;
  545. }
  546. ALIAS (no_ip_ospf_cost,
  547.        no_ip_ospf_cost_cmd,
  548.        "no ip ospf cost",
  549.        NO_STR
  550.        "IP Informationn"
  551.        "OSPF interface commandsn"
  552.        "Interface costn");
  553. ALIAS (no_ip_ospf_cost,
  554.        no_ospf_cost_cmd,
  555.        "no ospf cost",
  556.        NO_STR
  557.        "OSPF interface commandsn"
  558.        "Interface costn");
  559. void
  560. ospf_nbr_timer_update (struct ospf_interface *oi)
  561. {
  562.   struct route_node *rn;
  563.   struct ospf_neighbor *nbr;
  564.   for (rn = route_top (oi->nbrs); rn; rn = route_next (rn))
  565.     if ((nbr = rn->info))
  566.       {
  567. nbr->v_inactivity = OSPF_IF_PARAM (oi, v_wait);
  568. nbr->v_db_desc = OSPF_IF_PARAM (oi, retransmit_interval);
  569. nbr->v_ls_req = OSPF_IF_PARAM (oi, retransmit_interval);
  570. nbr->v_ls_upd = OSPF_IF_PARAM (oi, retransmit_interval);
  571.       }
  572. }
  573. DEFUN (ip_ospf_dead_interval,
  574.        ip_ospf_dead_interval_addr_cmd,
  575.        "ip ospf dead-interval <1-65535> A.B.C.D",
  576.        "IP Informationn"
  577.        "OSPF interface commandsn"
  578.        "Interval after which a neighbor is declared deadn"
  579.        "Secondsn"
  580.        "Address of interface")
  581. {
  582.   struct interface *ifp = vty->index;
  583.   u_int32_t seconds;
  584.   struct in_addr addr;
  585.   int ret;
  586.   struct ospf_if_params *params;
  587.   struct ospf_interface *oi;
  588.   struct route_node *rn;
  589.   struct ospf *ospf;
  590.       
  591.   ospf = ospf_lookup ();
  592.   params = IF_DEF_PARAMS (ifp);
  593.   seconds = strtol (argv[0], NULL, 10);
  594.   /* dead_interval range is <1-65535>. */
  595.   if (seconds < 1 || seconds > 65535)
  596.     {
  597.       vty_out (vty, "Router Dead Interval is invalid%s", VTY_NEWLINE);
  598.       return CMD_WARNING;
  599.     }
  600.   if (argc == 2)
  601.     {
  602.       ret = inet_aton(argv[1], &addr);
  603.       if (!ret)
  604. {
  605.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  606.    VTY_NEWLINE);
  607.   return CMD_WARNING;
  608. }
  609.       params = ospf_get_if_params (ifp, addr);
  610.       ospf_if_update_params (ifp, addr);
  611.     }
  612.   SET_IF_PARAM (params, v_wait);
  613.   params->v_wait = seconds;
  614.   
  615.   /* Update timer values in neighbor structure. */
  616.   if (argc == 2)
  617.     {
  618.       if (ospf)
  619. {
  620.   oi = ospf_if_lookup_by_local_addr (ospf, ifp, addr);
  621.   if (oi)
  622.     ospf_nbr_timer_update (oi);
  623. }
  624.     }
  625.   else
  626.     {
  627.       for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
  628. if ((oi = rn->info))
  629.   ospf_nbr_timer_update (oi);
  630.     }
  631.   return CMD_SUCCESS;
  632. }
  633. ALIAS (ip_ospf_dead_interval,
  634.        ip_ospf_dead_interval_cmd,
  635.        "ip ospf dead-interval <1-65535>",
  636.        "IP Informationn"
  637.        "OSPF interface commandsn"
  638.        "Interval after which a neighbor is declared deadn"
  639.        "Secondsn");
  640. ALIAS (ip_ospf_dead_interval,
  641.        ospf_dead_interval_cmd,
  642.        "ospf dead-interval <1-65535>",
  643.        "OSPF interface commandsn"
  644.        "Interval after which a neighbor is declared deadn"
  645.        "Secondsn");
  646. DEFUN (no_ip_ospf_dead_interval,
  647.        no_ip_ospf_dead_interval_addr_cmd,
  648.        "no ip ospf dead-interval A.B.C.D",
  649.        NO_STR
  650.        "IP Informationn"
  651.        "OSPF interface commandsn"
  652.        "Interval after which a neighbor is declared deadn"
  653.        "Address of interface")
  654. {
  655.   struct interface *ifp = vty->index;
  656.   struct in_addr addr;
  657.   int ret;
  658.   struct ospf_if_params *params;
  659.   struct ospf_interface *oi;
  660.   struct route_node *rn;
  661.   struct ospf *ospf;
  662.   
  663.   ospf = ospf_lookup ();
  664.   ifp = vty->index;
  665.   params = IF_DEF_PARAMS (ifp);
  666.   if (argc == 1)
  667.     {
  668.       ret = inet_aton(argv[0], &addr);
  669.       if (!ret)
  670. {
  671.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  672.    VTY_NEWLINE);
  673.   return CMD_WARNING;
  674. }
  675.       params = ospf_lookup_if_params (ifp, addr);
  676.       if (params == NULL)
  677. return CMD_SUCCESS;
  678.     }
  679.   UNSET_IF_PARAM (params, v_wait);
  680.   params->v_wait = OSPF_ROUTER_DEAD_INTERVAL_DEFAULT;
  681.   if (params != IF_DEF_PARAMS (ifp))
  682.     {
  683.       ospf_free_if_params (ifp, addr);
  684.       ospf_if_update_params (ifp, addr);
  685.     }
  686.   /* Update timer values in neighbor structure. */
  687.   if (argc == 1)
  688.     {
  689.       if (ospf)
  690. {
  691.   oi = ospf_if_lookup_by_local_addr (ospf, ifp, addr);
  692.   if (oi)
  693.     ospf_nbr_timer_update (oi);
  694. }
  695.     }
  696.   else
  697.     {
  698.       for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
  699. if ((oi = rn->info))
  700.   ospf_nbr_timer_update (oi);
  701.     }
  702.   return CMD_SUCCESS;
  703. }
  704. ALIAS (no_ip_ospf_dead_interval,
  705.        no_ip_ospf_dead_interval_cmd,
  706.        "no ip ospf dead-interval",
  707.        NO_STR
  708.        "IP Informationn"
  709.        "OSPF interface commandsn"
  710.        "Interval after which a neighbor is declared deadn");
  711. ALIAS (no_ip_ospf_dead_interval,
  712.        no_ospf_dead_interval_cmd,
  713.        "no ospf dead-interval",
  714.        NO_STR
  715.        "OSPF interface commandsn"
  716.        "Interval after which a neighbor is declared deadn");
  717. DEFUN (ip_ospf_hello_interval,
  718.        ip_ospf_hello_interval_addr_cmd,
  719.        "ip ospf hello-interval <1-65535> A.B.C.D",
  720.        "IP Informationn"
  721.        "OSPF interface commandsn"
  722.        "Time between HELLO packetsn"
  723.        "Secondsn"
  724.        "Address of interface")
  725. {
  726.   struct interface *ifp = vty->index;
  727.   u_int32_t seconds;
  728.   struct in_addr addr;
  729.   int ret;
  730.   struct ospf_if_params *params;
  731.       
  732.   params = IF_DEF_PARAMS (ifp);
  733.   seconds = strtol (argv[0], NULL, 10);
  734.   
  735.   /* HelloInterval range is <1-65535>. */
  736.   if (seconds < 1 || seconds > 65535)
  737.     {
  738.       vty_out (vty, "Hello Interval is invalid%s", VTY_NEWLINE);
  739.       return CMD_WARNING;
  740.     }
  741.   if (argc == 2)
  742.     {
  743.       ret = inet_aton(argv[1], &addr);
  744.       if (!ret)
  745. {
  746.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  747.    VTY_NEWLINE);
  748.   return CMD_WARNING;
  749. }
  750.       params = ospf_get_if_params (ifp, addr);
  751.       ospf_if_update_params (ifp, addr);
  752.     }
  753.   SET_IF_PARAM (params, v_hello); 
  754.   params->v_hello = seconds;
  755.   return CMD_SUCCESS;
  756. }
  757. ALIAS (ip_ospf_hello_interval,
  758.        ip_ospf_hello_interval_cmd,
  759.        "ip ospf hello-interval <1-65535>",
  760.        "IP Informationn"
  761.        "OSPF interface commandsn"
  762.        "Time between HELLO packetsn"
  763.        "Secondsn");
  764. ALIAS (ip_ospf_hello_interval,
  765.        ospf_hello_interval_cmd,
  766.        "ospf hello-interval <1-65535>",
  767.        "OSPF interface commandsn"
  768.        "Time between HELLO packetsn"
  769.        "Secondsn");
  770. DEFUN (no_ip_ospf_hello_interval,
  771.        no_ip_ospf_hello_interval_addr_cmd,
  772.        "no ip ospf hello-interval A.B.C.D",
  773.        NO_STR
  774.        "IP Informationn"
  775.        "OSPF interface commandsn"
  776.        "Time between HELLO packetsn"
  777.        "Address of interface")
  778. {
  779.   struct interface *ifp = vty->index;
  780.   struct in_addr addr;
  781.   int ret;
  782.   struct ospf_if_params *params;
  783.   
  784.   ifp = vty->index;
  785.   params = IF_DEF_PARAMS (ifp);
  786.   if (argc == 1)
  787.     {
  788.       ret = inet_aton(argv[0], &addr);
  789.       if (!ret)
  790. {
  791.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  792.    VTY_NEWLINE);
  793.   return CMD_WARNING;
  794. }
  795.       params = ospf_lookup_if_params (ifp, addr);
  796.       if (params == NULL)
  797. return CMD_SUCCESS;
  798.     }
  799.   UNSET_IF_PARAM (params, v_hello);
  800.   params->v_hello = OSPF_ROUTER_DEAD_INTERVAL_DEFAULT;
  801.   if (params != IF_DEF_PARAMS (ifp))
  802.     {
  803.       ospf_free_if_params (ifp, addr);
  804.       ospf_if_update_params (ifp, addr);
  805.     }
  806.   return CMD_SUCCESS;
  807. }
  808. ALIAS (no_ip_ospf_hello_interval,
  809.        no_ip_ospf_hello_interval_cmd,
  810.        "no ip ospf hello-interval",
  811.        NO_STR
  812.        "IP Informationn"
  813.        "OSPF interface commandsn"
  814.        "Time between HELLO packetsn");
  815. ALIAS (no_ip_ospf_hello_interval,
  816.        no_ospf_hello_interval_cmd,
  817.        "no ospf hello-interval",
  818.        NO_STR
  819.        "OSPF interface commandsn"
  820.        "Time between HELLO packetsn");
  821. DEFUN (ip_ospf_network,
  822.        ip_ospf_network_cmd,
  823.        "ip ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
  824.        "IP Informationn"
  825.        "OSPF interface commandsn"
  826.        "Network typen"
  827.        "Specify OSPF broadcast multi-access networkn"
  828.        "Specify OSPF NBMA networkn"
  829.        "Specify OSPF point-to-multipoint networkn"
  830.        "Specify OSPF point-to-point networkn")
  831. {
  832.   struct interface *ifp = vty->index;
  833.   int old_type = IF_DEF_PARAMS (ifp)->type;
  834.   struct route_node *rn;
  835.   
  836.   if (strncmp (argv[0], "b", 1) == 0)
  837.     IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_BROADCAST;
  838.   else if (strncmp (argv[0], "n", 1) == 0)
  839.     IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_NBMA;
  840.   else if (strncmp (argv[0], "point-to-m", 10) == 0)
  841.     IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_POINTOMULTIPOINT;
  842.   else if (strncmp (argv[0], "point-to-p", 10) == 0)
  843.     IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_POINTOPOINT;
  844.   if (IF_DEF_PARAMS (ifp)->type == old_type)
  845.     return CMD_SUCCESS;
  846.   SET_IF_PARAM (IF_DEF_PARAMS (ifp), type);
  847.   for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
  848.     {
  849.       struct ospf_interface *oi = rn->info;
  850.       if (!oi)
  851. continue;
  852.       
  853.       oi->type = IF_DEF_PARAMS (ifp)->type;
  854.       
  855.       if (oi->state > ISM_Down)
  856. {
  857.   OSPF_ISM_EVENT_EXECUTE (oi, ISM_InterfaceDown);
  858.   OSPF_ISM_EVENT_EXECUTE (oi, ISM_InterfaceUp);
  859. }
  860.     }
  861.   return CMD_SUCCESS;
  862. }
  863. ALIAS (ip_ospf_network,
  864.        ospf_network_cmd,
  865.        "ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
  866.        "OSPF interface commandsn"
  867.        "Network typen"
  868.        "Specify OSPF broadcast multi-access networkn"
  869.        "Specify OSPF NBMA networkn"
  870.        "Specify OSPF point-to-multipoint networkn"
  871.        "Specify OSPF point-to-point networkn");
  872. DEFUN (no_ip_ospf_network,
  873.        no_ip_ospf_network_cmd,
  874.        "no ip ospf network",
  875.        NO_STR
  876.        "IP Informationn"
  877.        "OSPF interface commandsn"
  878.        "Network typen")
  879. {
  880.   struct interface *ifp = vty->index;
  881.   int old_type = IF_DEF_PARAMS (ifp)->type;
  882.   struct route_node *rn;
  883.   IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_BROADCAST;
  884.   if (IF_DEF_PARAMS (ifp)->type == old_type)
  885.     return CMD_SUCCESS;
  886.   for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
  887.     {
  888.       struct ospf_interface *oi = rn->info;
  889.       if (!oi)
  890. continue;
  891.       
  892.       oi->type = IF_DEF_PARAMS (ifp)->type;
  893.       
  894.       if (oi->state > ISM_Down)
  895. {
  896.   OSPF_ISM_EVENT_EXECUTE (oi, ISM_InterfaceDown);
  897.   OSPF_ISM_EVENT_EXECUTE (oi, ISM_InterfaceUp);
  898. }
  899.     }
  900.   return CMD_SUCCESS;
  901. }
  902. ALIAS (no_ip_ospf_network,
  903.        no_ospf_network_cmd,
  904.        "no ospf network",
  905.        NO_STR
  906.        "OSPF interface commandsn"
  907.        "Network typen");
  908. DEFUN (ip_ospf_priority,
  909.        ip_ospf_priority_addr_cmd,
  910.        "ip ospf priority <0-255> A.B.C.D",
  911.        "IP Informationn"
  912.        "OSPF interface commandsn"
  913.        "Router priorityn"
  914.        "Priorityn"
  915.        "Address of interface")
  916. {
  917.   struct interface *ifp = vty->index;
  918.   u_int32_t priority;
  919.   struct route_node *rn;
  920.   struct in_addr addr;
  921.   int ret;
  922.   struct ospf_if_params *params;
  923.       
  924.   params = IF_DEF_PARAMS (ifp);
  925.   priority = strtol (argv[0], NULL, 10);
  926.   
  927.   /* Router Priority range is <0-255>. */
  928.   if (priority < 0 || priority > 255)
  929.     {
  930.       vty_out (vty, "Router Priority is invalid%s", VTY_NEWLINE);
  931.       return CMD_WARNING;
  932.     }
  933.   if (argc == 2)
  934.     {
  935.       ret = inet_aton(argv[1], &addr);
  936.       if (!ret)
  937. {
  938.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  939.    VTY_NEWLINE);
  940.   return CMD_WARNING;
  941. }
  942.       params = ospf_get_if_params (ifp, addr);
  943.       ospf_if_update_params (ifp, addr);
  944.     }
  945.   
  946.   SET_IF_PARAM (params, priority);
  947.   params->priority = priority;
  948.   for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
  949.     {
  950.       struct ospf_interface *oi = rn->info;
  951.       
  952.       if (!oi)
  953. continue;
  954.       
  955.       if (PRIORITY (oi) != OSPF_IF_PARAM (oi, priority))
  956. {
  957.   PRIORITY (oi) = OSPF_IF_PARAM (oi, priority);
  958.   OSPF_ISM_EVENT_SCHEDULE (oi, ISM_NeighborChange);
  959. }
  960.     }
  961.   
  962.   return CMD_SUCCESS;
  963. }
  964. ALIAS (ip_ospf_priority,
  965.        ip_ospf_priority_cmd,
  966.        "ip ospf priority <0-255>",
  967.        "IP Informationn"
  968.        "OSPF interface commandsn"
  969.        "Router priorityn"
  970.        "Priorityn");
  971. ALIAS (ip_ospf_priority,
  972.        ospf_priority_cmd,
  973.        "ospf priority <0-255>",
  974.        "OSPF interface commandsn"
  975.        "Router priorityn"
  976.        "Priorityn");
  977. DEFUN (no_ip_ospf_priority,
  978.        no_ip_ospf_priority_addr_cmd,
  979.        "no ip ospf priority A.B.C.D",
  980.        NO_STR
  981.        "IP Informationn"
  982.        "OSPF interface commandsn"
  983.        "Router priorityn"
  984.        "Address of interface")
  985. {
  986.   struct interface *ifp = vty->index;
  987.   struct route_node *rn;
  988.   struct in_addr addr;
  989.   int ret;
  990.   struct ospf_if_params *params;
  991.   
  992.   ifp = vty->index;
  993.   params = IF_DEF_PARAMS (ifp);
  994.   if (argc == 1)
  995.     {
  996.       ret = inet_aton(argv[0], &addr);
  997.       if (!ret)
  998. {
  999.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  1000.    VTY_NEWLINE);
  1001.   return CMD_WARNING;
  1002. }
  1003.       params = ospf_lookup_if_params (ifp, addr);
  1004.       if (params == NULL)
  1005. return CMD_SUCCESS;
  1006.     }
  1007.   UNSET_IF_PARAM (params, priority);
  1008.   params->priority = OSPF_ROUTER_PRIORITY_DEFAULT;
  1009.   if (params != IF_DEF_PARAMS (ifp))
  1010.     {
  1011.       ospf_free_if_params (ifp, addr);
  1012.       ospf_if_update_params (ifp, addr);
  1013.     }
  1014.   
  1015.   for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
  1016.     {
  1017.       struct ospf_interface *oi = rn->info;
  1018.       
  1019.       if (!oi)
  1020. continue;
  1021.       
  1022.       
  1023.       if (PRIORITY (oi) != OSPF_IF_PARAM (oi, priority))
  1024. {
  1025.   PRIORITY (oi) = OSPF_IF_PARAM (oi, priority);
  1026.   OSPF_ISM_EVENT_SCHEDULE (oi, ISM_NeighborChange);
  1027. }
  1028.     }
  1029.   
  1030.   return CMD_SUCCESS;
  1031. }
  1032. ALIAS (no_ip_ospf_priority,
  1033.        no_ip_ospf_priority_cmd,
  1034.        "no ip ospf priority",
  1035.        NO_STR
  1036.        "IP Informationn"
  1037.        "OSPF interface commandsn"
  1038.        "Router priorityn");
  1039. ALIAS (no_ip_ospf_priority,
  1040.        no_ospf_priority_cmd,
  1041.        "no ospf priority",
  1042.        NO_STR
  1043.        "OSPF interface commandsn"
  1044.        "Router priorityn");
  1045. DEFUN (ip_ospf_retransmit_interval,
  1046.        ip_ospf_retransmit_interval_addr_cmd,
  1047.        "ip ospf retransmit-interval <3-65535> A.B.C.D",
  1048.        "IP Informationn"
  1049.        "OSPF interface commandsn"
  1050.        "Time between retransmitting lost link state advertisementsn"
  1051.        "Secondsn"
  1052.        "Address of interface")
  1053. {
  1054.   struct interface *ifp = vty->index;
  1055.   u_int32_t seconds;
  1056.   struct in_addr addr;
  1057.   int ret;
  1058.   struct ospf_if_params *params;
  1059.       
  1060.   params = IF_DEF_PARAMS (ifp);
  1061.   seconds = strtol (argv[0], NULL, 10);
  1062.   /* Retransmit Interval range is <3-65535>. */
  1063.   if (seconds < 3 || seconds > 65535)
  1064.     {
  1065.       vty_out (vty, "Retransmit Interval is invalid%s", VTY_NEWLINE);
  1066.       return CMD_WARNING;
  1067.     }
  1068.   if (argc == 2)
  1069.     {
  1070.       ret = inet_aton(argv[1], &addr);
  1071.       if (!ret)
  1072. {
  1073.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  1074.    VTY_NEWLINE);
  1075.   return CMD_WARNING;
  1076. }
  1077.       params = ospf_get_if_params (ifp, addr);
  1078.       ospf_if_update_params (ifp, addr);
  1079.     }
  1080.   SET_IF_PARAM (params, retransmit_interval);
  1081.   params->retransmit_interval = seconds;
  1082.   return CMD_SUCCESS;
  1083. }
  1084. ALIAS (ip_ospf_retransmit_interval,
  1085.        ip_ospf_retransmit_interval_cmd,
  1086.        "ip ospf retransmit-interval <3-65535>",
  1087.        "IP Informationn"
  1088.        "OSPF interface commandsn"
  1089.        "Time between retransmitting lost link state advertisementsn"
  1090.        "Secondsn");
  1091. ALIAS (ip_ospf_retransmit_interval,
  1092.        ospf_retransmit_interval_cmd,
  1093.        "ospf retransmit-interval <3-65535>",
  1094.        "OSPF interface commandsn"
  1095.        "Time between retransmitting lost link state advertisementsn"
  1096.        "Secondsn");
  1097. DEFUN (no_ip_ospf_retransmit_interval,
  1098.        no_ip_ospf_retransmit_interval_addr_cmd,
  1099.        "no ip ospf retransmit-interval A.B.C.D",
  1100.        NO_STR
  1101.        "IP Informationn"
  1102.        "OSPF interface commandsn"
  1103.        "Time between retransmitting lost link state advertisementsn"
  1104.        "Address of interface")
  1105. {
  1106.   struct interface *ifp = vty->index;
  1107.   struct in_addr addr;
  1108.   int ret;
  1109.   struct ospf_if_params *params;
  1110.   
  1111.   ifp = vty->index;
  1112.   params = IF_DEF_PARAMS (ifp);
  1113.   if (argc == 1)
  1114.     {
  1115.       ret = inet_aton(argv[0], &addr);
  1116.       if (!ret)
  1117. {
  1118.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  1119.    VTY_NEWLINE);
  1120.   return CMD_WARNING;
  1121. }
  1122.       params = ospf_lookup_if_params (ifp, addr);
  1123.       if (params == NULL)
  1124. return CMD_SUCCESS;
  1125.     }
  1126.   UNSET_IF_PARAM (params, retransmit_interval);
  1127.   params->retransmit_interval = OSPF_RETRANSMIT_INTERVAL_DEFAULT;
  1128.   if (params != IF_DEF_PARAMS (ifp))
  1129.     {
  1130.       ospf_free_if_params (ifp, addr);
  1131.       ospf_if_update_params (ifp, addr);
  1132.     }
  1133.   return CMD_SUCCESS;
  1134. }
  1135. ALIAS (no_ip_ospf_retransmit_interval,
  1136.        no_ip_ospf_retransmit_interval_cmd,
  1137.        "no ip ospf retransmit-interval",
  1138.        NO_STR
  1139.        "IP Informationn"
  1140.        "OSPF interface commandsn"
  1141.        "Time between retransmitting lost link state advertisementsn");
  1142. ALIAS (no_ip_ospf_retransmit_interval,
  1143.        no_ospf_retransmit_interval_cmd,
  1144.        "no ospf retransmit-interval",
  1145.        NO_STR
  1146.        "OSPF interface commandsn"
  1147.        "Time between retransmitting lost link state advertisementsn");
  1148. DEFUN (ip_ospf_transmit_delay,
  1149.        ip_ospf_transmit_delay_addr_cmd,
  1150.        "ip ospf transmit-delay <1-65535> A.B.C.D",
  1151.        "IP Informationn"
  1152.        "OSPF interface commandsn"
  1153.        "Link state transmit delayn"
  1154.        "Secondsn"
  1155.        "Address of interface")
  1156. {
  1157.   struct interface *ifp = vty->index;
  1158.   u_int32_t seconds;
  1159.   struct in_addr addr;
  1160.   int ret;
  1161.   struct ospf_if_params *params;
  1162.       
  1163.   params = IF_DEF_PARAMS (ifp);
  1164.   seconds = strtol (argv[0], NULL, 10);
  1165.   /* Transmit Delay range is <1-65535>. */
  1166.   if (seconds < 1 || seconds > 65535)
  1167.     {
  1168.       vty_out (vty, "Transmit Delay is invalid%s", VTY_NEWLINE);
  1169.       return CMD_WARNING;
  1170.     }
  1171.   if (argc == 2)
  1172.     {
  1173.       ret = inet_aton(argv[1], &addr);
  1174.       if (!ret)
  1175. {
  1176.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  1177.    VTY_NEWLINE);
  1178.   return CMD_WARNING;
  1179. }
  1180.       params = ospf_get_if_params (ifp, addr);
  1181.       ospf_if_update_params (ifp, addr);
  1182.     }
  1183.   SET_IF_PARAM (params, transmit_delay); 
  1184.   params->transmit_delay = seconds;
  1185.   return CMD_SUCCESS;
  1186. }
  1187. ALIAS (ip_ospf_transmit_delay,
  1188.        ip_ospf_transmit_delay_cmd,
  1189.        "ip ospf transmit-delay <1-65535>",
  1190.        "IP Informationn"
  1191.        "OSPF interface commandsn"
  1192.        "Link state transmit delayn"
  1193.        "Secondsn");
  1194. ALIAS (ip_ospf_transmit_delay,
  1195.        ospf_transmit_delay_cmd,
  1196.        "ospf transmit-delay <1-65535>",
  1197.        "OSPF interface commandsn"
  1198.        "Link state transmit delayn"
  1199.        "Secondsn");
  1200. DEFUN (no_ip_ospf_transmit_delay,
  1201.        no_ip_ospf_transmit_delay_addr_cmd,
  1202.        "no ip ospf transmit-delay A.B.C.D",
  1203.        NO_STR
  1204.        "IP Informationn"
  1205.        "OSPF interface commandsn"
  1206.        "Link state transmit delayn"
  1207.        "Address of interface")
  1208. {
  1209.   struct interface *ifp = vty->index;
  1210.   struct in_addr addr;
  1211.   int ret;
  1212.   struct ospf_if_params *params;
  1213.   
  1214.   ifp = vty->index;
  1215.   params = IF_DEF_PARAMS (ifp);
  1216.   if (argc == 1)
  1217.     {
  1218.       ret = inet_aton(argv[0], &addr);
  1219.       if (!ret)
  1220. {
  1221.   vty_out (vty, "Please specify interface address by A.B.C.D%s",
  1222.    VTY_NEWLINE);
  1223.   return CMD_WARNING;
  1224. }
  1225.       params = ospf_lookup_if_params (ifp, addr);
  1226.       if (params == NULL)
  1227. return CMD_SUCCESS;
  1228.     }
  1229.   UNSET_IF_PARAM (params, transmit_delay);
  1230.   params->transmit_delay = OSPF_TRANSMIT_DELAY_DEFAULT;
  1231.   if (params != IF_DEF_PARAMS (ifp))
  1232.     {
  1233.       ospf_free_if_params (ifp, addr);
  1234.       ospf_if_update_params (ifp, addr);
  1235.     }
  1236.   return CMD_SUCCESS;
  1237. }
  1238. ALIAS (no_ip_ospf_transmit_delay,
  1239.        no_ip_ospf_transmit_delay_cmd,
  1240.        "no ip ospf transmit-delay",
  1241.        NO_STR
  1242.        "IP Informationn"
  1243.        "OSPF interface commandsn"
  1244.        "Link state transmit delayn");
  1245. ALIAS (no_ip_ospf_transmit_delay,
  1246.        no_ospf_transmit_delay_cmd,
  1247.        "no ospf transmit-delay",
  1248.        NO_STR
  1249.        "OSPF interface commandsn"
  1250.        "Link state transmit delayn");
  1251. DEFUN (ospf_redistribute_source_metric_type,
  1252.        ospf_redistribute_source_metric_type_routemap_cmd,
  1253.        "redistribute (kernel|connected|static|rip|bgp) metric <0-16777214> metric-type (1|2) route-map WORD",
  1254.        "Redistribute information from another routing protocoln"
  1255.        "Kernel routesn"
  1256.        "Connectedn"
  1257.        "Static routesn"
  1258.        "Routing Information Protocol (RIP)n"
  1259.        "Border Gateway Protocol (BGP)n"
  1260.        "Metric for redistributed routesn"
  1261.        "OSPF default metricn"
  1262.        "OSPF exterior metric type for redistributed routesn"
  1263.        "Set OSPF External Type 1 metricsn"
  1264.        "Set OSPF External Type 2 metricsn"
  1265.        "Route map referencen"
  1266.        "Pointer to route-map entriesn")
  1267. {
  1268.   struct ospf *ospf = vty->index;
  1269.   int source;
  1270.   int type = -1;
  1271.   int metric = -1;
  1272.   /* Get distribute source. */
  1273.   if (!str2distribute_source (argv[0], &source))
  1274.     return CMD_WARNING;
  1275.   /* Get metric value. */
  1276.   if (argc >= 2)
  1277.     if (!str2metric (argv[1], &metric))
  1278.       return CMD_WARNING;
  1279.   /* Get metric type. */
  1280.   if (argc >= 3)
  1281.     if (!str2metric_type (argv[2], &type))
  1282.       return CMD_WARNING;
  1283.   if (argc == 4)
  1284.     ospf_routemap_set (ospf, source, argv[3]);
  1285.   else
  1286.     ospf_routemap_unset (ospf, source);
  1287.   
  1288.   return ospf_redistribute_set (ospf, source, type, metric);
  1289. }
  1290. ALIAS (ospf_redistribute_source_metric_type,
  1291.        ospf_redistribute_source_metric_type_cmd,
  1292.        "redistribute (kernel|connected|static|rip|bgp) metric <0-16777214> metric-type (1|2)",
  1293.        "Redistribute information from another routing protocoln"
  1294.        "Kernel routesn"
  1295.        "Connectedn"
  1296.        "Static routesn"
  1297.        "Routing Information Protocol (RIP)n"
  1298.        "Border Gateway Protocol (BGP)n"
  1299.        "Metric for redistributed routesn"
  1300.        "OSPF default metricn"
  1301.        "OSPF exterior metric type for redistributed routesn"
  1302.        "Set OSPF External Type 1 metricsn"
  1303.        "Set OSPF External Type 2 metricsn");
  1304. ALIAS (ospf_redistribute_source_metric_type,
  1305.        ospf_redistribute_source_metric_cmd,
  1306.        "redistribute (kernel|connected|static|rip|bgp) metric <0-16777214>",
  1307.        "Redistribute information from another routing protocoln"
  1308.        "Kernel routesn"
  1309.        "Connectedn"
  1310.        "Static routesn"
  1311.        "Routing Information Protocol (RIP)n"
  1312.        "Border Gateway Protocol (BGP)n"
  1313.        "Metric for redistributed routesn"
  1314.        "OSPF default metricn");
  1315. DEFUN (ospf_redistribute_source_type_metric,
  1316.        ospf_redistribute_source_type_metric_routemap_cmd,
  1317.        "redistribute (kernel|connected|static|rip|bgp) metric-type (1|2) metric <0-16777214> route-map WORD",
  1318.        "Redistribute information from another routing protocoln"
  1319.        "Kernel routesn"
  1320.        "Connectedn"
  1321.        "Static routesn"
  1322.        "Routing Information Protocol (RIP)n"
  1323.        "Border Gateway Protocol (BGP)n"
  1324.        "OSPF exterior metric type for redistributed routesn"
  1325.        "Set OSPF External Type 1 metricsn"
  1326.        "Set OSPF External Type 2 metricsn"
  1327.        "Metric for redistributed routesn"
  1328.        "OSPF default metricn"
  1329.        "Route map referencen"
  1330.        "Pointer to route-map entriesn")
  1331. {
  1332.   struct ospf *ospf = vty->index;
  1333.   int source;
  1334.   int type = -1;
  1335.   int metric = -1;
  1336.   /* Get distribute source. */
  1337.   if (!str2distribute_source (argv[0], &source))
  1338.     return CMD_WARNING;
  1339.   /* Get metric value. */
  1340.   if (argc >= 2)
  1341.     if (!str2metric_type (argv[1], &type))
  1342.       return CMD_WARNING;
  1343.   /* Get metric type. */
  1344.   if (argc >= 3)
  1345.     if (!str2metric (argv[2], &metric))
  1346.       return CMD_WARNING;
  1347.   if (argc == 4)
  1348.     ospf_routemap_set (ospf, source, argv[3]);
  1349.   else
  1350.     ospf_routemap_unset (ospf, source);
  1351.   return ospf_redistribute_set (ospf, source, type, metric);
  1352. }
  1353. ALIAS (ospf_redistribute_source_type_metric,
  1354.        ospf_redistribute_source_type_metric_cmd,
  1355.        "redistribute (kernel|connected|static|rip|bgp) metric-type (1|2) metric <0-16777214>",
  1356.        "Redistribute information from another routing protocoln"
  1357.        "Kernel routesn"
  1358.        "Connectedn"
  1359.        "Static routesn"
  1360.        "Routing Information Protocol (RIP)n"
  1361.        "Border Gateway Protocol (BGP)n"
  1362.        "OSPF exterior metric type for redistributed routesn"
  1363.        "Set OSPF External Type 1 metricsn"
  1364.        "Set OSPF External Type 2 metricsn"
  1365.        "Metric for redistributed routesn"
  1366.        "OSPF default metricn");
  1367. ALIAS (ospf_redistribute_source_type_metric,
  1368.        ospf_redistribute_source_type_cmd,
  1369.        "redistribute (kernel|connected|static|rip|bgp) metric-type (1|2)",
  1370.        "Redistribute information from another routing protocoln"
  1371.        "Kernel routesn"
  1372.        "Connectedn"
  1373.        "Static routesn"
  1374.        "Routing Information Protocol (RIP)n"
  1375.        "Border Gateway Protocol (BGP)n"
  1376.        "OSPF exterior metric type for redistributed routesn"
  1377.        "Set OSPF External Type 1 metricsn"
  1378.        "Set OSPF External Type 2 metricsn");
  1379. ALIAS (ospf_redistribute_source_type_metric,
  1380.        ospf_redistribute_source_cmd,
  1381.        "redistribute (kernel|connected|static|rip|bgp)",
  1382.        "Redistribute information from another routing protocoln"
  1383.        "Kernel routesn"
  1384.        "Connectedn"
  1385.        "Static routesn"
  1386.        "Routing Information Protocol (RIP)n"
  1387.        "Border Gateway Protocol (BGP)n");
  1388. DEFUN (ospf_redistribute_source_metric_routemap,
  1389.        ospf_redistribute_source_metric_routemap_cmd,
  1390.        "redistribute (kernel|connected|static|rip|bgp) metric <0-16777214> route-map WORD",
  1391.        "Redistribute information from another routing protocoln"
  1392.        "Kernel routesn"
  1393.        "Connectedn"
  1394.        "Static routesn"
  1395.        "Routing Information Protocol (RIP)n"
  1396.        "Border Gateway Protocol (BGP)n"
  1397.        "Metric for redistributed routesn"
  1398.        "OSPF default metricn"
  1399.        "Route map referencen"
  1400.        "Pointer to route-map entriesn")
  1401. {
  1402.   struct ospf *ospf = vty->index;
  1403.   int source;
  1404.   int metric = -1;
  1405.   /* Get distribute source. */
  1406.   if (!str2distribute_source (argv[0], &source))
  1407.     return CMD_WARNING;
  1408.   /* Get metric value. */
  1409.   if (argc >= 2)
  1410.     if (!str2metric (argv[1], &metric))
  1411.       return CMD_WARNING;
  1412.   if (argc == 3)
  1413.     ospf_routemap_set (ospf, source, argv[2]);
  1414.   else
  1415.     ospf_routemap_unset (ospf, source);
  1416.   
  1417.   return ospf_redistribute_set (ospf, source, -1, metric);
  1418. }
  1419. DEFUN (ospf_redistribute_source_type_routemap,
  1420.        ospf_redistribute_source_type_routemap_cmd,
  1421.        "redistribute (kernel|connected|static|rip|bgp) metric-type (1|2) route-map WORD",
  1422.        "Redistribute information from another routing protocoln"
  1423.        "Kernel routesn"
  1424.        "Connectedn"
  1425.        "Static routesn"
  1426.        "Routing Information Protocol (RIP)n"
  1427.        "Border Gateway Protocol (BGP)n"
  1428.        "OSPF exterior metric type for redistributed routesn"
  1429.        "Set OSPF External Type 1 metricsn"
  1430.        "Set OSPF External Type 2 metricsn"
  1431.        "Route map referencen"
  1432.        "Pointer to route-map entriesn")
  1433. {
  1434.   struct ospf *ospf = vty->index;
  1435.   int source;
  1436.   int type = -1;
  1437.   /* Get distribute source. */
  1438.   if (!str2distribute_source (argv[0], &source))
  1439.     return CMD_WARNING;
  1440.   /* Get metric value. */
  1441.   if (argc >= 2)
  1442.     if (!str2metric_type (argv[1], &type))
  1443.       return CMD_WARNING;
  1444.   if (argc == 3)
  1445.     ospf_routemap_set (ospf, source, argv[2]);
  1446.   else
  1447.     ospf_routemap_unset (ospf, source);
  1448.   return ospf_redistribute_set (ospf, source, type, -1);
  1449. }
  1450. DEFUN (ospf_redistribute_source_routemap,
  1451.        ospf_redistribute_source_routemap_cmd,
  1452.        "redistribute (kernel|connected|static|rip|bgp) route-map WORD",
  1453.        "Redistribute information from another routing protocoln"
  1454.        "Kernel routesn"
  1455.        "Connectedn"
  1456.        "Static routesn"
  1457.        "Routing Information Protocol (RIP)n"
  1458.        "Border Gateway Protocol (BGP)n"
  1459.        "Route map referencen"
  1460.        "Pointer to route-map entriesn")
  1461. {
  1462.   struct ospf *ospf = vty->index;
  1463.   int source;
  1464.   /* Get distribute source. */
  1465.   if (!str2distribute_source (argv[0], &source))
  1466.     return CMD_WARNING;
  1467.   if (argc == 2)
  1468.     ospf_routemap_set (ospf, source, argv[1]);
  1469.   else
  1470.     ospf_routemap_unset (ospf, source);
  1471.   return ospf_redistribute_set (ospf, source, -1, -1);
  1472. }
  1473. DEFUN (no_ospf_redistribute_source,
  1474.        no_ospf_redistribute_source_cmd,
  1475.        "no redistribute (kernel|connected|static|rip|bgp)",
  1476.        NO_STR
  1477.        "Redistribute information from another routing protocoln"
  1478.        "Kernel routesn"
  1479.        "Connectedn"
  1480.        "Static routesn"
  1481.        "Routing Information Protocol (RIP)n"
  1482.        "Border Gateway Protocol (BGP)n")
  1483. {
  1484.   struct ospf *ospf = vty->index;
  1485.   int source;
  1486.   if (!str2distribute_source (argv[0], &source))
  1487.     return CMD_WARNING;
  1488.   ospf_routemap_unset (ospf, source);
  1489.   return ospf_redistribute_unset (ospf, source);
  1490. }
  1491. DEFUN (ospf_distribute_list_out,
  1492.        ospf_distribute_list_out_cmd,
  1493.        "distribute-list WORD out (kernel|connected|static|rip|bgp)",
  1494.        "Filter networks in routing updatesn"
  1495.        "Access-list namen"
  1496.        OUT_STR
  1497.        "Kernel routesn"
  1498.        "Connectedn"
  1499.        "Static routesn"
  1500.        "Routing Information Protocol (RIP)n"
  1501.        "Border Gateway Protocol (BGP)n")
  1502. {
  1503.   struct ospf *ospf = vty->index;
  1504.   int source;
  1505.   /* Get distribute source. */
  1506.   if (!str2distribute_source (argv[1], &source))
  1507.     return CMD_WARNING;
  1508.   return ospf_distribute_list_out_set (ospf, source, argv[0]);
  1509. }
  1510. DEFUN (no_ospf_distribute_list_out,
  1511.        no_ospf_distribute_list_out_cmd,
  1512.        "no distribute-list WORD out (kernel|connected|static|rip|bgp)",
  1513.        NO_STR
  1514.        "Filter networks in routing updatesn"
  1515.        "Access-list namen"
  1516.        OUT_STR
  1517.        "Kernel routesn"
  1518.        "Connectedn"
  1519.        "Static routesn"
  1520.        "Routing Information Protocol (RIP)n"
  1521.        "Border Gateway Protocol (BGP)n")
  1522. {
  1523.   struct ospf *ospf = vty->index;
  1524.   int source;
  1525.   if (!str2distribute_source (argv[1], &source))
  1526.     return CMD_WARNING;
  1527.   return ospf_distribute_list_out_unset (ospf, source, argv[0]);
  1528. }
  1529. /* Default information originate. */
  1530. DEFUN (ospf_default_information_originate_metric_type_routemap,
  1531.        ospf_default_information_originate_metric_type_routemap_cmd,
  1532.        "default-information originate metric <0-16777214> metric-type (1|2) route-map WORD",
  1533.        "Control distribution of default informationn"
  1534.        "Distribute a default routen"
  1535.        "OSPF default metricn"
  1536.        "OSPF metricn"
  1537.        "OSPF metric type for default routesn"
  1538.        "Set OSPF External Type 1 metricsn"
  1539.        "Set OSPF External Type 2 metricsn"
  1540.        "Route map referencen"
  1541.        "Pointer to route-map entriesn")
  1542. {
  1543.   struct ospf *ospf = vty->index;
  1544.   int type = -1;
  1545.   int metric = -1;
  1546.   /* Get metric value. */
  1547.   if (argc >= 1)
  1548.     if (!str2metric (argv[0], &metric))
  1549.       return CMD_WARNING;
  1550.   /* Get metric type. */
  1551.   if (argc >= 2)
  1552.     if (!str2metric_type (argv[1], &type))
  1553.       return CMD_WARNING;
  1554.   if (argc == 3)
  1555.     ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[2]);
  1556.   else
  1557.     ospf_routemap_unset (ospf, DEFAULT_ROUTE);
  1558.   return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ZEBRA,
  1559. type, metric);
  1560. }
  1561. ALIAS (ospf_default_information_originate_metric_type_routemap,
  1562.        ospf_default_information_originate_metric_type_cmd,
  1563.        "default-information originate metric <0-16777214> metric-type (1|2)",
  1564.        "Control distribution of default informationn"
  1565.        "Distribute a default routen"
  1566.        "OSPF default metricn"
  1567.        "OSPF metricn"
  1568.        "OSPF metric type for default routesn"
  1569.        "Set OSPF External Type 1 metricsn"
  1570.        "Set OSPF External Type 2 metricsn");
  1571. ALIAS (ospf_default_information_originate_metric_type_routemap,
  1572.        ospf_default_information_originate_metric_cmd,
  1573.        "default-information originate metric <0-16777214>",
  1574.        "Control distribution of default informationn"
  1575.        "Distribute a default routen"
  1576.        "OSPF default metricn"
  1577.        "OSPF metricn");
  1578. ALIAS (ospf_default_information_originate_metric_type_routemap,
  1579.        ospf_default_information_originate_cmd,
  1580.        "default-information originate",
  1581.        "Control distribution of default informationn"
  1582.        "Distribute a default routen");
  1583. /* Default information originate. */
  1584. DEFUN (ospf_default_information_originate_metric_routemap,
  1585.        ospf_default_information_originate_metric_routemap_cmd,
  1586.        "default-information originate metric <0-16777214> route-map WORD",
  1587.        "Control distribution of default informationn"
  1588.        "Distribute a default routen"
  1589.        "OSPF default metricn"
  1590.        "OSPF metricn"
  1591.        "Route map referencen"
  1592.        "Pointer to route-map entriesn")
  1593. {
  1594.   struct ospf *ospf = vty->index;
  1595.   int metric = -1;
  1596.   /* Get metric value. */
  1597.   if (argc >= 1)
  1598.     if (!str2metric (argv[0], &metric))
  1599.       return CMD_WARNING;
  1600.   if (argc == 2)
  1601.     ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[1]);
  1602.   else
  1603.     ospf_routemap_unset (ospf, DEFAULT_ROUTE);
  1604.   return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ZEBRA,
  1605. -1, metric);
  1606. }
  1607. /* Default information originate. */
  1608. DEFUN (ospf_default_information_originate_routemap,
  1609.        ospf_default_information_originate_routemap_cmd,
  1610.        "default-information originate route-map WORD",
  1611.        "Control distribution of default informationn"
  1612.        "Distribute a default routen"
  1613.        "Route map referencen"
  1614.        "Pointer to route-map entriesn")
  1615. {
  1616.   struct ospf *ospf = vty->index;
  1617.   if (argc == 1)
  1618.     ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[0]);
  1619.   else
  1620.     ospf_routemap_unset (ospf, DEFAULT_ROUTE);
  1621.   return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ZEBRA, -1, -1);
  1622. }
  1623. DEFUN (ospf_default_information_originate_type_metric_routemap,
  1624.        ospf_default_information_originate_type_metric_routemap_cmd,
  1625.        "default-information originate metric-type (1|2) metric <0-16777214> route-map WORD",
  1626.        "Control distribution of default informationn"
  1627.        "Distribute a default routen"
  1628.        "OSPF metric type for default routesn"
  1629.        "Set OSPF External Type 1 metricsn"
  1630.        "Set OSPF External Type 2 metricsn"
  1631.        "OSPF default metricn"
  1632.        "OSPF metricn"
  1633.        "Route map referencen"
  1634.        "Pointer to route-map entriesn")
  1635. {
  1636.   struct ospf *ospf = vty->index;
  1637.   int type = -1;
  1638.   int metric = -1;
  1639.   /* Get metric type. */
  1640.   if (argc >= 1)
  1641.     if (!str2metric_type (argv[0], &type))
  1642.       return CMD_WARNING;
  1643.   /* Get metric value. */
  1644.   if (argc >= 2)
  1645.     if (!str2metric (argv[1], &metric))
  1646.       return CMD_WARNING;
  1647.   if (argc == 3)
  1648.     ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[2]);
  1649.   else
  1650.     ospf_routemap_unset (ospf, DEFAULT_ROUTE);
  1651.   return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ZEBRA,
  1652. type, metric);
  1653. }
  1654. ALIAS (ospf_default_information_originate_type_metric_routemap,
  1655.        ospf_default_information_originate_type_metric_cmd,
  1656.        "default-information originate metric-type (1|2) metric <0-16777214>",
  1657.        "Control distribution of default informationn"
  1658.        "Distribute a default routen"
  1659.        "OSPF metric type for default routesn"
  1660.        "Set OSPF External Type 1 metricsn"
  1661.        "Set OSPF External Type 2 metricsn"
  1662.        "OSPF default metricn"
  1663.        "OSPF metricn");
  1664. ALIAS (ospf_default_information_originate_type_metric_routemap,
  1665.        ospf_default_information_originate_type_cmd,
  1666.        "default-information originate metric-type (1|2)",
  1667.        "Control distribution of default informationn"
  1668.        "Distribute a default routen"
  1669.        "OSPF metric type for default routesn"
  1670.        "Set OSPF External Type 1 metricsn"
  1671.        "Set OSPF External Type 2 metricsn");
  1672. DEFUN (ospf_default_information_originate_type_routemap,
  1673.        ospf_default_information_originate_type_routemap_cmd,
  1674.        "default-information originate metric-type (1|2) route-map WORD",
  1675.        "Control distribution of default informationn"
  1676.        "Distribute a default routen"
  1677.        "OSPF metric type for default routesn"
  1678.        "Set OSPF External Type 1 metricsn"
  1679.        "Set OSPF External Type 2 metricsn"
  1680.        "Route map referencen"
  1681.        "Pointer to route-map entriesn")
  1682. {
  1683.   struct ospf *ospf = vty->index;
  1684.   int type = -1;
  1685.   /* Get metric type. */
  1686.   if (argc >= 1)
  1687.     if (!str2metric_type (argv[0], &type))
  1688.       return CMD_WARNING;
  1689.   if (argc == 2)
  1690.     ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[1]);
  1691.   else
  1692.     ospf_routemap_unset (ospf, DEFAULT_ROUTE);
  1693.   return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ZEBRA,
  1694. type, -1);
  1695. }
  1696. DEFUN (ospf_default_information_originate_always_metric_type_routemap,
  1697.        ospf_default_information_originate_always_metric_type_routemap_cmd,
  1698.        "default-information originate always metric <0-16777214> metric-type (1|2) route-map WORD",
  1699.        "Control distribution of default informationn"
  1700.        "Distribute a default routen"
  1701.        "Always advertise default routen"
  1702.        "OSPF default metricn"
  1703.        "OSPF metricn"
  1704.        "OSPF metric type for default routesn"
  1705.        "Set OSPF External Type 1 metricsn"
  1706.        "Set OSPF External Type 2 metricsn"
  1707.        "Route map referencen"
  1708.        "Pointer to route-map entriesn")
  1709. {
  1710.   struct ospf *ospf = vty->index;
  1711.   int type = -1;
  1712.   int metric = -1;
  1713.   /* Get metric value. */
  1714.   if (argc >= 1)
  1715.     if (!str2metric (argv[0], &metric))
  1716.       return CMD_WARNING;
  1717.   /* Get metric type. */
  1718.   if (argc >= 2)
  1719.     if (!str2metric_type (argv[1], &type))
  1720.       return CMD_WARNING;
  1721.   if (argc == 3)
  1722.     ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[2]);
  1723.   else
  1724.     ospf_routemap_unset (ospf, DEFAULT_ROUTE);
  1725.   return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ALWAYS,
  1726. type, metric);
  1727. }
  1728. ALIAS (ospf_default_information_originate_always_metric_type_routemap,
  1729.        ospf_default_information_originate_always_metric_type_cmd,
  1730.        "default-information originate always metric <0-16777214> metric-type (1|2)",
  1731.        "Control distribution of default informationn"
  1732.        "Distribute a default routen"
  1733.        "Always advertise default routen"
  1734.        "OSPF default metricn"
  1735.        "OSPF metricn"
  1736.        "OSPF metric type for default routesn"
  1737.        "Set OSPF External Type 1 metricsn"
  1738.        "Set OSPF External Type 2 metricsn");
  1739. ALIAS (ospf_default_information_originate_always_metric_type_routemap,
  1740.        ospf_default_information_originate_always_metric_cmd,
  1741.        "default-information originate always metric <0-16777214>",
  1742.        "Control distribution of default informationn"
  1743.        "Distribute a default routen"
  1744.        "Always advertise default routen"
  1745.        "OSPF default metricn"
  1746.        "OSPF metricn"
  1747.        "OSPF metric type for default routesn");
  1748. ALIAS (ospf_default_information_originate_always_metric_type_routemap,
  1749.        ospf_default_information_originate_always_cmd,
  1750.        "default-information originate always",
  1751.        "Control distribution of default informationn"
  1752.        "Distribute a default routen"
  1753.        "Always advertise default routen");
  1754. DEFUN (ospf_default_information_originate_always_metric_routemap,
  1755.        ospf_default_information_originate_always_metric_routemap_cmd,
  1756.        "default-information originate always metric <0-16777214> route-map WORD",
  1757.        "Control distribution of default informationn"
  1758.        "Distribute a default routen"
  1759.        "Always advertise default routen"
  1760.        "OSPF default metricn"
  1761.        "OSPF metricn"
  1762.        "Route map referencen"
  1763.        "Pointer to route-map entriesn")
  1764. {
  1765.   struct ospf *ospf = vty->index;
  1766.   int metric = -1;
  1767.   /* Get metric value. */
  1768.   if (argc >= 1)
  1769.     if (!str2metric (argv[0], &metric))
  1770.       return CMD_WARNING;
  1771.   if (argc == 2)
  1772.     ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[1]);
  1773.   else
  1774.     ospf_routemap_unset (ospf, DEFAULT_ROUTE);
  1775.   return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ALWAYS,
  1776. -1, metric);
  1777. }
  1778. DEFUN (ospf_default_information_originate_always_routemap,
  1779.        ospf_default_information_originate_always_routemap_cmd,
  1780.        "default-information originate always route-map WORD",
  1781.        "Control distribution of default informationn"
  1782.        "Distribute a default routen"
  1783.        "Always advertise default routen"
  1784.        "Route map referencen"
  1785.        "Pointer to route-map entriesn")
  1786. {
  1787.   struct ospf *ospf = vty->index;
  1788.   if (argc == 1)
  1789.     ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[0]);
  1790.   else
  1791.     ospf_routemap_unset (ospf, DEFAULT_ROUTE);
  1792.   return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ALWAYS, -1, -1);
  1793. }
  1794. DEFUN (ospf_default_information_originate_always_type_metric_routemap,
  1795.        ospf_default_information_originate_always_type_metric_routemap_cmd,
  1796.        "default-information originate always metric-type (1|2) metric <0-16777214> route-map WORD",
  1797.        "Control distribution of default informationn"
  1798.        "Distribute a default routen"
  1799.        "Always advertise default routen"
  1800.        "OSPF metric type for default routesn"
  1801.        "Set OSPF External Type 1 metricsn"
  1802.        "Set OSPF External Type 2 metricsn"
  1803.        "OSPF default metricn"
  1804.        "OSPF metricn"
  1805.        "Route map referencen"
  1806.        "Pointer to route-map entriesn")
  1807. {
  1808.   struct ospf *ospf = vty->index;
  1809.   int type = -1;
  1810.   int metric = -1;
  1811.   /* Get metric type. */
  1812.   if (argc >= 1)
  1813.     if (!str2metric_type (argv[0], &type))
  1814.       return CMD_WARNING;
  1815.   /* Get metric value. */
  1816.   if (argc >= 2)
  1817.     if (!str2metric (argv[1], &metric))
  1818.       return CMD_WARNING;
  1819.   if (argc == 3)
  1820.     ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[2]);
  1821.   else
  1822.     ospf_routemap_unset (ospf, DEFAULT_ROUTE);
  1823.   return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ALWAYS,
  1824. type, metric);
  1825. }
  1826. ALIAS (ospf_default_information_originate_always_type_metric_routemap,
  1827.        ospf_default_information_originate_always_type_metric_cmd,
  1828.        "default-information originate always metric-type (1|2) metric <0-16777214>",
  1829.        "Control distribution of default informationn"
  1830.        "Distribute a default routen"
  1831.        "Always advertise default routen"
  1832.        "OSPF metric type for default routesn"
  1833.        "Set OSPF External Type 1 metricsn"
  1834.        "Set OSPF External Type 2 metricsn"
  1835.        "OSPF default metricn"
  1836.        "OSPF metricn");
  1837. ALIAS (ospf_default_information_originate_always_type_metric_routemap,
  1838.        ospf_default_information_originate_always_type_cmd,
  1839.        "default-information originate always metric-type (1|2)",
  1840.        "Control distribution of default informationn"
  1841.        "Distribute a default routen"
  1842.        "Always advertise default routen"
  1843.        "OSPF metric type for default routesn"
  1844.        "Set OSPF External Type 1 metricsn"
  1845.        "Set OSPF External Type 2 metricsn");
  1846. DEFUN (ospf_default_information_originate_always_type_routemap,
  1847.        ospf_default_information_originate_always_type_routemap_cmd,
  1848.        "default-information originate always metric-type (1|2) route-map WORD",
  1849.        "Control distribution of default informationn"
  1850.        "Distribute a default routen"
  1851.        "Always advertise default routen"
  1852.        "OSPF metric type for default routesn"
  1853.        "Set OSPF External Type 1 metricsn"
  1854.        "Set OSPF External Type 2 metricsn"
  1855.        "Route map referencen"
  1856.        "Pointer to route-map entriesn")
  1857. {
  1858.   struct ospf *ospf = vty->index;
  1859.   int type = -1;
  1860.   /* Get metric type. */
  1861.   if (argc >= 1)
  1862.     if (!str2metric_type (argv[0], &type))
  1863.       return CMD_WARNING;
  1864.   if (argc == 2)
  1865.     ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[1]);
  1866.   else
  1867.     ospf_routemap_unset (ospf, DEFAULT_ROUTE);
  1868.   return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ALWAYS,
  1869. type, -1);
  1870. }
  1871. DEFUN (no_ospf_default_information_originate,
  1872.        no_ospf_default_information_originate_cmd,
  1873.        "no default-information originate",
  1874.        NO_STR
  1875.        "Control distribution of default informationn"
  1876.        "Distribute a default routen")
  1877. {
  1878.   struct ospf *ospf = vty->index;
  1879.   struct prefix_ipv4 p;
  1880.   struct in_addr nexthop;
  1881.     
  1882.   p.family = AF_INET;
  1883.   p.prefix.s_addr = 0;
  1884.   p.prefixlen = 0;
  1885.   ospf_external_lsa_flush (ospf, DEFAULT_ROUTE, &p, 0, nexthop);
  1886.   if (EXTERNAL_INFO (DEFAULT_ROUTE)) {
  1887.     ospf_external_info_delete (DEFAULT_ROUTE, p);
  1888.     route_table_finish (EXTERNAL_INFO (DEFAULT_ROUTE));
  1889.     EXTERNAL_INFO (DEFAULT_ROUTE) = NULL;
  1890.   }
  1891.   ospf_routemap_unset (ospf, DEFAULT_ROUTE);
  1892.   return ospf_redistribute_default_unset (ospf);
  1893. }
  1894. DEFUN (ospf_default_metric,
  1895.        ospf_default_metric_cmd,
  1896.        "default-metric <0-16777214>",
  1897.        "Set metric of redistributed routesn"
  1898.        "Default metricn")
  1899. {
  1900.   struct ospf *ospf = vty->index;
  1901.   int metric = -1;
  1902.   if (!str2metric (argv[0], &metric))
  1903.     return CMD_WARNING;
  1904.   ospf->default_metric = metric;
  1905.   return CMD_SUCCESS;
  1906. }
  1907. DEFUN (no_ospf_default_metric,
  1908.        no_ospf_default_metric_cmd,
  1909.        "no default-metric",
  1910.        NO_STR
  1911.        "Set metric of redistributed routesn")
  1912. {
  1913.   struct ospf *ospf = vty->index;
  1914.   ospf->default_metric = -1;
  1915.   return CMD_SUCCESS;
  1916. }
  1917. ALIAS (no_ospf_default_metric,
  1918.        no_ospf_default_metric_val_cmd,
  1919.        "no default-metric <0-16777214>",
  1920.        NO_STR
  1921.        "Set metric of redistributed routesn"
  1922.        "Default metricn");
  1923. DEFUN (ospf_distance,
  1924.        ospf_distance_cmd,
  1925.        "distance <1-255>",
  1926.        "Define an administrative distancen"
  1927.        "OSPF Administrative distancen")
  1928. {
  1929.   struct ospf *ospf = vty->index;
  1930.   ospf->distance_all = atoi (argv[0]);
  1931.   return CMD_SUCCESS;
  1932. }
  1933. DEFUN (no_ospf_distance,
  1934.        no_ospf_distance_cmd,
  1935.        "no distance <1-255>",
  1936.        NO_STR
  1937.        "Define an administrative distancen"
  1938.        "OSPF Administrative distancen")
  1939. {
  1940.   struct ospf *ospf = vty->index;
  1941.   ospf->distance_all = 0;
  1942.   return CMD_SUCCESS;
  1943. }
  1944. DEFUN (no_ospf_distance_ospf,
  1945.        no_ospf_distance_ospf_cmd,
  1946.        "no distance ospf",
  1947.        NO_STR
  1948.        "Define an administrative distancen"
  1949.        "OSPF Administrative distancen"
  1950.        "OSPF Distancen")
  1951. {
  1952.   struct ospf *ospf = vty->index;
  1953.   ospf->distance_intra = 0;
  1954.   ospf->distance_inter = 0;
  1955.   ospf->distance_external = 0;
  1956.   return CMD_SUCCESS;
  1957. }
  1958. DEFUN (ospf_distance_ospf_intra,
  1959.        ospf_distance_ospf_intra_cmd,
  1960.        "distance ospf intra-area <1-255>",
  1961.        "Define an administrative distancen"
  1962.        "OSPF Administrative distancen"
  1963.        "Intra-area routesn"
  1964.        "Distance for intra-area routesn")
  1965. {
  1966.   struct ospf *ospf = vty->index;
  1967.   ospf->distance_intra = atoi (argv[0]);
  1968.   return CMD_SUCCESS;
  1969. }
  1970. DEFUN (ospf_distance_ospf_intra_inter,
  1971.        ospf_distance_ospf_intra_inter_cmd,
  1972.        "distance ospf intra-area <1-255> inter-area <1-255>",
  1973.        "Define an administrative distancen"
  1974.        "OSPF Administrative distancen"
  1975.        "Intra-area routesn"
  1976.        "Distance for intra-area routesn"
  1977.        "Inter-area routesn"
  1978.        "Distance for inter-area routesn")
  1979. {
  1980.   struct ospf *ospf = vty->index;
  1981.   ospf->distance_intra = atoi (argv[0]);
  1982.   ospf->distance_inter = atoi (argv[1]);
  1983.   return CMD_SUCCESS;
  1984. }
  1985. DEFUN (ospf_distance_ospf_intra_external,
  1986.        ospf_distance_ospf_intra_external_cmd,
  1987.        "distance ospf intra-area <1-255> external <1-255>",
  1988.        "Define an administrative distancen"
  1989.        "OSPF Administrative distancen"
  1990.        "Intra-area routesn"
  1991.        "Distance for intra-area routesn"
  1992.        "External routesn"
  1993.        "Distance for external routesn")
  1994. {
  1995.   struct ospf *ospf = vty->index;
  1996.   ospf->distance_intra = atoi (argv[0]);
  1997.   ospf->distance_external = atoi (argv[1]);
  1998.   return CMD_SUCCESS;
  1999. }
  2000. DEFUN (ospf_distance_ospf_intra_inter_external,
  2001.        ospf_distance_ospf_intra_inter_external_cmd,
  2002.        "distance ospf intra-area <1-255> inter-area <1-255> external <1-255>",
  2003.        "Define an administrative distancen"
  2004.        "OSPF Administrative distancen"
  2005.        "Intra-area routesn"
  2006.        "Distance for intra-area routesn"
  2007.        "Inter-area routesn"
  2008.        "Distance for inter-area routesn"
  2009.        "External routesn"
  2010.        "Distance for external routesn")
  2011. {
  2012.   struct ospf *ospf = vty->index;
  2013.   ospf->distance_intra = atoi (argv[0]);
  2014.   ospf->distance_inter = atoi (argv[1]);
  2015.   ospf->distance_external = atoi (argv[2]);
  2016.   return CMD_SUCCESS;
  2017. }
  2018. DEFUN (ospf_distance_ospf_intra_external_inter,
  2019.        ospf_distance_ospf_intra_external_inter_cmd,
  2020.        "distance ospf intra-area <1-255> external <1-255> inter-area <1-255>",
  2021.        "Define an administrative distancen"
  2022.        "OSPF Administrative distancen"
  2023.        "Intra-area routesn"
  2024.        "Distance for intra-area routesn"
  2025.        "External routesn"
  2026.        "Distance for external routesn"
  2027.        "Inter-area routesn"
  2028.        "Distance for inter-area routesn")
  2029. {
  2030.   struct ospf *ospf = vty->index;
  2031.   ospf->distance_intra = atoi (argv[0]);
  2032.   ospf->distance_external = atoi (argv[1]);
  2033.   ospf->distance_inter = atoi (argv[2]);
  2034.   return CMD_SUCCESS;
  2035. }
  2036. DEFUN (ospf_distance_ospf_inter,
  2037.        ospf_distance_ospf_inter_cmd,
  2038.        "distance ospf inter-area <1-255>",
  2039.        "Define an administrative distancen"
  2040.        "OSPF Administrative distancen"
  2041.        "Inter-area routesn"
  2042.        "Distance for inter-area routesn")
  2043. {
  2044.   struct ospf *ospf = vty->index;
  2045.   ospf->distance_inter = atoi (argv[0]);
  2046.   return CMD_SUCCESS;
  2047. }
  2048. DEFUN (ospf_distance_ospf_inter_intra,
  2049.        ospf_distance_ospf_inter_intra_cmd,
  2050.        "distance ospf inter-area <1-255> intra-area <1-255>",
  2051.        "Define an administrative distancen"
  2052.        "OSPF Administrative distancen"
  2053.        "Inter-area routesn"
  2054.        "Distance for inter-area routesn"
  2055.        "Intra-area routesn"
  2056.        "Distance for intra-area routesn")
  2057. {
  2058.   struct ospf *ospf = vty->index;
  2059.   ospf->distance_inter = atoi (argv[0]);
  2060.   ospf->distance_intra = atoi (argv[1]);
  2061.   return CMD_SUCCESS;
  2062. }
  2063. DEFUN (ospf_distance_ospf_inter_external,
  2064.        ospf_distance_ospf_inter_external_cmd,
  2065.        "distance ospf inter-area <1-255> external <1-255>",
  2066.        "Define an administrative distancen"
  2067.        "OSPF Administrative distancen"
  2068.        "Inter-area routesn"
  2069.        "Distance for inter-area routesn"
  2070.        "External routesn"
  2071.        "Distance for external routesn")
  2072. {
  2073.   struct ospf *ospf = vty->index;
  2074.   ospf->distance_inter = atoi (argv[0]);
  2075.   ospf->distance_external = atoi (argv[1]);
  2076.   return CMD_SUCCESS;
  2077. }
  2078. DEFUN (ospf_distance_ospf_inter_intra_external,
  2079.        ospf_distance_ospf_inter_intra_external_cmd,
  2080.        "distance ospf inter-area <1-255> intra-area <1-255> external <1-255>",
  2081.        "Define an administrative distancen"
  2082.        "OSPF Administrative distancen"
  2083.        "Inter-area routesn"
  2084.        "Distance for inter-area routesn"
  2085.        "Intra-area routesn"
  2086.        "Distance for intra-area routesn"
  2087.        "External routesn"
  2088.        "Distance for external routesn")
  2089. {
  2090.   struct ospf *ospf = vty->index;
  2091.   ospf->distance_inter = atoi (argv[0]);
  2092.   ospf->distance_intra = atoi (argv[1]);
  2093.   ospf->distance_external = atoi (argv[2]);
  2094.   return CMD_SUCCESS;
  2095. }
  2096. DEFUN (ospf_distance_ospf_inter_external_intra,
  2097.        ospf_distance_ospf_inter_external_intra_cmd,
  2098.        "distance ospf inter-area <1-255> external <1-255> intra-area <1-255>",
  2099.        "Define an administrative distancen"
  2100.        "OSPF Administrative distancen"
  2101.        "Inter-area routesn"
  2102.        "Distance for inter-area routesn"
  2103.        "External routesn"
  2104.        "Distance for external routesn"
  2105.        "Intra-area routesn"
  2106.        "Distance for intra-area routesn")
  2107. {
  2108.   struct ospf *ospf = vty->index;
  2109.   ospf->distance_inter = atoi (argv[0]);
  2110.   ospf->distance_external = atoi (argv[1]);
  2111.   ospf->distance_intra = atoi (argv[2]);
  2112.   return CMD_SUCCESS;
  2113. }
  2114. DEFUN (ospf_distance_ospf_external,
  2115.        ospf_distance_ospf_external_cmd,
  2116.        "distance ospf external <1-255>",
  2117.        "Define an administrative distancen"
  2118.        "OSPF Administrative distancen"
  2119.        "External routesn"
  2120.        "Distance for external routesn")
  2121. {
  2122.   struct ospf *ospf = vty->index;
  2123.   ospf->distance_external = atoi (argv[0]);
  2124.   return CMD_SUCCESS;
  2125. }
  2126. DEFUN (ospf_distance_ospf_external_intra,
  2127.        ospf_distance_ospf_external_intra_cmd,
  2128.        "distance ospf external <1-255> intra-area <1-255>",
  2129.        "Define an administrative distancen"
  2130.        "OSPF Administrative distancen"
  2131.        "External routesn"
  2132.        "Distance for external routesn"
  2133.        "Intra-area routesn"
  2134.        "Distance for intra-area routesn")
  2135. {
  2136.   struct ospf *ospf = vty->index;
  2137.   ospf->distance_external = atoi (argv[0]);
  2138.   ospf->distance_intra = atoi (argv[1]);
  2139.   return CMD_SUCCESS;
  2140. }
  2141. DEFUN (ospf_distance_ospf_external_inter,
  2142.        ospf_distance_ospf_external_inter_cmd,
  2143.        "distance ospf external <1-255> inter-area <1-255>",
  2144.        "Define an administrative distancen"
  2145.        "OSPF Administrative distancen"
  2146.        "External routesn"
  2147.        "Distance for external routesn"
  2148.        "Inter-area routesn"
  2149.        "Distance for inter-area routesn")
  2150. {
  2151.   struct ospf *ospf = vty->index;
  2152.   ospf->distance_external = atoi (argv[0]);
  2153.   ospf->distance_inter = atoi (argv[1]);
  2154.   return CMD_SUCCESS;
  2155. }
  2156. DEFUN (ospf_distance_ospf_external_intra_inter,
  2157.        ospf_distance_ospf_external_intra_inter_cmd,
  2158.        "distance ospf external <1-255> intra-area <1-255> inter-area <1-255>",
  2159.        "Define an administrative distancen"
  2160.        "OSPF Administrative distancen"
  2161.        "External routesn"
  2162.        "Distance for external routesn"
  2163.        "Intra-area routesn"
  2164.        "Distance for intra-area routesn"
  2165.        "Inter-area routesn"
  2166.        "Distance for inter-area routesn")
  2167. {
  2168.   struct ospf *ospf = vty->index;
  2169.   ospf->distance_external = atoi (argv[0]);
  2170.   ospf->distance_intra = atoi (argv[1]);
  2171.   ospf->distance_inter = atoi (argv[2]);
  2172.   return CMD_SUCCESS;
  2173. }
  2174. DEFUN (ospf_distance_ospf_external_inter_intra,
  2175.        ospf_distance_ospf_external_inter_intra_cmd,
  2176.        "distance ospf external <1-255> inter-area <1-255> intra-area <1-255>",
  2177.        "Define an administrative distancen"
  2178.        "OSPF Administrative distancen"
  2179.        "External routesn"
  2180.        "Distance for external routesn"
  2181.        "Inter-area routesn"
  2182.        "Distance for inter-area routesn"
  2183.        "Intra-area routesn"
  2184.        "Distance for intra-area routesn")
  2185. {
  2186.   struct ospf *ospf = vty->index;
  2187.   ospf->distance_external = atoi (argv[0]);
  2188.   ospf->distance_inter = atoi (argv[1]);
  2189.   ospf->distance_intra = atoi (argv[2]);
  2190.   return CMD_SUCCESS;
  2191. }
  2192. DEFUN (ospf_distance_source,
  2193.        ospf_distance_source_cmd,
  2194.        "distance <1-255> A.B.C.D/M",
  2195.        "Administrative distancen"
  2196.        "Distance valuen"
  2197.        "IP source prefixn")
  2198. {
  2199.   struct ospf *ospf = vty->index;
  2200.   ospf_distance_set (vty, ospf, argv[0], argv[1], NULL);
  2201.   return CMD_SUCCESS;
  2202. }
  2203. DEFUN (no_ospf_distance_source,
  2204.        no_ospf_distance_source_cmd,
  2205.        "no distance <1-255> A.B.C.D/M",
  2206.        NO_STR
  2207.        "Administrative distancen"
  2208.        "Distance valuen"
  2209.        "IP source prefixn")
  2210. {
  2211.   struct ospf *ospf = vty->index;
  2212.   ospf_distance_unset (vty, ospf, argv[0], argv[1], NULL);
  2213.   return CMD_SUCCESS;
  2214. }
  2215. DEFUN (ospf_distance_source_access_list,
  2216.        ospf_distance_source_access_list_cmd,
  2217.        "distance <1-255> A.B.C.D/M WORD",
  2218.        "Administrative distancen"
  2219.        "Distance valuen"
  2220.        "IP source prefixn"
  2221.        "Access list namen")
  2222. {
  2223.   struct ospf *ospf = vty->index;
  2224.   ospf_distance_set (vty, ospf, argv[0], argv[1], argv[2]);
  2225.   return CMD_SUCCESS;
  2226. }
  2227. DEFUN (no_ospf_distance_source_access_list,
  2228.        no_ospf_distance_source_access_list_cmd,
  2229.        "no distance <1-255> A.B.C.D/M WORD",
  2230.        NO_STR
  2231.        "Administrative distancen"
  2232.        "Distance valuen"
  2233.        "IP source prefixn"
  2234.        "Access list namen")
  2235. {
  2236.   struct ospf *ospf = vty->index;
  2237.   ospf_distance_unset (vty, ospf, argv[0], argv[1], argv[2]);
  2238.   return CMD_SUCCESS;
  2239. }
  2240. void
  2241. show_ip_ospf_route_network (struct vty *vty, struct route_table *rt)
  2242. {
  2243.   struct route_node *rn;
  2244.   struct ospf_route *or;
  2245.   listnode pnode;
  2246.   struct ospf_path *path;
  2247.   vty_out (vty, "============ OSPF network routing table ============%s",
  2248.    VTY_NEWLINE);
  2249.   for (rn = route_top (rt); rn; rn = route_next (rn))
  2250.     if ((or = rn->info) != NULL)
  2251.       {
  2252. char buf1[19];
  2253. snprintf (buf1, 19, "%s/%d",
  2254.   inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen);
  2255. switch (or->path_type)
  2256.   {
  2257.   case OSPF_PATH_INTER_AREA:
  2258.     if (or->type == OSPF_DESTINATION_NETWORK)
  2259.       vty_out (vty, "N IA %-18s    [%d] area: %s%s", buf1, or->cost,
  2260.        inet_ntoa (or->u.std.area_id), VTY_NEWLINE);
  2261.     else if (or->type == OSPF_DESTINATION_DISCARD)
  2262.       vty_out (vty, "D IA %-18s    Discard entry%s", buf1, VTY_NEWLINE);
  2263.     break;
  2264.   case OSPF_PATH_INTRA_AREA:
  2265.     vty_out (vty, "N    %-18s    [%d] area: %s%s", buf1, or->cost,
  2266.      inet_ntoa (or->u.std.area_id), VTY_NEWLINE);
  2267.     break;
  2268.   default:
  2269.     break;
  2270.   }
  2271.         if (or->type == OSPF_DESTINATION_NETWORK)
  2272.     for (pnode = listhead (or->path); pnode; nextnode (pnode))
  2273.     {
  2274.       path = getdata (pnode);
  2275.       if (path->oi != NULL)
  2276. {
  2277.   if (path->nexthop.s_addr == 0)
  2278.     vty_out (vty, "%24s   directly attached to %s%s",
  2279.      "", path->oi->ifp->name, VTY_NEWLINE);
  2280.   else 
  2281.     vty_out (vty, "%24s   via %s, %s%s", "",
  2282.      inet_ntoa (path->nexthop), path->oi->ifp->name,
  2283.      VTY_NEWLINE);
  2284. }
  2285.     }
  2286.       }
  2287.   vty_out (vty, "%s", VTY_NEWLINE);
  2288. }
  2289. void
  2290. show_ip_ospf_route_router (struct vty *vty, struct route_table *rtrs)
  2291. {
  2292.   struct route_node *rn;
  2293.   struct ospf_route *or;
  2294.   listnode pn, nn;
  2295.   struct ospf_path *path;
  2296.   vty_out (vty, "============ OSPF router routing table =============%s",
  2297.    VTY_NEWLINE);
  2298.   for (rn = route_top (rtrs); rn; rn = route_next (rn))
  2299.     if (rn->info)
  2300.       {
  2301. int flag = 0;
  2302. vty_out (vty, "R    %-15s    ", inet_ntoa (rn->p.u.prefix4));
  2303. for (nn = listhead ((list) rn->info); nn; nextnode (nn))
  2304.   if ((or = getdata (nn)) != NULL)
  2305.     {
  2306.       if (flag++)
  2307. vty_out(vty,"                              " );
  2308.       /* Show path. */
  2309.       vty_out (vty, "%s [%d] area: %s",
  2310.        (or->path_type == OSPF_PATH_INTER_AREA ? "IA" : "  "),
  2311.        or->cost, inet_ntoa (or->u.std.area_id));
  2312.       /* Show flags. */
  2313.       vty_out (vty, "%s%s%s",
  2314.        (or->u.std.flags & ROUTER_LSA_BORDER ? ", ABR" : ""),
  2315.        (or->u.std.flags & ROUTER_LSA_EXTERNAL ? ", ASBR" : ""),
  2316.        VTY_NEWLINE);
  2317.       for (pn = listhead (or->path); pn; nextnode (pn))
  2318. {
  2319.   path = getdata (pn);
  2320.   if (path->nexthop.s_addr == 0)
  2321.     vty_out (vty, "%24s   directly attached to %s%s",
  2322.      "", path->oi->ifp->name, VTY_NEWLINE);
  2323.   else 
  2324.     vty_out (vty, "%24s   via %s, %s%s", "",
  2325.      inet_ntoa (path->nexthop), path->oi->ifp->name,
  2326.      VTY_NEWLINE);
  2327. }
  2328.     }
  2329.       }
  2330.   vty_out (vty, "%s", VTY_NEWLINE);
  2331. }
  2332. void
  2333. show_ip_ospf_route_external (struct vty *vty, struct route_table *rt)
  2334. {
  2335.   struct route_node *rn;
  2336.   struct ospf_route *er;
  2337.   listnode pnode;
  2338.   struct ospf_path *path;
  2339.   vty_out (vty, "============ OSPF external routing table ===========%s",
  2340.    VTY_NEWLINE);
  2341.   for (rn = route_top (rt); rn; rn = route_next (rn))
  2342.     if ((er = rn->info) != NULL)
  2343.       {
  2344. char buf1[19];
  2345. snprintf (buf1, 19, "%s/%d",
  2346.   inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen);
  2347. switch (er->path_type)
  2348.   {
  2349.   case OSPF_PATH_TYPE1_EXTERNAL:
  2350.     vty_out (vty, "N E1 %-18s    [%d] tag: %u%s", buf1,
  2351.      er->cost, er->u.ext.tag, VTY_NEWLINE);
  2352.     break;
  2353.   case OSPF_PATH_TYPE2_EXTERNAL:
  2354.     vty_out (vty, "N E2 %-18s    [%d/%d] tag: %u%s", buf1, er->cost,
  2355.      er->u.ext.type2_cost, er->u.ext.tag, VTY_NEWLINE);
  2356.     break;
  2357.   }
  2358.         for (pnode = listhead (er->path); pnode; nextnode (pnode))
  2359.           {
  2360.             path = getdata (pnode);
  2361.             if (path->oi != NULL)
  2362.               {
  2363.                 if (path->nexthop.s_addr == 0)
  2364.           vty_out (vty, "%24s   directly attached to %s%s",
  2365.            "", path->oi->ifp->name, VTY_NEWLINE);
  2366.                 else 
  2367.           vty_out (vty, "%24s   via %s, %s%s", "",
  2368.    inet_ntoa (path->nexthop), path->oi->ifp->name,
  2369.                  VTY_NEWLINE);
  2370.               }
  2371.   }
  2372.       }
  2373.   vty_out (vty, "%s", VTY_NEWLINE);
  2374. }
  2375. #ifdef HAVE_NSSA
  2376. DEFUN (show_ip_ospf_border_routers,
  2377.        show_ip_ospf_border_routers_cmd,
  2378.        "show ip ospf border-routers",
  2379.        SHOW_STR
  2380.        IP_STR
  2381.        "show all the ABR's and ASBR'sn"
  2382.        "for this arean")
  2383. {
  2384.   struct ospf *ospf;
  2385.   ospf = ospf_lookup ();
  2386.   if (ospf == NULL)
  2387.     {
  2388.       vty_out (vty, "OSPF is not enabled%s", VTY_NEWLINE);
  2389.       return CMD_SUCCESS;
  2390.     }
  2391.   if (ospf->new_table == NULL)
  2392.     {
  2393.       vty_out (vty, "No OSPF routing information exist%s", VTY_NEWLINE);
  2394.       return CMD_SUCCESS;
  2395.     }
  2396.   /* Show Network routes.
  2397.      show_ip_ospf_route_network (vty, ospf->new_table);   */
  2398.   /* Show Router routes. */
  2399.   show_ip_ospf_route_router (vty, ospf->new_rtrs);
  2400.   return CMD_SUCCESS;
  2401. }
  2402. #endif /* HAVE_NSSA */
  2403. DEFUN (show_ip_ospf_route,
  2404.        show_ip_ospf_route_cmd,
  2405.        "show ip ospf route",
  2406.        SHOW_STR
  2407.        IP_STR
  2408.        "OSPF informationn"
  2409.        "OSPF routing tablen")
  2410. {
  2411.   struct ospf *ospf;
  2412.   ospf = ospf_lookup ();
  2413.   if (ospf == NULL)
  2414.     {
  2415.       vty_out (vty, "OSPF is not enabled%s", VTY_NEWLINE);
  2416.       return CMD_SUCCESS;
  2417.     }
  2418.   if (ospf->new_table == NULL)
  2419.     {
  2420.       vty_out (vty, "No OSPF routing information exist%s", VTY_NEWLINE);
  2421.       return CMD_SUCCESS;
  2422.     }
  2423.   /* Show Network routes. */
  2424.   show_ip_ospf_route_network (vty, ospf->new_table);
  2425.   /* Show Router routes. */
  2426.   show_ip_ospf_route_router (vty, ospf->new_rtrs);
  2427.   /* Show AS External routes. */
  2428.   show_ip_ospf_route_external (vty, ospf->old_external_route);
  2429.   return CMD_SUCCESS;
  2430. }
  2431. char *ospf_abr_type_str[] = 
  2432.   {
  2433.     "unknown",
  2434.     "standard",
  2435.     "ibm",
  2436.     "cisco",
  2437.     "shortcut"
  2438.   };
  2439. char *ospf_shortcut_mode_str[] = 
  2440.   {
  2441.     "default",
  2442.     "enable",
  2443.     "disable"
  2444.   };
  2445. void
  2446. area_id2str (char *buf, int length, struct ospf_area *area)
  2447. {
  2448.   memset (buf, 0, length);
  2449.   if (area->format == OSPF_AREA_ID_FORMAT_ADDRESS)
  2450.     strncpy (buf, inet_ntoa (area->area_id), length);
  2451.   else
  2452.     sprintf (buf, "%lu", (unsigned long) ntohl (area->area_id.s_addr));
  2453. }
  2454. char *ospf_int_type_str[] = 
  2455.   {
  2456.     "unknown", /* should never be used. */
  2457.     "point-to-point",
  2458.     "broadcast",
  2459.     "non-broadcast",
  2460.     "point-to-multipoint",
  2461.     "virtual-link", /* should never be used. */
  2462.     "loopback"
  2463.   };
  2464. /* Configuration write function for ospfd. */
  2465. int
  2466. config_write_interface (struct vty *vty)
  2467. {
  2468.   listnode n1, n2;
  2469.   struct interface *ifp;
  2470.   struct crypt_key *ck;
  2471.   int write = 0;
  2472.   struct route_node *rn = NULL;
  2473.   struct ospf_if_params *params;
  2474.   for (n1 = listhead (iflist); n1; nextnode (n1))
  2475.     {
  2476.       ifp = getdata (n1);
  2477.       if (memcmp (ifp->name, "VLINK", 5) == 0)
  2478. continue;
  2479.       vty_out (vty, "!%s", VTY_NEWLINE);
  2480.       vty_out (vty, "interface %s%s", ifp->name,
  2481.                VTY_NEWLINE);
  2482.       if (ifp->desc)
  2483.         vty_out (vty, " description %s%s", ifp->desc,
  2484.  VTY_NEWLINE);
  2485.       write++;
  2486.       params = IF_DEF_PARAMS (ifp);
  2487.       
  2488.       do {
  2489. /* Interface Network print. */
  2490. if (OSPF_IF_PARAM_CONFIGURED (params, type) &&
  2491.     params->type != OSPF_IFTYPE_BROADCAST &&
  2492.     params->type != OSPF_IFTYPE_LOOPBACK)
  2493.   {
  2494.     vty_out (vty, " ip ospf network %s",
  2495.      ospf_int_type_str[params->type]);
  2496.     if (params != IF_DEF_PARAMS (ifp))
  2497.       vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
  2498.     vty_out (vty, "%s", VTY_NEWLINE);
  2499.   }
  2500. /* OSPF interface authentication print */
  2501. if (OSPF_IF_PARAM_CONFIGURED (params, auth_type) &&
  2502.     params->auth_type != OSPF_AUTH_NOTSET)
  2503.   {
  2504.     char *auth_str;
  2505.     
  2506.     /* Translation tables are not that much help here due to syntax
  2507.        of the simple option */
  2508.     switch (params->auth_type)
  2509.       {
  2510.       case OSPF_AUTH_NULL:
  2511. auth_str = " null";
  2512. break;
  2513.       case OSPF_AUTH_SIMPLE:
  2514. auth_str = "";
  2515. break;
  2516.       case OSPF_AUTH_CRYPTOGRAPHIC:
  2517. auth_str = " message-digest";
  2518. break;
  2519.       default:
  2520. auth_str = "";
  2521. break;
  2522.       }
  2523.     
  2524.     vty_out (vty, " ip ospf authentication%s", auth_str);
  2525.     if (params != IF_DEF_PARAMS (ifp))
  2526.       vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
  2527.     vty_out (vty, "%s", VTY_NEWLINE);
  2528.   }
  2529. /* Simple Authentication Password print. */
  2530. if (OSPF_IF_PARAM_CONFIGURED (params, auth_simple) &&
  2531.     params->auth_simple[0] != '')
  2532.   {
  2533.     vty_out (vty, " ip ospf authentication-key %s",
  2534.      params->auth_simple);
  2535.     if (params != IF_DEF_PARAMS (ifp))
  2536.       vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
  2537.     vty_out (vty, "%s", VTY_NEWLINE);
  2538.   }
  2539. /* Cryptographic Authentication Key print. */
  2540. for (n2 = listhead (params->auth_crypt); n2; nextnode (n2))
  2541.   {
  2542.     ck = getdata (n2);
  2543.     vty_out (vty, " ip ospf message-digest-key %d md5 %s",
  2544.      ck->key_id, ck->auth_key);
  2545.     if (params != IF_DEF_PARAMS (ifp))
  2546.       vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
  2547.     vty_out (vty, "%s", VTY_NEWLINE);
  2548.   }
  2549. /* Interface Output Cost print. */
  2550. if (OSPF_IF_PARAM_CONFIGURED (params, output_cost_cmd))
  2551.   {
  2552.     vty_out (vty, " ip ospf cost %u", params->output_cost_cmd);
  2553.     if (params != IF_DEF_PARAMS (ifp))
  2554.       vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
  2555.     vty_out (vty, "%s", VTY_NEWLINE);
  2556.   }
  2557. /* Hello Interval print. */
  2558. if (OSPF_IF_PARAM_CONFIGURED (params, v_hello) &&
  2559.     params->v_hello != OSPF_HELLO_INTERVAL_DEFAULT)
  2560.   {
  2561.     vty_out (vty, " ip ospf hello-interval %u", params->v_hello);
  2562.     if (params != IF_DEF_PARAMS (ifp))
  2563.       vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
  2564.     vty_out (vty, "%s", VTY_NEWLINE);
  2565.   }
  2566. /* Router Dead Interval print. */
  2567. if (OSPF_IF_PARAM_CONFIGURED (params, v_wait) &&
  2568.     params->v_wait != OSPF_ROUTER_DEAD_INTERVAL_DEFAULT)
  2569.   {
  2570.     vty_out (vty, " ip ospf dead-interval %u", params->v_wait);
  2571.     if (params != IF_DEF_PARAMS (ifp))
  2572.       vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
  2573.     vty_out (vty, "%s", VTY_NEWLINE);
  2574.   }
  2575. /* Router Priority print. */
  2576. if (OSPF_IF_PARAM_CONFIGURED (params, priority) &&
  2577.     params->priority != OSPF_ROUTER_PRIORITY_DEFAULT)
  2578.   {
  2579.     vty_out (vty, " ip ospf priority %u", params->priority);
  2580.     if (params != IF_DEF_PARAMS (ifp))
  2581.       vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
  2582.     vty_out (vty, "%s", VTY_NEWLINE);
  2583.   }
  2584. /* Retransmit Interval print. */
  2585. if (OSPF_IF_PARAM_CONFIGURED (params, retransmit_interval) &&
  2586.     params->retransmit_interval != OSPF_RETRANSMIT_INTERVAL_DEFAULT)
  2587.   {
  2588.     vty_out (vty, " ip ospf retransmit-interval %u",
  2589.      params->retransmit_interval);
  2590.     if (params != IF_DEF_PARAMS (ifp))
  2591.       vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
  2592.     vty_out (vty, "%s", VTY_NEWLINE);
  2593.   }
  2594. /* Transmit Delay print. */
  2595. if (OSPF_IF_PARAM_CONFIGURED (params, transmit_delay) &&
  2596.     params->transmit_delay != OSPF_TRANSMIT_DELAY_DEFAULT)
  2597.   {
  2598.     vty_out (vty, " ip ospf transmit-delay %u", params->transmit_delay);
  2599.     if (params != IF_DEF_PARAMS (ifp))
  2600.       vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
  2601.     vty_out (vty, "%s", VTY_NEWLINE);
  2602.   }
  2603. while (1)
  2604.   {
  2605.     if (rn == NULL)
  2606.       rn = route_top (IF_OIFS_PARAMS (ifp));
  2607.     else
  2608.       rn = route_next (rn);
  2609.     if (rn == NULL)
  2610.       break;
  2611.     params = rn->info;
  2612.     if (params != NULL)
  2613.       break;
  2614.   }
  2615.       } while (rn);
  2616.       
  2617. #ifdef HAVE_OPAQUE_LSA
  2618.       ospf_opaque_config_write_if (vty, ifp);
  2619. #endif /* HAVE_OPAQUE_LSA */
  2620.     }
  2621.   return write;
  2622. }
  2623. int
  2624. config_write_network_area (struct vty *vty, struct ospf *ospf)
  2625. {
  2626.   struct route_node *rn;
  2627.   u_char buf[INET_ADDRSTRLEN];
  2628.   /* `network area' print. */
  2629.   for (rn = route_top (ospf->networks); rn; rn = route_next (rn))
  2630.     if (rn->info)
  2631.       {
  2632. struct ospf_network *n = rn->info;
  2633. memset (buf, 0, INET_ADDRSTRLEN);
  2634. /* Create Area ID string by specified Area ID format. */
  2635. if (n->format == OSPF_AREA_ID_FORMAT_ADDRESS)
  2636.   strncpy (buf, inet_ntoa (n->area_id), INET_ADDRSTRLEN);
  2637. else
  2638.   sprintf (buf, "%lu", 
  2639.    (unsigned long int) ntohl (n->area_id.s_addr));
  2640. /* Network print. */
  2641. vty_out (vty, " network %s/%d area %s%s",
  2642.  inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen,
  2643.  buf, VTY_NEWLINE);
  2644.       }
  2645.   return 0;
  2646. }
  2647. int
  2648. config_write_ospf_area (struct vty *vty, struct ospf *ospf)
  2649. {
  2650.   listnode node;
  2651.   u_char buf[INET_ADDRSTRLEN];
  2652.   /* Area configuration print. */
  2653.   for (node = listhead (ospf->areas); node; nextnode (node))
  2654.     {
  2655.       struct ospf_area *area = getdata (node);
  2656.       struct route_node *rn1;
  2657.       area_id2str (buf, INET_ADDRSTRLEN, area);
  2658.       if (area->auth_type != OSPF_AUTH_NULL)
  2659. {
  2660.   if (area->auth_type == OSPF_AUTH_SIMPLE)
  2661.     vty_out (vty, " area %s authentication%s", buf, VTY_NEWLINE);
  2662.   else
  2663.     vty_out (vty, " area %s authentication message-digest%s",
  2664.      buf, VTY_NEWLINE);
  2665. }
  2666.       if (area->shortcut_configured != OSPF_SHORTCUT_DEFAULT)
  2667. vty_out (vty, " area %s shortcut %s%s", buf,
  2668.  ospf_shortcut_mode_str[area->shortcut_configured],
  2669.  VTY_NEWLINE);
  2670.       if ((area->external_routing == OSPF_AREA_STUB)
  2671. #ifdef HAVE_NSSA
  2672.   || (area->external_routing == OSPF_AREA_NSSA)
  2673. #endif /* HAVE_NSSA */
  2674.   )
  2675. {
  2676. #ifdef HAVE_NSSA
  2677.   if (area->external_routing == OSPF_AREA_NSSA)
  2678.     vty_out (vty, " area %s nssa", buf);
  2679.   else
  2680. #endif /* HAVE_NSSA */
  2681.     vty_out (vty, " area %s stub", buf);
  2682.   if (area->no_summary)
  2683.     vty_out (vty, " no-summary");
  2684.   vty_out (vty, "%s", VTY_NEWLINE);
  2685.   if (area->default_cost != 1)
  2686.     vty_out (vty, " area %s default-cost %d%s", buf, 
  2687.      area->default_cost, VTY_NEWLINE);
  2688. }
  2689.       for (rn1 = route_top (area->ranges); rn1; rn1 = route_next (rn1))
  2690. if (rn1->info)
  2691.   {
  2692.     struct ospf_area_range *range = rn1->info;
  2693.     vty_out (vty, " area %s range %s/%d", buf,
  2694.      inet_ntoa (rn1->p.u.prefix4), rn1->p.prefixlen);
  2695.     if (range->cost_config != -1)
  2696.       vty_out (vty, " cost %d", range->cost_config);
  2697.     if (!CHECK_FLAG (range->flags, OSPF_AREA_RANGE_ADVERTISE))
  2698.       vty_out (vty, " not-advertise");
  2699.     if (CHECK_FLAG (range->flags, OSPF_AREA_RANGE_SUBSTITUTE))
  2700.       vty_out (vty, " substitute %s/%d",
  2701.        inet_ntoa (range->subst_addr), range->subst_masklen);
  2702.     vty_out (vty, "%s", VTY_NEWLINE);
  2703.   }
  2704.       if (EXPORT_NAME (area))
  2705. vty_out (vty, " area %s export-list %s%s", buf,
  2706.  EXPORT_NAME (area), VTY_NEWLINE);
  2707.       if (IMPORT_NAME (area))
  2708. vty_out (vty, " area %s import-list %s%s", buf,
  2709.  IMPORT_NAME (area), VTY_NEWLINE);
  2710.       if (PREFIX_NAME_IN (area))
  2711. vty_out (vty, " area %s filter-list prefix %s in%s", buf,
  2712.  PREFIX_NAME_IN (area), VTY_NEWLINE);
  2713.       if (PREFIX_NAME_OUT (area))
  2714. vty_out (vty, " area %s filter-list prefix %s out%s", buf,
  2715.  PREFIX_NAME_OUT (area), VTY_NEWLINE);
  2716.     }
  2717.   return 0;
  2718. }
  2719. int
  2720. config_write_ospf_nbr_nbma (struct vty *vty, struct ospf *ospf)
  2721. {
  2722.   struct ospf_nbr_nbma *nbr_nbma;
  2723.   struct route_node *rn;
  2724.   /* Static Neighbor configuration print. */
  2725.   for (rn = route_top (ospf->nbr_nbma); rn; rn = route_next (rn))
  2726.     if ((nbr_nbma = rn->info))
  2727.       {
  2728. vty_out (vty, " neighbor %s", inet_ntoa (nbr_nbma->addr));
  2729. if (nbr_nbma->priority != OSPF_NEIGHBOR_PRIORITY_DEFAULT)
  2730.   vty_out (vty, " priority %d", nbr_nbma->priority);
  2731. if (nbr_nbma->v_poll != OSPF_POLL_INTERVAL_DEFAULT)
  2732.   vty_out (vty, " poll-interval %d", nbr_nbma->v_poll);
  2733. vty_out (vty, "%s", VTY_NEWLINE);
  2734.       }
  2735.   return 0;
  2736. }
  2737. int
  2738. config_write_virtual_link (struct vty *vty, struct ospf *ospf)
  2739. {
  2740.   listnode node;
  2741.   u_char buf[INET_ADDRSTRLEN];
  2742.   /* Virtual-Link print */
  2743.   for (node = listhead (ospf->vlinks); node; nextnode (node))
  2744.     {
  2745.       listnode n2;
  2746.       struct crypt_key *ck;
  2747.       struct ospf_vl_data *vl_data = getdata (node);
  2748.       struct ospf_interface *oi;
  2749.       if (vl_data != NULL)
  2750. {
  2751.   memset (buf, 0, INET_ADDRSTRLEN);
  2752.   
  2753.   if (vl_data->format == OSPF_AREA_ID_FORMAT_ADDRESS)
  2754.     strncpy (buf, inet_ntoa (vl_data->vl_area_id), INET_ADDRSTRLEN);
  2755.   else
  2756.     sprintf (buf, "%lu", 
  2757.      (unsigned long int) ntohl (vl_data->vl_area_id.s_addr));
  2758.   oi = vl_data->vl_oi;
  2759.   /* timers */
  2760.   if (OSPF_IF_PARAM (oi, v_hello) != OSPF_HELLO_INTERVAL_DEFAULT ||
  2761.       OSPF_IF_PARAM (oi, v_wait) != OSPF_ROUTER_DEAD_INTERVAL_DEFAULT ||
  2762.       OSPF_IF_PARAM (oi, retransmit_interval) != OSPF_RETRANSMIT_INTERVAL_DEFAULT ||
  2763.       OSPF_IF_PARAM (oi, transmit_delay) != OSPF_TRANSMIT_DELAY_DEFAULT)
  2764.     vty_out (vty, " area %s virtual-link %s hello-interval %d retransmit-interval %d transmit-delay %d dead-interval %d%s",
  2765.      buf,
  2766.      inet_ntoa (vl_data->vl_peer), 
  2767.      OSPF_IF_PARAM (oi, v_hello),
  2768.      OSPF_IF_PARAM (oi, retransmit_interval),
  2769.      OSPF_IF_PARAM (oi, transmit_delay),
  2770.      OSPF_IF_PARAM (oi, v_wait),
  2771.      VTY_NEWLINE);
  2772.   else
  2773.     vty_out (vty, " area %s virtual-link %s%s", buf,
  2774.      inet_ntoa (vl_data->vl_peer), VTY_NEWLINE);
  2775.   /* Auth key */
  2776.   if (IF_DEF_PARAMS (vl_data->vl_oi->ifp)->auth_simple[0] != '')
  2777.     vty_out (vty, " area %s virtual-link %s authentication-key %s%s",
  2778.      buf,
  2779.      inet_ntoa (vl_data->vl_peer),
  2780.      IF_DEF_PARAMS (vl_data->vl_oi->ifp)->auth_simple,
  2781.      VTY_NEWLINE);
  2782.   /* md5 keys */
  2783.   for (n2 = listhead (IF_DEF_PARAMS (vl_data->vl_oi->ifp)->auth_crypt); n2; nextnode (n2))
  2784.     {
  2785.       ck = getdata (n2);
  2786.       vty_out (vty, " area %s virtual-link %s message-digest-key %d md5 %s%s",
  2787.        buf,
  2788.        inet_ntoa (vl_data->vl_peer),
  2789.        ck->key_id, ck->auth_key, VTY_NEWLINE);
  2790.     }
  2791.  
  2792. }
  2793.     }
  2794.   return 0;
  2795. }
  2796. char *distribute_str[] = { "system", "kernel", "connected", "static", "rip",
  2797.    "ripng", "ospf", "ospf6", "bgp"};
  2798. int
  2799. config_write_ospf_redistribute (struct vty *vty, struct ospf *ospf)
  2800. {
  2801.   int type;
  2802.   /* redistribute print. */
  2803.   for (type = 0; type < ZEBRA_ROUTE_MAX; type++)
  2804.     if (type != zclient->redist_default && zclient->redist[type])
  2805.       {
  2806.         vty_out (vty, " redistribute %s", distribute_str[type]);
  2807. if (ospf->dmetric[type].value >= 0)
  2808.   vty_out (vty, " metric %d", ospf->dmetric[type].value);
  2809.         if (ospf->dmetric[type].type == EXTERNAL_METRIC_TYPE_1)
  2810.   vty_out (vty, " metric-type 1");
  2811. if (ROUTEMAP_NAME (ospf, type))
  2812.   vty_out (vty, " route-map %s", ROUTEMAP_NAME (ospf, type));
  2813.         vty_out (vty, "%s", VTY_NEWLINE);
  2814.       }
  2815.   return 0;
  2816. }
  2817. int
  2818. config_write_ospf_default_metric (struct vty *vty, struct ospf *ospf)
  2819. {
  2820.   if (ospf->default_metric != -1)
  2821.     vty_out (vty, " default-metric %d%s", ospf->default_metric,
  2822.      VTY_NEWLINE);
  2823.   return 0;
  2824. }
  2825. int
  2826. config_write_ospf_distribute (struct vty *vty, struct ospf *ospf)
  2827. {
  2828.   int type;
  2829.   if (ospf)
  2830.     {
  2831.       /* distribute-list print. */
  2832.       for (type = 0; type < ZEBRA_ROUTE_MAX; type++)
  2833. if (ospf->dlist[type].name)
  2834.   vty_out (vty, " distribute-list %s out %s%s", 
  2835.    ospf->dlist[type].name,
  2836.    distribute_str[type], VTY_NEWLINE);
  2837.       /* default-information print. */
  2838.       if (ospf->default_originate != DEFAULT_ORIGINATE_NONE)
  2839. {
  2840.   if (ospf->default_originate == DEFAULT_ORIGINATE_ZEBRA)
  2841.     vty_out (vty, " default-information originate");
  2842.   else
  2843.     vty_out (vty, " default-information originate always");
  2844.   if (ospf->dmetric[DEFAULT_ROUTE].value >= 0)
  2845.     vty_out (vty, " metric %d",
  2846.      ospf->dmetric[DEFAULT_ROUTE].value);
  2847.   if (ospf->dmetric[DEFAULT_ROUTE].type == EXTERNAL_METRIC_TYPE_1)
  2848.     vty_out (vty, " metric-type 1");
  2849.   if (ROUTEMAP_NAME (ospf, DEFAULT_ROUTE))
  2850.     vty_out (vty, " route-map %s",
  2851.      ROUTEMAP_NAME (ospf, DEFAULT_ROUTE));
  2852.   
  2853.   vty_out (vty, "%s", VTY_NEWLINE);
  2854. }
  2855.     }
  2856.   return 0;
  2857. }
  2858. int
  2859. config_write_ospf_distance (struct vty *vty, struct ospf *ospf)
  2860. {
  2861.   struct route_node *rn;
  2862.   struct ospf_distance *odistance;
  2863.   if (ospf->distance_all)
  2864.     vty_out (vty, " distance %d%s", ospf->distance_all, VTY_NEWLINE);
  2865.   if (ospf->distance_intra 
  2866.       || ospf->distance_inter 
  2867.       || ospf->distance_external)
  2868.     {
  2869.       vty_out (vty, " distance ospf");
  2870.       if (ospf->distance_intra)
  2871. vty_out (vty, " intra-area %d", ospf->distance_intra);
  2872.       if (ospf->distance_inter)
  2873. vty_out (vty, " inter-area %d", ospf->distance_inter);
  2874.       if (ospf->distance_external)
  2875. vty_out (vty, " external %d", ospf->distance_external);
  2876.       vty_out (vty, "%s", VTY_NEWLINE);
  2877.     }
  2878.   
  2879.   for (rn = route_top (ospf->distance_table); rn; rn = route_next (rn))
  2880.     if ((odistance = rn->info) != NULL)
  2881.       {
  2882. vty_out (vty, " distance %d %s/%d %s%s", odistance->distance,
  2883.  inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen,
  2884.  odistance->access_list ? odistance->access_list : "",
  2885.  VTY_NEWLINE);
  2886.       }
  2887.   return 0;
  2888. }
  2889. /* OSPF configuration write function. */
  2890. int
  2891. ospf_config_write (struct vty *vty)
  2892. {
  2893.   struct ospf *ospf;
  2894.   listnode node;
  2895.   int write = 0;
  2896.   ospf = ospf_lookup ();
  2897.   if (ospf != NULL)
  2898.     {
  2899.       /* `router ospf' print. */
  2900.       vty_out (vty, "router ospf%s", VTY_NEWLINE);
  2901.       write++;
  2902.       if (!ospf->networks)
  2903.         return write;
  2904.       /* Router ID print. */
  2905.       if (ospf->router_id_static.s_addr != 0)
  2906.         vty_out (vty, " ospf router-id %s%s",
  2907.                  inet_ntoa (ospf->router_id_static), VTY_NEWLINE);
  2908.       /* ABR type print. */
  2909.       if (ospf->abr_type != OSPF_ABR_STAND)
  2910.         vty_out (vty, " ospf abr-type %s%s", 
  2911.                  ospf_abr_type_str[ospf->abr_type], VTY_NEWLINE);
  2912.       /* RFC1583 compatibility flag print -- Compatible with CISCO 12.1. */
  2913.       if (CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE))
  2914. vty_out (vty, " compatible rfc1583%s", VTY_NEWLINE);
  2915.       /* auto-cost reference-bandwidth configuration.  */
  2916.       if (ospf->ref_bandwidth != OSPF_DEFAULT_REF_BANDWIDTH)
  2917. vty_out (vty, " auto-cost reference-bandwidth %d%s",
  2918.  ospf->ref_bandwidth / 1000, VTY_NEWLINE);
  2919.       /* SPF timers print. */
  2920.       if (ospf->spf_delay != OSPF_SPF_DELAY_DEFAULT ||
  2921.   ospf->spf_holdtime != OSPF_SPF_HOLDTIME_DEFAULT)
  2922. vty_out (vty, " timers spf %d %d%s",
  2923.  ospf->spf_delay, ospf->spf_holdtime, VTY_NEWLINE);
  2924.       /* SPF refresh parameters print. */
  2925.       if (ospf->lsa_refresh_interval != OSPF_LSA_REFRESH_INTERVAL_DEFAULT)
  2926. vty_out (vty, " refresh timer %d%s",
  2927.  ospf->lsa_refresh_interval, VTY_NEWLINE);
  2928.       /* Redistribute information print. */
  2929.       config_write_ospf_redistribute (vty, ospf);
  2930.       /* passive-interface print. */
  2931.       for (node = listhead (om->iflist); node; nextnode (node))
  2932.         {
  2933.           struct interface *ifp = getdata (node);
  2934.   if (!ifp)
  2935.     continue;
  2936.   if (IF_DEF_PARAMS (ifp)->passive_interface == OSPF_IF_PASSIVE)
  2937.     vty_out (vty, " passive-interface %s%s",
  2938.      ifp->name, VTY_NEWLINE);
  2939.         }
  2940.       for (node = listhead (ospf->oiflist); node; nextnode (node))
  2941.         {
  2942.           struct ospf_interface *oi = getdata (node);
  2943.   if (OSPF_IF_PARAM_CONFIGURED (oi->params, passive_interface) &&
  2944.       oi->params->passive_interface == OSPF_IF_PASSIVE)
  2945.     vty_out (vty, " passive-interface %s%s",
  2946.      inet_ntoa (oi->address->u.prefix4), VTY_NEWLINE);
  2947.         }
  2948.       
  2949.       /* Network area print. */
  2950.       config_write_network_area (vty, ospf);
  2951.       /* Area config print. */
  2952.       config_write_ospf_area (vty, ospf);
  2953.       /* static neighbor print. */
  2954.       config_write_ospf_nbr_nbma (vty, ospf);
  2955.       /* Virtual-Link print. */
  2956.       config_write_virtual_link (vty, ospf);
  2957.       /* Default metric configuration.  */
  2958.       config_write_ospf_default_metric (vty, ospf);
  2959.       /* Distribute-list and default-information print. */
  2960.       config_write_ospf_distribute (vty, ospf);
  2961.       /* Distance configuration. */
  2962.       config_write_ospf_distance (vty, ospf);
  2963. #ifdef HAVE_OPAQUE_LSA
  2964.       ospf_opaque_config_write_router (vty, ospf);
  2965. #endif /* HAVE_OPAQUE_LSA */
  2966.     }
  2967.   return write;
  2968. }
  2969. void
  2970. ospf_vty_show_init ()
  2971. {
  2972.   /* "show ip ospf" commands. */
  2973.   install_element (VIEW_NODE, &show_ip_ospf_cmd);
  2974.   install_element (ENABLE_NODE, &show_ip_ospf_cmd);
  2975.   /* "show ip ospf database" commands. */
  2976.   install_element (VIEW_NODE, &show_ip_ospf_database_type_cmd);
  2977.   install_element (VIEW_NODE, &show_ip_ospf_database_type_id_cmd);
  2978.   install_element (VIEW_NODE, &show_ip_ospf_database_type_id_adv_router_cmd);
  2979.   install_element (VIEW_NODE, &show_ip_ospf_database_type_adv_router_cmd);
  2980.   install_element (VIEW_NODE, &show_ip_ospf_database_type_id_self_cmd);
  2981.   install_element (VIEW_NODE, &show_ip_ospf_database_type_self_cmd);
  2982.   install_element (VIEW_NODE, &show_ip_ospf_database_cmd);
  2983.   install_element (ENABLE_NODE, &show_ip_ospf_database_type_cmd);
  2984.   install_element (ENABLE_NODE, &show_ip_ospf_database_type_id_cmd);
  2985.   install_element (ENABLE_NODE, &show_ip_ospf_database_type_id_adv_router_cmd);
  2986.   install_element (ENABLE_NODE, &show_ip_ospf_database_type_adv_router_cmd);
  2987.   install_element (ENABLE_NODE, &show_ip_ospf_database_type_id_self_cmd);
  2988.   install_element (ENABLE_NODE, &show_ip_ospf_database_type_self_cmd);
  2989.   install_element (ENABLE_NODE, &show_ip_ospf_database_cmd);
  2990.   /* "show ip ospf interface" commands. */
  2991.   install_element (VIEW_NODE, &show_ip_ospf_interface_cmd);
  2992.   install_element (ENABLE_NODE, &show_ip_ospf_interface_cmd);
  2993.   /* "show ip ospf neighbor" commands. */
  2994.   install_element (VIEW_NODE, &show_ip_ospf_neighbor_int_detail_cmd);
  2995.   install_element (VIEW_NODE, &show_ip_ospf_neighbor_int_cmd);
  2996.   install_element (VIEW_NODE, &show_ip_ospf_neighbor_id_cmd);
  2997.   install_element (VIEW_NODE, &show_ip_ospf_neighbor_detail_all_cmd);
  2998.   install_element (VIEW_NODE, &show_ip_ospf_neighbor_detail_cmd);
  2999.   install_element (VIEW_NODE, &show_ip_ospf_neighbor_cmd);
  3000.   install_element (VIEW_NODE, &show_ip_ospf_neighbor_all_cmd);
  3001.   install_element (ENABLE_NODE, &show_ip_ospf_neighbor_int_detail_cmd);
  3002.   install_element (ENABLE_NODE, &show_ip_ospf_neighbor_int_cmd);
  3003.   install_element (ENABLE_NODE, &show_ip_ospf_neighbor_id_cmd);
  3004.   install_element (ENABLE_NODE, &show_ip_ospf_neighbor_detail_all_cmd);
  3005.   install_element (ENABLE_NODE, &show_ip_ospf_neighbor_detail_cmd);
  3006.   install_element (ENABLE_NODE, &show_ip_ospf_neighbor_cmd);
  3007.   install_element (ENABLE_NODE, &show_ip_ospf_neighbor_all_cmd);
  3008.   /* "show ip ospf route" commands. */
  3009.   install_element (VIEW_NODE, &show_ip_ospf_route_cmd);
  3010.   install_element (ENABLE_NODE, &show_ip_ospf_route_cmd);
  3011. #ifdef HAVE_NSSA
  3012.   install_element (VIEW_NODE, &show_ip_ospf_border_routers_cmd);
  3013.   install_element (ENABLE_NODE, &show_ip_ospf_border_routers_cmd);
  3014. #endif /* HAVE_NSSA */
  3015. }
  3016. /* ospfd's interface node. */
  3017. struct cmd_node interface_node =
  3018.   {
  3019.     INTERFACE_NODE,
  3020.     "%s(config-if)# ",
  3021.     1
  3022.   };
  3023. /* Initialization of OSPF interface. */
  3024. void
  3025. ospf_vty_if_init ()
  3026. {
  3027.   /* Install interface node. */
  3028.   install_node (&interface_node, config_write_interface);
  3029.   install_element (CONFIG_NODE, &interface_cmd);
  3030.   install_default (INTERFACE_NODE);
  3031.   /* "description" commands. */
  3032.   install_element (INTERFACE_NODE, &interface_desc_cmd);
  3033.   install_element (INTERFACE_NODE, &no_interface_desc_cmd);
  3034.   /* "ip ospf authentication" commands. */
  3035.   install_element (INTERFACE_NODE, &ip_ospf_authentication_args_addr_cmd);
  3036.   install_element (INTERFACE_NODE, &ip_ospf_authentication_args_cmd);
  3037.   install_element (INTERFACE_NODE, &ip_ospf_authentication_addr_cmd);
  3038.   install_element (INTERFACE_NODE, &ip_ospf_authentication_cmd);
  3039.   install_element (INTERFACE_NODE, &no_ip_ospf_authentication_addr_cmd);
  3040.   install_element (INTERFACE_NODE, &no_ip_ospf_authentication_cmd);
  3041.   install_element (INTERFACE_NODE, &ip_ospf_authentication_key_addr_cmd);
  3042.   install_element (INTERFACE_NODE, &ip_ospf_authentication_key_cmd);
  3043.   install_element (INTERFACE_NODE, &no_ip_ospf_authentication_key_addr_cmd);
  3044.   install_element (INTERFACE_NODE, &no_ip_ospf_authentication_key_cmd);
  3045.   /* "ip ospf message-digest-key" commands. */
  3046.   install_element (INTERFACE_NODE, &ip_ospf_message_digest_key_addr_cmd);
  3047.   install_element (INTERFACE_NODE, &ip_ospf_message_digest_key_cmd);
  3048.   install_element (INTERFACE_NODE, &no_ip_ospf_message_digest_key_addr_cmd);
  3049.   install_element (INTERFACE_NODE, &no_ip_ospf_message_digest_key_cmd);
  3050.   /* "ip ospf cost" commands. */
  3051.   install_element (INTERFACE_NODE, &ip_ospf_cost_addr_cmd);
  3052.   install_element (INTERFACE_NODE, &ip_ospf_cost_cmd);
  3053.   install_element (INTERFACE_NODE, &no_ip_ospf_cost_addr_cmd);
  3054.   install_element (INTERFACE_NODE, &no_ip_ospf_cost_cmd);
  3055.   /* "ip ospf dead-interval" commands. */
  3056.   install_element (INTERFACE_NODE, &ip_ospf_dead_interval_addr_cmd);
  3057.   install_element (INTERFACE_NODE, &ip_ospf_dead_interval_cmd);
  3058.   install_element (INTERFACE_NODE, &no_ip_ospf_dead_interval_addr_cmd);
  3059.   install_element (INTERFACE_NODE, &no_ip_ospf_dead_interval_cmd);
  3060.   /* "ip ospf hello-interval" commands. */
  3061.   install_element (INTERFACE_NODE, &ip_ospf_hello_interval_addr_cmd);
  3062.   install_element (INTERFACE_NODE, &ip_ospf_hello_interval_cmd);
  3063.   install_element (INTERFACE_NODE, &no_ip_ospf_hello_interval_addr_cmd);
  3064.   install_element (INTERFACE_NODE, &no_ip_ospf_hello_interval_cmd);
  3065.   /* "ip ospf network" commands. */
  3066.   install_element (INTERFACE_NODE, &ip_ospf_network_cmd);
  3067.   install_element (INTERFACE_NODE, &no_ip_ospf_network_cmd);
  3068.   /* "ip ospf priority" commands. */
  3069.   install_element (INTERFACE_NODE, &ip_ospf_priority_addr_cmd);
  3070.   install_element (INTERFACE_NODE, &ip_ospf_priority_cmd);
  3071.   install_element (INTERFACE_NODE, &no_ip_ospf_priority_addr_cmd);
  3072.   install_element (INTERFACE_NODE, &no_ip_ospf_priority_cmd);
  3073.   /* "ip ospf retransmit-interval" commands. */
  3074.   install_element (INTERFACE_NODE, &ip_ospf_retransmit_interval_addr_cmd);
  3075.   install_element (INTERFACE_NODE, &ip_ospf_retransmit_interval_cmd);
  3076.   install_element (INTERFACE_NODE, &no_ip_ospf_retransmit_interval_addr_cmd);
  3077.   install_element (INTERFACE_NODE, &no_ip_ospf_retransmit_interval_cmd);
  3078.   /* "ip ospf transmit-delay" commands. */
  3079.   install_element (INTERFACE_NODE, &ip_ospf_transmit_delay_addr_cmd);
  3080.   install_element (INTERFACE_NODE, &ip_ospf_transmit_delay_cmd);
  3081.   install_element (INTERFACE_NODE, &no_ip_ospf_transmit_delay_addr_cmd);
  3082.   install_element (INTERFACE_NODE, &no_ip_ospf_transmit_delay_cmd);
  3083.   /* These commands are compatibitliy for previous version. */
  3084.   install_element (INTERFACE_NODE, &ospf_authentication_key_cmd);
  3085.   install_element (INTERFACE_NODE, &no_ospf_authentication_key_cmd);
  3086.   install_element (INTERFACE_NODE, &ospf_message_digest_key_cmd);
  3087.   install_element (INTERFACE_NODE, &no_ospf_message_digest_key_cmd);
  3088.   install_element (INTERFACE_NODE, &ospf_cost_cmd);
  3089.   install_element (INTERFACE_NODE, &no_ospf_cost_cmd);
  3090.   install_element (INTERFACE_NODE, &ospf_dead_interval_cmd);
  3091.   install_element (INTERFACE_NODE, &no_ospf_dead_interval_cmd);
  3092.   install_element (INTERFACE_NODE, &ospf_hello_interval_cmd);
  3093.   install_element (INTERFACE_NODE, &no_ospf_hello_interval_cmd);
  3094.   install_element (INTERFACE_NODE, &ospf_network_cmd);
  3095.   install_element (INTERFACE_NODE, &no_ospf_network_cmd);
  3096.   install_element (INTERFACE_NODE, &ospf_priority_cmd);
  3097.   install_element (INTERFACE_NODE, &no_ospf_priority_cmd);
  3098.   install_element (INTERFACE_NODE, &ospf_retransmit_interval_cmd);
  3099.   install_element (INTERFACE_NODE, &no_ospf_retransmit_interval_cmd);
  3100.   install_element (INTERFACE_NODE, &ospf_transmit_delay_cmd);
  3101.   install_element (INTERFACE_NODE, &no_ospf_transmit_delay_cmd);
  3102. }
  3103. /* Zebra node structure. */
  3104. struct cmd_node zebra_node =
  3105.   {
  3106.     ZEBRA_NODE,
  3107.     "%s(config-router)#",
  3108.   };
  3109. void
  3110. ospf_vty_zebra_init ()
  3111. {
  3112.   install_element (OSPF_NODE, &ospf_redistribute_source_type_metric_cmd);
  3113.   install_element (OSPF_NODE, &ospf_redistribute_source_metric_type_cmd);
  3114.   install_element (OSPF_NODE, &ospf_redistribute_source_type_cmd);
  3115.   install_element (OSPF_NODE, &ospf_redistribute_source_metric_cmd);
  3116.   install_element (OSPF_NODE, &ospf_redistribute_source_cmd);
  3117.   install_element (OSPF_NODE,
  3118.    &ospf_redistribute_source_metric_type_routemap_cmd);
  3119.   install_element (OSPF_NODE,
  3120.    &ospf_redistribute_source_type_metric_routemap_cmd);
  3121.   install_element (OSPF_NODE, &ospf_redistribute_source_metric_routemap_cmd);
  3122.   install_element (OSPF_NODE, &ospf_redistribute_source_type_routemap_cmd);
  3123.   install_element (OSPF_NODE, &ospf_redistribute_source_routemap_cmd);
  3124.   
  3125.   install_element (OSPF_NODE, &no_ospf_redistribute_source_cmd);
  3126.   install_element (OSPF_NODE, &ospf_distribute_list_out_cmd);
  3127.   install_element (OSPF_NODE, &no_ospf_distribute_list_out_cmd);
  3128.   install_element (OSPF_NODE,
  3129.    &ospf_default_information_originate_metric_type_cmd);
  3130.   install_element (OSPF_NODE, &ospf_default_information_originate_metric_cmd);
  3131.   install_element (OSPF_NODE,
  3132.    &ospf_default_information_originate_type_metric_cmd);
  3133.   install_element (OSPF_NODE, &ospf_default_information_originate_type_cmd);
  3134.   install_element (OSPF_NODE, &ospf_default_information_originate_cmd);
  3135.   install_element (OSPF_NODE,
  3136.    &ospf_default_information_originate_always_metric_type_cmd);
  3137.   install_element (OSPF_NODE,
  3138.    &ospf_default_information_originate_always_metric_cmd);
  3139.   install_element (OSPF_NODE,
  3140.    &ospf_default_information_originate_always_cmd);
  3141.   install_element (OSPF_NODE,
  3142.    &ospf_default_information_originate_always_type_metric_cmd);
  3143.   install_element (OSPF_NODE,
  3144.    &ospf_default_information_originate_always_type_cmd);
  3145.   install_element (OSPF_NODE,
  3146.    &ospf_default_information_originate_metric_type_routemap_cmd);
  3147.   install_element (OSPF_NODE,
  3148.    &ospf_default_information_originate_metric_routemap_cmd);
  3149.   install_element (OSPF_NODE,
  3150.    &ospf_default_information_originate_routemap_cmd);
  3151.   install_element (OSPF_NODE,
  3152.    &ospf_default_information_originate_type_metric_routemap_cmd);
  3153.   install_element (OSPF_NODE,
  3154.    &ospf_default_information_originate_type_routemap_cmd);
  3155.   install_element (OSPF_NODE,
  3156.    &ospf_default_information_originate_always_metric_type_routemap_cmd);
  3157.   install_element (OSPF_NODE,
  3158.    &ospf_default_information_originate_always_metric_routemap_cmd);
  3159.   install_element (OSPF_NODE,
  3160.    &ospf_default_information_originate_always_routemap_cmd);
  3161.   install_element (OSPF_NODE,
  3162.    &ospf_default_information_originate_always_type_metric_routemap_cmd);
  3163.   install_element (OSPF_NODE,
  3164.    &ospf_default_information_originate_always_type_routemap_cmd);
  3165.   install_element (OSPF_NODE, &no_ospf_default_information_originate_cmd);
  3166.   install_element (OSPF_NODE, &ospf_default_metric_cmd);
  3167.   install_element (OSPF_NODE, &no_ospf_default_metric_cmd);
  3168.   install_element (OSPF_NODE, &no_ospf_default_metric_val_cmd);
  3169.   install_element (OSPF_NODE, &ospf_distance_cmd);
  3170.   install_element (OSPF_NODE, &no_ospf_distance_cmd);
  3171.   install_element (OSPF_NODE, &no_ospf_distance_ospf_cmd);
  3172.   install_element (OSPF_NODE, &ospf_distance_ospf_intra_cmd);
  3173.   install_element (OSPF_NODE, &ospf_distance_ospf_intra_inter_cmd);
  3174.   install_element (OSPF_NODE, &ospf_distance_ospf_intra_external_cmd);
  3175.   install_element (OSPF_NODE, &ospf_distance_ospf_intra_inter_external_cmd);
  3176.   install_element (OSPF_NODE, &ospf_distance_ospf_intra_external_inter_cmd);
  3177.   install_element (OSPF_NODE, &ospf_distance_ospf_inter_cmd);
  3178.   install_element (OSPF_NODE, &ospf_distance_ospf_inter_intra_cmd);
  3179.   install_element (OSPF_NODE, &ospf_distance_ospf_inter_external_cmd);
  3180.   install_element (OSPF_NODE, &ospf_distance_ospf_inter_intra_external_cmd);
  3181.   install_element (OSPF_NODE, &ospf_distance_ospf_inter_external_intra_cmd);
  3182.   install_element (OSPF_NODE, &ospf_distance_ospf_external_cmd);
  3183.   install_element (OSPF_NODE, &ospf_distance_ospf_external_intra_cmd);
  3184.   install_element (OSPF_NODE, &ospf_distance_ospf_external_inter_cmd);
  3185.   install_element (OSPF_NODE, &ospf_distance_ospf_external_intra_inter_cmd);
  3186.   install_element (OSPF_NODE, &ospf_distance_ospf_external_inter_intra_cmd);
  3187.   install_element (OSPF_NODE, &ospf_distance_source_cmd);
  3188.   install_element (OSPF_NODE, &no_ospf_distance_source_cmd);
  3189.   install_element (OSPF_NODE, &ospf_distance_source_access_list_cmd);
  3190.   install_element (OSPF_NODE, &no_ospf_distance_source_access_list_cmd);
  3191. }
  3192. struct cmd_node ospf_node =
  3193.   {
  3194.     OSPF_NODE,
  3195.     "%s(config-router)# ",
  3196.     1
  3197.   };
  3198. /* Install OSPF related vty commands. */
  3199. void
  3200. ospf_vty_init ()
  3201. {
  3202.   /* Install ospf top node. */
  3203.   install_node (&ospf_node, ospf_config_write);
  3204.   /* "router ospf" commands. */
  3205.   install_element (CONFIG_NODE, &router_ospf_cmd);
  3206.   install_element (CONFIG_NODE, &no_router_ospf_cmd);
  3207.   install_default (OSPF_NODE);
  3208.   /* "ospf router-id" commands. */
  3209.   install_element (OSPF_NODE, &ospf_router_id_cmd);
  3210.   install_element (OSPF_NODE, &no_ospf_router_id_cmd);
  3211.   install_element (OSPF_NODE, &router_ospf_id_cmd);
  3212.   install_element (OSPF_NODE, &no_router_ospf_id_cmd);
  3213.   /* "passive-interface" commands. */
  3214.   install_element (OSPF_NODE, &ospf_passive_interface_addr_cmd);
  3215.   install_element (OSPF_NODE, &ospf_passive_interface_cmd);
  3216.   install_element (OSPF_NODE, &no_ospf_passive_interface_addr_cmd);
  3217.   install_element (OSPF_NODE, &no_ospf_passive_interface_cmd);
  3218.   /* "ospf abr-type" commands. */
  3219.   install_element (OSPF_NODE, &ospf_abr_type_cmd);
  3220.   install_element (OSPF_NODE, &no_ospf_abr_type_cmd);
  3221.   /* "ospf rfc1583-compatible" commands. */
  3222.   install_element (OSPF_NODE, &ospf_rfc1583_flag_cmd);
  3223.   install_element (OSPF_NODE, &no_ospf_rfc1583_flag_cmd);
  3224.   install_element (OSPF_NODE, &ospf_compatible_rfc1583_cmd);
  3225.   install_element (OSPF_NODE, &no_ospf_compatible_rfc1583_cmd);
  3226.   /* "network area" commands. */
  3227.   install_element (OSPF_NODE, &ospf_network_area_cmd);
  3228.   install_element (OSPF_NODE, &no_ospf_network_area_cmd);
  3229.   /* "area authentication" commands. */
  3230.   install_element (OSPF_NODE, &ospf_area_authentication_message_digest_cmd);
  3231.   install_element (OSPF_NODE, &ospf_area_authentication_cmd);
  3232.   install_element (OSPF_NODE, &no_ospf_area_authentication_cmd);
  3233.   /* "area range" commands.  */
  3234.   install_element (OSPF_NODE, &ospf_area_range_cmd);
  3235.   install_element (OSPF_NODE, &ospf_area_range_advertise_cmd);
  3236.   install_element (OSPF_NODE, &ospf_area_range_cost_cmd);
  3237.   install_element (OSPF_NODE, &ospf_area_range_advertise_cost_cmd);
  3238.   install_element (OSPF_NODE, &ospf_area_range_not_advertise_cmd);
  3239.   install_element (OSPF_NODE, &no_ospf_area_range_cmd);
  3240.   install_element (OSPF_NODE, &no_ospf_area_range_advertise_cmd);
  3241.   install_element (OSPF_NODE, &no_ospf_area_range_cost_cmd);
  3242.   install_element (OSPF_NODE, &no_ospf_area_range_advertise_cost_cmd);
  3243.   install_element (OSPF_NODE, &ospf_area_range_substitute_cmd);
  3244.   install_element (OSPF_NODE, &no_ospf_area_range_substitute_cmd);
  3245.   /* "area virtual-link" commands. */
  3246.   install_element (OSPF_NODE, &ospf_area_vlink_cmd);
  3247.   install_element (OSPF_NODE, &no_ospf_area_vlink_cmd);
  3248.   install_element (OSPF_NODE, &ospf_area_vlink_param1_cmd);
  3249.   install_element (OSPF_NODE, &no_ospf_area_vlink_param1_cmd);
  3250.   install_element (OSPF_NODE, &ospf_area_vlink_param2_cmd);
  3251.   install_element (OSPF_NODE, &no_ospf_area_vlink_param2_cmd);
  3252.   install_element (OSPF_NODE, &ospf_area_vlink_param3_cmd);
  3253.   install_element (OSPF_NODE, &no_ospf_area_vlink_param3_cmd);
  3254.   install_element (OSPF_NODE, &ospf_area_vlink_param4_cmd);
  3255.   install_element (OSPF_NODE, &no_ospf_area_vlink_param4_cmd);
  3256.   install_element (OSPF_NODE, &ospf_area_vlink_authtype_args_cmd);
  3257.   install_element (OSPF_NODE, &ospf_area_vlink_authtype_cmd);
  3258.   install_element (OSPF_NODE, &no_ospf_area_vlink_authtype_cmd);
  3259.   install_element (OSPF_NODE, &ospf_area_vlink_md5_cmd);
  3260.   install_element (OSPF_NODE, &no_ospf_area_vlink_md5_cmd);
  3261.   install_element (OSPF_NODE, &ospf_area_vlink_authkey_cmd);
  3262.   install_element (OSPF_NODE, &no_ospf_area_vlink_authkey_cmd);
  3263.   install_element (OSPF_NODE, &ospf_area_vlink_authtype_args_authkey_cmd);
  3264.   install_element (OSPF_NODE, &ospf_area_vlink_authtype_authkey_cmd);
  3265.   install_element (OSPF_NODE, &no_ospf_area_vlink_authtype_authkey_cmd);
  3266.   install_element (OSPF_NODE, &ospf_area_vlink_authtype_args_md5_cmd);
  3267.   install_element (OSPF_NODE, &ospf_area_vlink_authtype_md5_cmd);
  3268.   install_element (OSPF_NODE, &no_ospf_area_vlink_authtype_md5_cmd);
  3269.   /* "area stub" commands. */
  3270.   install_element (OSPF_NODE, &ospf_area_stub_no_summary_cmd);
  3271.   install_element (OSPF_NODE, &ospf_area_stub_cmd);
  3272.   install_element (OSPF_NODE, &no_ospf_area_stub_no_summary_cmd);
  3273.   install_element (OSPF_NODE, &no_ospf_area_stub_cmd);
  3274. #ifdef HAVE_NSSA
  3275.   /* "area nssa" commands. */
  3276.   install_element (OSPF_NODE, &ospf_area_nssa_cmd);
  3277.   install_element (OSPF_NODE, &ospf_area_nssa_translate_no_summary_cmd);
  3278.   install_element (OSPF_NODE, &ospf_area_nssa_translate_cmd);
  3279.   install_element (OSPF_NODE, &ospf_area_nssa_no_summary_cmd);
  3280.   install_element (OSPF_NODE, &no_ospf_area_nssa_cmd);
  3281.   install_element (OSPF_NODE, &no_ospf_area_nssa_no_summary_cmd);
  3282. #endif /* HAVE_NSSA */
  3283.   install_element (OSPF_NODE, &ospf_area_default_cost_cmd);
  3284.   install_element (OSPF_NODE, &no_ospf_area_default_cost_cmd);
  3285.   install_element (OSPF_NODE, &ospf_area_shortcut_cmd);
  3286.   install_element (OSPF_NODE, &no_ospf_area_shortcut_cmd);
  3287.   install_element (OSPF_NODE, &ospf_area_export_list_cmd);
  3288.   install_element (OSPF_NODE, &no_ospf_area_export_list_cmd);
  3289.   install_element (OSPF_NODE, &ospf_area_filter_list_cmd);
  3290.   install_element (OSPF_NODE, &no_ospf_area_filter_list_cmd);
  3291.   install_element (OSPF_NODE, &ospf_area_import_list_cmd);
  3292.   install_element (OSPF_NODE, &no_ospf_area_import_list_cmd);
  3293.   install_element (OSPF_NODE, &ospf_timers_spf_cmd);
  3294.   install_element (OSPF_NODE, &no_ospf_timers_spf_cmd);
  3295.   install_element (OSPF_NODE, &ospf_refresh_timer_cmd);
  3296.   install_element (OSPF_NODE, &no_ospf_refresh_timer_val_cmd);
  3297.   install_element (OSPF_NODE, &no_ospf_refresh_timer_cmd);
  3298.   
  3299.   install_element (OSPF_NODE, &ospf_auto_cost_reference_bandwidth_cmd);
  3300.   install_element (OSPF_NODE, &no_ospf_auto_cost_reference_bandwidth_cmd);
  3301.   /* "neighbor" commands. */
  3302.   install_element (OSPF_NODE, &ospf_neighbor_cmd);
  3303.   install_element (OSPF_NODE, &ospf_neighbor_priority_poll_interval_cmd);
  3304.   install_element (OSPF_NODE, &ospf_neighbor_priority_cmd);
  3305.   install_element (OSPF_NODE, &ospf_neighbor_poll_interval_cmd);
  3306.   install_element (OSPF_NODE, &ospf_neighbor_poll_interval_priority_cmd);
  3307.   install_element (OSPF_NODE, &no_ospf_neighbor_cmd);
  3308.   install_element (OSPF_NODE, &no_ospf_neighbor_priority_cmd);
  3309.   install_element (OSPF_NODE, &no_ospf_neighbor_poll_interval_cmd);
  3310.   /* Init interface related vty commands. */
  3311.   ospf_vty_if_init ();
  3312.   /* Init zebra related vty commands. */
  3313.   ospf_vty_zebra_init ();
  3314. }