| 
version 1.1.1.1, 2012/02/21 17:26:12
 | 
version 1.1.1.4, 2016/11/02 10:09:12
 | 
| 
 Line 49
 | 
 Line 49
 | 
 |  #include "ospfd/ospf_vty.h" | 
  #include "ospfd/ospf_vty.h" | 
 |  #include "ospfd/ospf_dump.h" | 
  #include "ospfd/ospf_dump.h" | 
 |   | 
   | 
 |  | 
 |  static const char *ospf_network_type_str[] = | 
  static const char *ospf_network_type_str[] = | 
 |  { | 
  { | 
 |    "Null", | 
    "Null", | 
| 
 Line 61  static const char *ospf_network_type_str[] =
 | 
 Line 61  static const char *ospf_network_type_str[] =
 | 
 |    "LOOPBACK" | 
    "LOOPBACK" | 
 |  }; | 
  }; | 
 |   | 
   | 
 |  | 
 |  /* Utility functions. */ | 
  /* Utility functions. */ | 
 |  static int | 
  static int | 
 |  ospf_str2area_id (const char *str, struct in_addr *area_id, int *format) | 
  ospf_str2area_id (const char *str, struct in_addr *area_id, int *format) | 
| 
 Line 80  ospf_str2area_id (const char *str, struct in_addr *are
 | 
 Line 80  ospf_str2area_id (const char *str, struct in_addr *are
 | 
 |    /* match "<0-4294967295>". */ | 
    /* match "<0-4294967295>". */ | 
 |    else | 
    else | 
 |      { | 
      { | 
 |   | 
        if (*str == '-') | 
 |   | 
          return -1; | 
 |   | 
        errno = 0; | 
 |        ret = strtoul (str, &endptr, 10); | 
        ret = strtoul (str, &endptr, 10); | 
|       if (*endptr != '\0' || (ret == ULONG_MAX && errno == ERANGE)) |       if (*endptr != '\0' || errno || ret > UINT32_MAX) | 
 |          return -1; | 
          return -1; | 
 |   | 
   | 
 |        area_id->s_addr = htonl (ret); | 
        area_id->s_addr = htonl (ret); | 
| 
 Line 91  ospf_str2area_id (const char *str, struct in_addr *are
 | 
 Line 94  ospf_str2area_id (const char *str, struct in_addr *are
 | 
 |    return 0; | 
    return 0; | 
 |  } | 
  } | 
 |   | 
   | 
 |   | 
   | 
 |  static int | 
   | 
 |  str2distribute_source (const char *str, int *source) | 
   | 
 |  { | 
   | 
 |    /* Sanity check. */ | 
   | 
 |    if (str == NULL) | 
   | 
 |      return 0; | 
   | 
 |   | 
   | 
 |    if (strncmp (str, "k", 1) == 0) | 
   | 
 |      *source = ZEBRA_ROUTE_KERNEL; | 
   | 
 |    else if (strncmp (str, "c", 1) == 0) | 
   | 
 |      *source = ZEBRA_ROUTE_CONNECT; | 
   | 
 |    else if (strncmp (str, "s", 1) == 0) | 
   | 
 |      *source = ZEBRA_ROUTE_STATIC; | 
   | 
 |    else if (strncmp (str, "r", 1) == 0) | 
   | 
 |      *source = ZEBRA_ROUTE_RIP; | 
   | 
 |    else if (strncmp (str, "b", 1) == 0) | 
   | 
 |      *source = ZEBRA_ROUTE_BGP; | 
   | 
 |    else | 
   | 
 |      return 0; | 
   | 
 |   | 
   | 
 |    return 1; | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  static int | 
  static int | 
 |  str2metric (const char *str, int *metric) | 
  str2metric (const char *str, int *metric) | 
 |  { | 
  { | 
| 
 Line 162  ospf_oi_count (struct interface *ifp)
 | 
 Line 142  ospf_oi_count (struct interface *ifp)
 | 
 |    return i; | 
    return i; | 
 |  } | 
  } | 
 |   | 
   | 
 |  | 
 |  DEFUN (router_ospf, | 
  DEFUN (router_ospf, | 
 |         router_ospf_cmd, | 
         router_ospf_cmd, | 
 |         "router ospf", | 
         "router ospf", | 
| 
 Line 274  ospf_passive_interface_default (struct ospf *ospf, u_c
 | 
 Line 254  ospf_passive_interface_default (struct ospf *ospf, u_c
 | 
 |  } | 
  } | 
 |   | 
   | 
 |  static void | 
  static void | 
| ospf_passive_interface_update (struct ospf *ospf, struct interface *ifp, | ospf_passive_interface_update_addr (struct ospf *ospf, struct interface *ifp, | 
|                                struct in_addr addr,  |                                struct ospf_if_params *params, u_char value, | 
|                                struct ospf_if_params *params, u_char value) |                                struct in_addr addr) | 
 |  { | 
  { | 
 |    u_char dflt; | 
    u_char dflt; | 
 |     | 
     | 
| 
 Line 296  ospf_passive_interface_update (struct ospf *ospf, stru
 | 
 Line 276  ospf_passive_interface_update (struct ospf *ospf, stru
 | 
 |        ospf_free_if_params (ifp, addr); | 
        ospf_free_if_params (ifp, addr); | 
 |        ospf_if_update_params (ifp, addr); | 
        ospf_if_update_params (ifp, addr); | 
 |      } | 
      } | 
|   else | } | 
|   |  | 
|   | static void | 
|   | ospf_passive_interface_update (struct ospf *ospf, struct interface *ifp, | 
|   |                                struct ospf_if_params *params, u_char value) | 
|   | { | 
|   |   params->passive_interface = value; | 
|   |   if (params == IF_DEF_PARAMS (ifp)) | 
 |      { | 
      { | 
 |        if (value != ospf->passive_interface_default) | 
        if (value != ospf->passive_interface_default) | 
 |          SET_IF_PARAM (params, passive_interface); | 
          SET_IF_PARAM (params, passive_interface); | 
| 
 Line 305  ospf_passive_interface_update (struct ospf *ospf, stru
 | 
 Line 292  ospf_passive_interface_update (struct ospf *ospf, stru
 | 
 |      } | 
      } | 
 |  } | 
  } | 
 |   | 
   | 
 |   | 
  /* get the appropriate ospf parameters structure, checking if | 
 |   | 
   * there's a valid interface address at the argi'th argv index | 
 |   | 
   */ | 
 |   | 
  enum { | 
 |   | 
    VTY_SET = 0, | 
 |   | 
    VTY_UNSET, | 
 |   | 
  }; | 
 |   | 
  #define OSPF_VTY_GET_IF_PARAMS(ifp,params,argi,addr,set) \ | 
 |   | 
    (params) = IF_DEF_PARAMS ((ifp));           \ | 
 |   | 
                                                \ | 
 |   | 
    if (argc == (argi) + 1)                     \ | 
 |   | 
      {                                         \ | 
 |   | 
        int ret = inet_aton(argv[(argi)], &(addr)); \ | 
 |   | 
        if (!ret)                               \ | 
 |   | 
          {                                     \ | 
 |   | 
            vty_out (vty, "Please specify interface address by A.B.C.D%s", \ | 
 |   | 
                     VTY_NEWLINE);              \ | 
 |   | 
            return CMD_WARNING;                 \ | 
 |   | 
          }                                     \ | 
 |   | 
        (params) = ospf_get_if_params ((ifp), (addr)); \ | 
 |   | 
                                                \ | 
 |   | 
        if (set)                                \ | 
 |   | 
          ospf_if_update_params ((ifp), (addr));  \ | 
 |   | 
        else if ((params) == NULL)              \ | 
 |   | 
          return CMD_SUCCESS;                   \ | 
 |   | 
      } | 
 |   | 
   | 
 |   | 
  #define OSPF_VTY_PARAM_UNSET(params,var,ifp,addr) \ | 
 |   | 
    UNSET_IF_PARAM ((params), var);               \ | 
 |   | 
      if ((params) != IF_DEF_PARAMS ((ifp)))        \ | 
 |   | 
      {                                             \ | 
 |   | 
        ospf_free_if_params ((ifp), (addr));        \ | 
 |   | 
        ospf_if_update_params ((ifp), (addr));      \ | 
 |   | 
      } | 
 |   | 
   | 
 |  DEFUN (ospf_passive_interface, | 
  DEFUN (ospf_passive_interface, | 
 |         ospf_passive_interface_addr_cmd, | 
         ospf_passive_interface_addr_cmd, | 
 |         "passive-interface IFNAME A.B.C.D", | 
         "passive-interface IFNAME A.B.C.D", | 
| 
 Line 340  DEFUN (ospf_passive_interface,
 | 
 Line 362  DEFUN (ospf_passive_interface,
 | 
 |   | 
   | 
 |        params = ospf_get_if_params (ifp, addr); | 
        params = ospf_get_if_params (ifp, addr); | 
 |        ospf_if_update_params (ifp, addr); | 
        ospf_if_update_params (ifp, addr); | 
 |   | 
        ospf_passive_interface_update_addr (ospf, ifp, params, | 
 |   | 
                                            OSPF_IF_PASSIVE, addr); | 
 |      } | 
      } | 
|   ospf_passive_interface_update (ospf, ifp, addr, params, OSPF_IF_PASSIVE); |    | 
|   |   ospf_passive_interface_update (ospf, ifp, params, OSPF_IF_PASSIVE); | 
 |   | 
   | 
 |    /* XXX We should call ospf_if_set_multicast on exactly those | 
    /* XXX We should call ospf_if_set_multicast on exactly those | 
 |     * interfaces for which the passive property changed.  It is too much | 
     * interfaces for which the passive property changed.  It is too much | 
| 
 Line 417  DEFUN (no_ospf_passive_interface,
 | 
 Line 442  DEFUN (no_ospf_passive_interface,
 | 
 |        params = ospf_lookup_if_params (ifp, addr); | 
        params = ospf_lookup_if_params (ifp, addr); | 
 |        if (params == NULL) | 
        if (params == NULL) | 
 |          return CMD_SUCCESS; | 
          return CMD_SUCCESS; | 
 |   | 
        ospf_passive_interface_update_addr (ospf, ifp, params, OSPF_IF_ACTIVE,  | 
 |   | 
                                            addr); | 
 |      } | 
      } | 
|   ospf_passive_interface_update (ospf, ifp, addr, params, OSPF_IF_ACTIVE); |   ospf_passive_interface_update (ospf, ifp, params, OSPF_IF_ACTIVE); | 
 |    | 
 |    /* XXX We should call ospf_if_set_multicast on exactly those | 
    /* XXX We should call ospf_if_set_multicast on exactly those | 
 |     * interfaces for which the passive property changed.  It is too much | 
     * interfaces for which the passive property changed.  It is too much | 
 |     * work to determine this set, so we do this for every interface. | 
     * work to determine this set, so we do this for every interface. | 
| 
 Line 461  DEFUN (ospf_network_area,
 | 
 Line 488  DEFUN (ospf_network_area,
 | 
 |         "OSPF area ID in IP address format\n" | 
         "OSPF area ID in IP address format\n" | 
 |         "OSPF area ID as a decimal value\n") | 
         "OSPF area ID as a decimal value\n") | 
 |  { | 
  { | 
|   struct ospf *ospf= vty->index; |   struct ospf *ospf = vty->index; | 
 |    struct prefix_ipv4 p; | 
    struct prefix_ipv4 p; | 
 |    struct in_addr area_id; | 
    struct in_addr area_id; | 
 |    int ret, format; | 
    int ret, format; | 
| 
 Line 510  DEFUN (no_ospf_network_area,
 | 
 Line 537  DEFUN (no_ospf_network_area,
 | 
 |    return CMD_SUCCESS; | 
    return CMD_SUCCESS; | 
 |  } | 
  } | 
 |   | 
   | 
 |  | 
 |  DEFUN (ospf_area_range, | 
  DEFUN (ospf_area_range, | 
 |         ospf_area_range_cmd, | 
         ospf_area_range_cmd, | 
 |         "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M", | 
         "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M", | 
| 
 Line 654  ALIAS (no_ospf_area_range,
 | 
 Line 681  ALIAS (no_ospf_area_range,
 | 
 |         "Advertise this range (default)\n" | 
         "Advertise this range (default)\n" | 
 |         "User specified metric for this range\n" | 
         "User specified metric for this range\n" | 
 |         "Advertised metric for this range\n") | 
         "Advertised metric for this range\n") | 
 |  | 
 |  DEFUN (ospf_area_range_substitute, | 
  DEFUN (ospf_area_range_substitute, | 
 |         ospf_area_range_substitute_cmd, | 
         ospf_area_range_substitute_cmd, | 
 |         "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M substitute A.B.C.D/M", | 
         "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M substitute A.B.C.D/M", | 
| 
 Line 706  DEFUN (no_ospf_area_range_substitute,
 | 
 Line 733  DEFUN (no_ospf_area_range_substitute,
 | 
 |    return CMD_SUCCESS; | 
    return CMD_SUCCESS; | 
 |  } | 
  } | 
 |   | 
   | 
 |  | 
 |  /* Command Handler Logic in VLink stuff is delicate!! | 
  /* Command Handler Logic in VLink stuff is delicate!! | 
 |   | 
   | 
 |          ALTER AT YOUR OWN RISK!!!! | 
          ALTER AT YOUR OWN RISK!!!! | 
| 
 Line 791  ospf_find_vl_data (struct ospf *ospf, struct ospf_vl_c
 | 
 Line 818  ospf_find_vl_data (struct ospf *ospf, struct ospf_vl_c
 | 
 |          { | 
          { | 
 |            vl_data->vl_oi = ospf_vl_new (ospf, vl_data); | 
            vl_data->vl_oi = ospf_vl_new (ospf, vl_data); | 
 |            ospf_vl_add (ospf, vl_data); | 
            ospf_vl_add (ospf, vl_data); | 
|           ospf_spf_calculate_schedule (ospf); |           ospf_spf_calculate_schedule (ospf, SPF_FLAG_CONFIG_CHANGE); | 
 |          } | 
          } | 
 |      } | 
      } | 
 |    return vl_data; | 
    return vl_data; | 
| 
 Line 1402  ALIAS (no_ospf_area_vlink,
 | 
 Line 1429  ALIAS (no_ospf_area_vlink,
 | 
 |         VLINK_HELPSTR_AUTHTYPE_SIMPLE | 
         VLINK_HELPSTR_AUTHTYPE_SIMPLE | 
 |         VLINK_HELPSTR_AUTH_MD5) | 
         VLINK_HELPSTR_AUTH_MD5) | 
 |   | 
   | 
 |  | 
 |  DEFUN (ospf_area_shortcut, | 
  DEFUN (ospf_area_shortcut, | 
 |         ospf_area_shortcut_cmd, | 
         ospf_area_shortcut_cmd, | 
 |         "area (A.B.C.D|<0-4294967295>) shortcut (default|enable|disable)", | 
         "area (A.B.C.D|<0-4294967295>) shortcut (default|enable|disable)", | 
| 
 Line 1470  DEFUN (no_ospf_area_shortcut,
 | 
 Line 1497  DEFUN (no_ospf_area_shortcut,
 | 
 |    return CMD_SUCCESS; | 
    return CMD_SUCCESS; | 
 |  } | 
  } | 
 |   | 
   | 
 |  | 
 |  DEFUN (ospf_area_stub, | 
  DEFUN (ospf_area_stub, | 
 |         ospf_area_stub_cmd, | 
         ospf_area_stub_cmd, | 
 |         "area (A.B.C.D|<0-4294967295>) stub", | 
         "area (A.B.C.D|<0-4294967295>) stub", | 
| 
 Line 1762  DEFUN (no_ospf_area_default_cost,
 | 
 Line 1789  DEFUN (no_ospf_area_default_cost,
 | 
 |    struct ospf *ospf = vty->index; | 
    struct ospf *ospf = vty->index; | 
 |    struct ospf_area *area; | 
    struct ospf_area *area; | 
 |    struct in_addr area_id; | 
    struct in_addr area_id; | 
 |    u_int32_t cost; | 
   | 
 |    int format; | 
    int format; | 
 |    struct prefix_ipv4 p; | 
    struct prefix_ipv4 p; | 
 |   | 
   | 
 |    VTY_GET_OSPF_AREA_ID_NO_BB ("default-cost", area_id, format, argv[0]); | 
    VTY_GET_OSPF_AREA_ID_NO_BB ("default-cost", area_id, format, argv[0]); | 
|   VTY_GET_INTEGER_RANGE ("stub default cost", cost, argv[1], 0, 16777215); |   VTY_CHECK_INTEGER_RANGE ("stub default cost", argv[1], 0, OSPF_LS_INFINITY); | 
 |   | 
   | 
 |    area = ospf_area_lookup_by_area_id (ospf, area_id); | 
    area = ospf_area_lookup_by_area_id (ospf, area_id); | 
 |    if (area == NULL) | 
    if (area == NULL) | 
| 
 Line 1953  DEFUN (no_ospf_area_filter_list,
 | 
 Line 1979  DEFUN (no_ospf_area_filter_list,
 | 
 |    struct ospf *ospf = vty->index; | 
    struct ospf *ospf = vty->index; | 
 |    struct ospf_area *area; | 
    struct ospf_area *area; | 
 |    struct in_addr area_id; | 
    struct in_addr area_id; | 
 |    struct prefix_list *plist; | 
   | 
 |    int format; | 
    int format; | 
 |   | 
   | 
 |    VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]); | 
    VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]); | 
| 
 Line 1961  DEFUN (no_ospf_area_filter_list,
 | 
 Line 1986  DEFUN (no_ospf_area_filter_list,
 | 
 |    if ((area = ospf_area_lookup_by_area_id (ospf, area_id)) == NULL) | 
    if ((area = ospf_area_lookup_by_area_id (ospf, area_id)) == NULL) | 
 |      return CMD_SUCCESS; | 
      return CMD_SUCCESS; | 
 |     | 
     | 
 |    plist = prefix_list_lookup (AFI_IP, argv[1]); | 
   | 
 |    if (strncmp (argv[2], "in", 2) == 0) | 
    if (strncmp (argv[2], "in", 2) == 0) | 
 |      { | 
      { | 
 |        if (PREFIX_NAME_IN (area)) | 
        if (PREFIX_NAME_IN (area)) | 
| 
 Line 1994  DEFUN (no_ospf_area_filter_list,
 | 
 Line 2018  DEFUN (no_ospf_area_filter_list,
 | 
 |    return CMD_SUCCESS; | 
    return CMD_SUCCESS; | 
 |  } | 
  } | 
 |   | 
   | 
 |  | 
 |  DEFUN (ospf_area_authentication_message_digest, | 
  DEFUN (ospf_area_authentication_message_digest, | 
 |         ospf_area_authentication_message_digest_cmd, | 
         ospf_area_authentication_message_digest_cmd, | 
 |         "area (A.B.C.D|<0-4294967295>) authentication message-digest", | 
         "area (A.B.C.D|<0-4294967295>) authentication message-digest", | 
 |         "OSPF area parameters\n" | 
         "OSPF area parameters\n" | 
 |   | 
         "OSPF area ID in IP address format\n" | 
 |   | 
         "OSPF area ID as a decimal value\n" | 
 |         "Enable authentication\n" | 
         "Enable authentication\n" | 
 |         "Use message-digest authentication\n") | 
         "Use message-digest authentication\n") | 
 |  { | 
  { | 
| 
 Line 2063  DEFUN (no_ospf_area_authentication,
 | 
 Line 2089  DEFUN (no_ospf_area_authentication,
 | 
 |    return CMD_SUCCESS; | 
    return CMD_SUCCESS; | 
 |  } | 
  } | 
 |   | 
   | 
 |  | 
 |  DEFUN (ospf_abr_type, | 
  DEFUN (ospf_abr_type, | 
 |         ospf_abr_type_cmd, | 
         ospf_abr_type_cmd, | 
 |         "ospf abr-type (cisco|ibm|shortcut|standard)", | 
         "ospf abr-type (cisco|ibm|shortcut|standard)", | 
| 
 Line 2193  DEFUN (ospf_compatible_rfc1583,
 | 
 Line 2219  DEFUN (ospf_compatible_rfc1583,
 | 
 |    if (!CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE)) | 
    if (!CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE)) | 
 |      { | 
      { | 
 |        SET_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE); | 
        SET_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE); | 
|       ospf_spf_calculate_schedule (ospf); |       ospf_spf_calculate_schedule (ospf, SPF_FLAG_CONFIG_CHANGE); | 
 |      } | 
      } | 
 |    return CMD_SUCCESS; | 
    return CMD_SUCCESS; | 
 |  } | 
  } | 
| 
 Line 2210  DEFUN (no_ospf_compatible_rfc1583,
 | 
 Line 2236  DEFUN (no_ospf_compatible_rfc1583,
 | 
 |    if (CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE)) | 
    if (CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE)) | 
 |      { | 
      { | 
 |        UNSET_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE); | 
        UNSET_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE); | 
|       ospf_spf_calculate_schedule (ospf); |       ospf_spf_calculate_schedule (ospf, SPF_FLAG_CONFIG_CHANGE); | 
 |      } | 
      } | 
 |    return CMD_SUCCESS; | 
    return CMD_SUCCESS; | 
 |  } | 
  } | 
| 
 Line 2227  ALIAS (no_ospf_compatible_rfc1583,
 | 
 Line 2253  ALIAS (no_ospf_compatible_rfc1583,
 | 
 |         NO_STR | 
         NO_STR | 
 |         "OSPF specific commands\n" | 
         "OSPF specific commands\n" | 
 |         "Disable the RFC1583Compatibility flag\n") | 
         "Disable the RFC1583Compatibility flag\n") | 
 |  | 
 |  static int | 
  static int | 
 |  ospf_timers_spf_set (struct vty *vty, unsigned int delay, | 
  ospf_timers_spf_set (struct vty *vty, unsigned int delay, | 
 |                       unsigned int hold, | 
                       unsigned int hold, | 
| 
 Line 2242  ospf_timers_spf_set (struct vty *vty, unsigned int del
 | 
 Line 2268  ospf_timers_spf_set (struct vty *vty, unsigned int del
 | 
 |    return CMD_SUCCESS; | 
    return CMD_SUCCESS; | 
 |  } | 
  } | 
 |   | 
   | 
 |   | 
  DEFUN (ospf_timers_min_ls_interval, | 
 |   | 
         ospf_timers_min_ls_interval_cmd, | 
 |   | 
         "timers throttle lsa all <0-5000>", | 
 |   | 
         "Adjust routing timers\n" | 
 |   | 
         "Throttling adaptive timer\n" | 
 |   | 
         "LSA delay between transmissions\n" | 
 |   | 
         NO_STR | 
 |   | 
         "Delay (msec) between sending LSAs\n") | 
 |   | 
  { | 
 |   | 
    struct ospf *ospf = vty->index; | 
 |   | 
    unsigned int interval; | 
 |   | 
   | 
 |   | 
    if (argc != 1) | 
 |   | 
      { | 
 |   | 
        vty_out (vty, "Insufficient arguments%s", VTY_NEWLINE); | 
 |   | 
        return CMD_WARNING; | 
 |   | 
      } | 
 |   | 
   | 
 |   | 
    VTY_GET_INTEGER ("LSA interval", interval, argv[0]); | 
 |   | 
   | 
 |   | 
    ospf->min_ls_interval = interval; | 
 |   | 
   | 
 |   | 
    return CMD_SUCCESS; | 
 |   | 
  } | 
 |   | 
   | 
 |   | 
  DEFUN (no_ospf_timers_min_ls_interval, | 
 |   | 
         no_ospf_timers_min_ls_interval_cmd, | 
 |   | 
         "no timers throttle lsa all", | 
 |   | 
         NO_STR | 
 |   | 
         "Adjust routing timers\n" | 
 |   | 
         "Throttling adaptive timer\n" | 
 |   | 
         "LSA delay between transmissions\n") | 
 |   | 
  { | 
 |   | 
    struct ospf *ospf = vty->index; | 
 |   | 
    ospf->min_ls_interval = OSPF_MIN_LS_INTERVAL; | 
 |   | 
   | 
 |   | 
    return CMD_SUCCESS; | 
 |   | 
  } | 
 |   | 
   | 
 |   | 
  DEFUN (ospf_timers_min_ls_arrival, | 
 |   | 
         ospf_timers_min_ls_arrival_cmd, | 
 |   | 
         "timers lsa arrival <0-1000>", | 
 |   | 
         "Adjust routing timers\n" | 
 |   | 
         "Throttling link state advertisement delays\n" | 
 |   | 
         "OSPF minimum arrival interval delay\n" | 
 |   | 
         "Delay (msec) between accepted LSAs\n") | 
 |   | 
  { | 
 |   | 
    struct ospf *ospf = vty->index; | 
 |   | 
    unsigned int arrival; | 
 |   | 
   | 
 |   | 
    if (argc != 1) | 
 |   | 
      { | 
 |   | 
        vty_out (vty, "Insufficient arguments%s", VTY_NEWLINE); | 
 |   | 
        return CMD_WARNING; | 
 |   | 
      } | 
 |   | 
   | 
 |   | 
    VTY_GET_INTEGER_RANGE ("minimum LSA inter-arrival time", arrival, argv[0], 0, 1000); | 
 |   | 
   | 
 |   | 
    ospf->min_ls_arrival = arrival; | 
 |   | 
   | 
 |   | 
    return CMD_SUCCESS; | 
 |   | 
  } | 
 |   | 
   | 
 |   | 
  DEFUN (no_ospf_timers_min_ls_arrival, | 
 |   | 
         no_ospf_timers_min_ls_arrival_cmd, | 
 |   | 
         "no timers lsa arrival", | 
 |   | 
         NO_STR | 
 |   | 
         "Adjust routing timers\n" | 
 |   | 
         "Throttling link state advertisement delays\n" | 
 |   | 
         "OSPF minimum arrival interval delay\n") | 
 |   | 
  { | 
 |   | 
    struct ospf *ospf = vty->index; | 
 |   | 
    ospf->min_ls_arrival = OSPF_MIN_LS_ARRIVAL; | 
 |   | 
   | 
 |   | 
    return CMD_SUCCESS; | 
 |   | 
  } | 
 |   | 
   | 
 |  DEFUN (ospf_timers_throttle_spf, | 
  DEFUN (ospf_timers_throttle_spf, | 
 |         ospf_timers_throttle_spf_cmd, | 
         ospf_timers_throttle_spf_cmd, | 
 |         "timers throttle spf <0-600000> <0-600000> <0-600000>", | 
         "timers throttle spf <0-600000> <0-600000> <0-600000>", | 
| 
 Line 2318  ALIAS_DEPRECATED (no_ospf_timers_throttle_spf,
 | 
 Line 2421  ALIAS_DEPRECATED (no_ospf_timers_throttle_spf,
 | 
 |                    NO_STR | 
                    NO_STR | 
 |                    "Adjust routing timers\n" | 
                    "Adjust routing timers\n" | 
 |                    "OSPF SPF timers\n") | 
                    "OSPF SPF timers\n") | 
 |  | 
 |  DEFUN (ospf_neighbor, | 
  DEFUN (ospf_neighbor, | 
 |         ospf_neighbor_cmd, | 
         ospf_neighbor_cmd, | 
 |         "neighbor A.B.C.D", | 
         "neighbor A.B.C.D", | 
| 
 Line 2342  DEFUN (ospf_neighbor,
 | 
 Line 2445  DEFUN (ospf_neighbor,
 | 
 |    if (argc > 1) | 
    if (argc > 1) | 
 |      ospf_nbr_nbma_priority_set (ospf, nbr_addr, priority); | 
      ospf_nbr_nbma_priority_set (ospf, nbr_addr, priority); | 
 |    if (argc > 2) | 
    if (argc > 2) | 
|     ospf_nbr_nbma_poll_interval_set (ospf, nbr_addr, priority); |     ospf_nbr_nbma_poll_interval_set (ospf, nbr_addr, interval); | 
 |   | 
   | 
 |    return CMD_SUCCESS; | 
    return CMD_SUCCESS; | 
 |  } | 
  } | 
| 
 Line 2414  DEFUN (no_ospf_neighbor,
 | 
 Line 2517  DEFUN (no_ospf_neighbor,
 | 
 |  { | 
  { | 
 |    struct ospf *ospf = vty->index; | 
    struct ospf *ospf = vty->index; | 
 |    struct in_addr nbr_addr; | 
    struct in_addr nbr_addr; | 
 |    int ret; | 
   | 
 |   | 
   | 
 |    VTY_GET_IPV4_ADDRESS ("neighbor address", nbr_addr, argv[0]); | 
    VTY_GET_IPV4_ADDRESS ("neighbor address", nbr_addr, argv[0]); | 
 |   | 
   | 
|   ret = ospf_nbr_nbma_unset (ospf, nbr_addr); |   (void)ospf_nbr_nbma_unset (ospf, nbr_addr); | 
 |   | 
   | 
 |    return CMD_SUCCESS; | 
    return CMD_SUCCESS; | 
 |  } | 
  } | 
| 
 Line 2452  ALIAS (no_ospf_neighbor,
 | 
 Line 2554  ALIAS (no_ospf_neighbor,
 | 
 |         "Dead Neighbor Polling interval\n" | 
         "Dead Neighbor Polling interval\n" | 
 |         "Seconds\n") | 
         "Seconds\n") | 
 |   | 
   | 
 |  | 
 |  DEFUN (ospf_refresh_timer, ospf_refresh_timer_cmd, | 
  DEFUN (ospf_refresh_timer, ospf_refresh_timer_cmd, | 
 |         "refresh timer <10-1800>", | 
         "refresh timer <10-1800>", | 
 |         "Adjust refresh parameters\n" | 
         "Adjust refresh parameters\n" | 
| 
 Line 2570  const char *ospf_shortcut_mode_descr_str[] = 
 | 
 Line 2672  const char *ospf_shortcut_mode_descr_str[] = 
 | 
 |  }; | 
  }; | 
 |   | 
   | 
 |   | 
   | 
 |  | 
 |  static void | 
  static void | 
 |  show_ip_ospf_area (struct vty *vty, struct ospf_area *area) | 
  show_ip_ospf_area (struct vty *vty, struct ospf_area *area) | 
 |  { | 
  { | 
| 
 Line 2684  show_ip_ospf_area (struct vty *vty, struct ospf_area *
 | 
 Line 2786  show_ip_ospf_area (struct vty *vty, struct ospf_area *
 | 
 |    vty_out (vty, "   Number of NSSA LSA %ld. Checksum Sum 0x%08x%s", | 
    vty_out (vty, "   Number of NSSA LSA %ld. Checksum Sum 0x%08x%s", | 
 |             ospf_lsdb_count (area->lsdb, OSPF_AS_NSSA_LSA), | 
             ospf_lsdb_count (area->lsdb, OSPF_AS_NSSA_LSA), | 
 |             ospf_lsdb_checksum (area->lsdb, OSPF_AS_NSSA_LSA), VTY_NEWLINE); | 
             ospf_lsdb_checksum (area->lsdb, OSPF_AS_NSSA_LSA), VTY_NEWLINE); | 
 |  #ifdef HAVE_OPAQUE_LSA | 
   | 
 |    vty_out (vty, "   Number of opaque link LSA %ld. Checksum Sum 0x%08x%s", | 
    vty_out (vty, "   Number of opaque link LSA %ld. Checksum Sum 0x%08x%s", | 
 |             ospf_lsdb_count (area->lsdb, OSPF_OPAQUE_LINK_LSA), | 
             ospf_lsdb_count (area->lsdb, OSPF_OPAQUE_LINK_LSA), | 
 |             ospf_lsdb_checksum (area->lsdb, OSPF_OPAQUE_LINK_LSA), VTY_NEWLINE); | 
             ospf_lsdb_checksum (area->lsdb, OSPF_OPAQUE_LINK_LSA), VTY_NEWLINE); | 
 |    vty_out (vty, "   Number of opaque area LSA %ld. Checksum Sum 0x%08x%s", | 
    vty_out (vty, "   Number of opaque area LSA %ld. Checksum Sum 0x%08x%s", | 
 |             ospf_lsdb_count (area->lsdb, OSPF_OPAQUE_AREA_LSA), | 
             ospf_lsdb_count (area->lsdb, OSPF_OPAQUE_AREA_LSA), | 
 |             ospf_lsdb_checksum (area->lsdb, OSPF_OPAQUE_AREA_LSA), VTY_NEWLINE); | 
             ospf_lsdb_checksum (area->lsdb, OSPF_OPAQUE_AREA_LSA), VTY_NEWLINE); | 
 |  #endif /* HAVE_OPAQUE_LSA */ | 
   | 
 |    vty_out (vty, "%s", VTY_NEWLINE); | 
    vty_out (vty, "%s", VTY_NEWLINE); | 
 |  } | 
  } | 
 |   | 
   | 
| 
 Line 2732  DEFUN (show_ip_ospf,
 | 
 Line 2832  DEFUN (show_ip_ospf,
 | 
 |    vty_out (vty, " RFC1583Compatibility flag is %s%s", | 
    vty_out (vty, " RFC1583Compatibility flag is %s%s", | 
 |             CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE) ? | 
             CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE) ? | 
 |             "enabled" : "disabled", VTY_NEWLINE); | 
             "enabled" : "disabled", VTY_NEWLINE); | 
| #ifdef HAVE_OPAQUE_LSA |   vty_out (vty, " OpaqueCapability flag is %s%s", | 
|   vty_out (vty, " OpaqueCapability flag is %s%s%s", |   | 
 |             CHECK_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE) ? | 
             CHECK_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE) ? | 
 |             "enabled" : "disabled", | 
             "enabled" : "disabled", | 
 |             IS_OPAQUE_LSA_ORIGINATION_BLOCKED (ospf->opaque) ? | 
   | 
 |             " (origination blocked)" : "", | 
   | 
 |             VTY_NEWLINE); | 
             VTY_NEWLINE); | 
 |  #endif /* HAVE_OPAQUE_LSA */ | 
   | 
 |     | 
     | 
 |    /* Show stub-router configuration */ | 
    /* Show stub-router configuration */ | 
 |    if (ospf->stub_router_startup_time != OSPF_STUB_ROUTER_UNCONFIGURED | 
    if (ospf->stub_router_startup_time != OSPF_STUB_ROUTER_UNCONFIGURED | 
| 
 Line 2771  DEFUN (show_ip_ospf,
 | 
 Line 2867  DEFUN (show_ip_ospf,
 | 
 |        vty_out (vty, "last executed %s ago%s", | 
        vty_out (vty, "last executed %s ago%s", | 
 |                 ospf_timeval_dump (&result, timebuf, sizeof (timebuf)), | 
                 ospf_timeval_dump (&result, timebuf, sizeof (timebuf)), | 
 |                 VTY_NEWLINE); | 
                 VTY_NEWLINE); | 
 |   | 
        vty_out (vty, " Last SPF duration %s%s", | 
 |   | 
                 ospf_timeval_dump (&ospf->ts_spf_duration, timebuf, sizeof (timebuf)), | 
 |   | 
                 VTY_NEWLINE); | 
 |      } | 
      } | 
 |    else | 
    else | 
 |      vty_out (vty, "has not been run%s", VTY_NEWLINE); | 
      vty_out (vty, "has not been run%s", VTY_NEWLINE); | 
| 
 Line 2796  DEFUN (show_ip_ospf,
 | 
 Line 2895  DEFUN (show_ip_ospf,
 | 
 |    vty_out (vty, " Number of external LSA %ld. Checksum Sum 0x%08x%s", | 
    vty_out (vty, " Number of external LSA %ld. Checksum Sum 0x%08x%s", | 
 |             ospf_lsdb_count (ospf->lsdb, OSPF_AS_EXTERNAL_LSA), | 
             ospf_lsdb_count (ospf->lsdb, OSPF_AS_EXTERNAL_LSA), | 
 |             ospf_lsdb_checksum (ospf->lsdb, OSPF_AS_EXTERNAL_LSA), VTY_NEWLINE); | 
             ospf_lsdb_checksum (ospf->lsdb, OSPF_AS_EXTERNAL_LSA), VTY_NEWLINE); | 
 |  #ifdef HAVE_OPAQUE_LSA | 
   | 
 |    vty_out (vty, " Number of opaque AS LSA %ld. Checksum Sum 0x%08x%s", | 
    vty_out (vty, " Number of opaque AS LSA %ld. Checksum Sum 0x%08x%s", | 
 |             ospf_lsdb_count (ospf->lsdb, OSPF_OPAQUE_AS_LSA), | 
             ospf_lsdb_count (ospf->lsdb, OSPF_OPAQUE_AS_LSA), | 
 |             ospf_lsdb_checksum (ospf->lsdb, OSPF_OPAQUE_AS_LSA), VTY_NEWLINE); | 
             ospf_lsdb_checksum (ospf->lsdb, OSPF_OPAQUE_AS_LSA), VTY_NEWLINE); | 
 |  #endif /* HAVE_OPAQUE_LSA */ | 
   | 
 |    /* Show number of areas attached. */ | 
    /* Show number of areas attached. */ | 
 |    vty_out (vty, " Number of areas attached to this router: %d%s", | 
    vty_out (vty, " Number of areas attached to this router: %d%s", | 
 |             listcount (ospf->areas), VTY_NEWLINE); | 
             listcount (ospf->areas), VTY_NEWLINE); | 
| 
 Line 2822  DEFUN (show_ip_ospf,
 | 
 Line 2919  DEFUN (show_ip_ospf,
 | 
 |    return CMD_SUCCESS; | 
    return CMD_SUCCESS; | 
 |  } | 
  } | 
 |   | 
   | 
 |  | 
 |  static void | 
  static void | 
 |  show_ip_ospf_interface_sub (struct vty *vty, struct ospf *ospf, | 
  show_ip_ospf_interface_sub (struct vty *vty, struct ospf *ospf, | 
 |                              struct interface *ifp) | 
                              struct interface *ifp) | 
| 
 Line 3451  DEFUN (show_ip_ospf_neighbor_int_detail,
 | 
 Line 3548  DEFUN (show_ip_ospf_neighbor_int_detail,
 | 
 |    return CMD_SUCCESS; | 
    return CMD_SUCCESS; | 
 |  } | 
  } | 
 |   | 
   | 
 |  | 
 |  /* Show functions */ | 
  /* Show functions */ | 
 |  static int | 
  static int | 
 |  show_lsa_summary (struct vty *vty, struct ospf_lsa *lsa, int self) | 
  show_lsa_summary (struct vty *vty, struct ospf_lsa *lsa, int self) | 
| 
 Line 3503  show_lsa_summary (struct vty *vty, struct ospf_lsa *ls
 | 
 Line 3600  show_lsa_summary (struct vty *vty, struct ospf_lsa *ls
 | 
 |              break; | 
              break; | 
 |            case OSPF_NETWORK_LSA: | 
            case OSPF_NETWORK_LSA: | 
 |            case OSPF_ASBR_SUMMARY_LSA: | 
            case OSPF_ASBR_SUMMARY_LSA: | 
 |  #ifdef HAVE_OPAQUE_LSA | 
   | 
 |            case OSPF_OPAQUE_LINK_LSA: | 
            case OSPF_OPAQUE_LINK_LSA: | 
 |            case OSPF_OPAQUE_AREA_LSA: | 
            case OSPF_OPAQUE_AREA_LSA: | 
 |            case OSPF_OPAQUE_AS_LSA: | 
            case OSPF_OPAQUE_AS_LSA: | 
 |  #endif /* HAVE_OPAQUE_LSA */ | 
   | 
 |            default: | 
            default: | 
 |              break; | 
              break; | 
 |            } | 
            } | 
| 
 Line 3527  static const char *show_database_desc[] =
 | 
 Line 3622  static const char *show_database_desc[] =
 | 
 |    "AS External Link States", | 
    "AS External Link States", | 
 |    "Group Membership LSA", | 
    "Group Membership LSA", | 
 |    "NSSA-external Link States", | 
    "NSSA-external Link States", | 
 |  #ifdef HAVE_OPAQUE_LSA | 
   | 
 |    "Type-8 LSA", | 
    "Type-8 LSA", | 
 |    "Link-Local Opaque-LSA", | 
    "Link-Local Opaque-LSA", | 
 |    "Area-Local Opaque-LSA", | 
    "Area-Local Opaque-LSA", | 
 |    "AS-external Opaque-LSA", | 
    "AS-external Opaque-LSA", | 
 |  #endif /* HAVE_OPAQUE_LSA */ | 
   | 
 |  }; | 
  }; | 
 |   | 
   | 
 |  static const char *show_database_header[] = | 
  static const char *show_database_header[] = | 
| 
 Line 3545  static const char *show_database_header[] =
 | 
 Line 3638  static const char *show_database_header[] =
 | 
 |    "Link ID         ADV Router      Age  Seq#       CkSum  Route", | 
    "Link ID         ADV Router      Age  Seq#       CkSum  Route", | 
 |    " --- header for Group Member ----", | 
    " --- header for Group Member ----", | 
 |    "Link ID         ADV Router      Age  Seq#       CkSum  Route", | 
    "Link ID         ADV Router      Age  Seq#       CkSum  Route", | 
 |  #ifdef HAVE_OPAQUE_LSA | 
   | 
 |    " --- type-8 ---", | 
    " --- type-8 ---", | 
 |    "Opaque-Type/Id  ADV Router      Age  Seq#       CkSum", | 
    "Opaque-Type/Id  ADV Router      Age  Seq#       CkSum", | 
 |    "Opaque-Type/Id  ADV Router      Age  Seq#       CkSum", | 
    "Opaque-Type/Id  ADV Router      Age  Seq#       CkSum", | 
 |    "Opaque-Type/Id  ADV Router      Age  Seq#       CkSum", | 
    "Opaque-Type/Id  ADV Router      Age  Seq#       CkSum", | 
 |  #endif /* HAVE_OPAQUE_LSA */ | 
   | 
 |  }; | 
  }; | 
 |   | 
   | 
 |  static void | 
  static void | 
| 
 Line 3626  static void
 | 
 Line 3717  static void
 | 
 |  show_ip_ospf_database_router_links (struct vty *vty, | 
  show_ip_ospf_database_router_links (struct vty *vty, | 
 |                                      struct router_lsa *rl) | 
                                      struct router_lsa *rl) | 
 |  { | 
  { | 
|   int len, i, type; |   int len, type; | 
|   |   unsigned int i; | 
 |   | 
   | 
 |    len = ntohs (rl->header.length) - 4; | 
    len = ntohs (rl->header.length) - 4; | 
 |    for (i = 0; i < ntohs (rl->links) && len > 0; len -= 12, i++) | 
    for (i = 0; i < ntohs (rl->links) && len > 0; len -= 12, i++) | 
| 
 Line 3761  show_as_external_lsa_detail (struct vty *vty, struct o
 | 
 Line 3853  show_as_external_lsa_detail (struct vty *vty, struct o
 | 
 |    return 0; | 
    return 0; | 
 |  } | 
  } | 
 |   | 
   | 
| /* N.B. This function currently seems to be unused. */ | #if 0 | 
 |  static int | 
  static int | 
 |  show_as_external_lsa_stdvty (struct ospf_lsa *lsa) | 
  show_as_external_lsa_stdvty (struct ospf_lsa *lsa) | 
 |  { | 
  { | 
| 
 Line 3785  show_as_external_lsa_stdvty (struct ospf_lsa *lsa)
 | 
 Line 3877  show_as_external_lsa_stdvty (struct ospf_lsa *lsa)
 | 
 |   | 
   | 
 |    return 0; | 
    return 0; | 
 |  } | 
  } | 
 |   | 
  #endif | 
 |   | 
   | 
 |  /* Show AS-NSSA-LSA detail information. */ | 
  /* Show AS-NSSA-LSA detail information. */ | 
 |  static int | 
  static int | 
| 
 Line 3820  show_func_dummy (struct vty *vty, struct ospf_lsa *lsa
 | 
 Line 3913  show_func_dummy (struct vty *vty, struct ospf_lsa *lsa
 | 
 |    return 0; | 
    return 0; | 
 |  } | 
  } | 
 |   | 
   | 
 |  #ifdef HAVE_OPAQUE_LSA | 
   | 
 |  static int | 
  static int | 
 |  show_opaque_lsa_detail (struct vty *vty, struct ospf_lsa *lsa) | 
  show_opaque_lsa_detail (struct vty *vty, struct ospf_lsa *lsa) | 
 |  { | 
  { | 
| 
 Line 3833  show_opaque_lsa_detail (struct vty *vty, struct ospf_l
 | 
 Line 3925  show_opaque_lsa_detail (struct vty *vty, struct ospf_l
 | 
 |      } | 
      } | 
 |    return 0; | 
    return 0; | 
 |  } | 
  } | 
 |  #endif /* HAVE_OPAQUE_LSA */ | 
   | 
 |   | 
   | 
 |  int (*show_function[])(struct vty *, struct ospf_lsa *) = | 
  int (*show_function[])(struct vty *, struct ospf_lsa *) = | 
 |  { | 
  { | 
| 
 Line 3845  int (*show_function[])(struct vty *, struct ospf_lsa *
 | 
 Line 3936  int (*show_function[])(struct vty *, struct ospf_lsa *
 | 
 |    show_as_external_lsa_detail, | 
    show_as_external_lsa_detail, | 
 |    show_func_dummy, | 
    show_func_dummy, | 
 |    show_as_nssa_lsa_detail,  /* almost same as external */ | 
    show_as_nssa_lsa_detail,  /* almost same as external */ | 
 |  #ifdef HAVE_OPAQUE_LSA | 
   | 
 |    NULL,                         /* type-8 */ | 
    NULL,                         /* type-8 */ | 
 |    show_opaque_lsa_detail, | 
    show_opaque_lsa_detail, | 
 |    show_opaque_lsa_detail, | 
    show_opaque_lsa_detail, | 
 |    show_opaque_lsa_detail, | 
    show_opaque_lsa_detail, | 
 |  #endif /* HAVE_OPAQUE_LSA */ | 
   | 
 |  }; | 
  }; | 
 |   | 
   | 
 |  static void | 
  static void | 
| 
 Line 3909  show_lsa_detail (struct vty *vty, struct ospf *ospf, i
 | 
 Line 3998  show_lsa_detail (struct vty *vty, struct ospf *ospf, i
 | 
 |    switch (type) | 
    switch (type) | 
 |      { | 
      { | 
 |      case OSPF_AS_EXTERNAL_LSA: | 
      case OSPF_AS_EXTERNAL_LSA: | 
 |  #ifdef HAVE_OPAQUE_LSA | 
   | 
 |      case OSPF_OPAQUE_AS_LSA: | 
      case OSPF_OPAQUE_AS_LSA: | 
 |  #endif /* HAVE_OPAQUE_LSA */ | 
   | 
 |        vty_out (vty, "                %s %s%s", | 
        vty_out (vty, "                %s %s%s", | 
 |                 show_database_desc[type], | 
                 show_database_desc[type], | 
 |                 VTY_NEWLINE, VTY_NEWLINE); | 
                 VTY_NEWLINE, VTY_NEWLINE); | 
| 
 Line 3958  show_lsa_detail_adv_router (struct vty *vty, struct os
 | 
 Line 4045  show_lsa_detail_adv_router (struct vty *vty, struct os
 | 
 |    switch (type) | 
    switch (type) | 
 |      { | 
      { | 
 |      case OSPF_AS_EXTERNAL_LSA: | 
      case OSPF_AS_EXTERNAL_LSA: | 
 |  #ifdef HAVE_OPAQUE_LSA | 
   | 
 |      case OSPF_OPAQUE_AS_LSA: | 
      case OSPF_OPAQUE_AS_LSA: | 
 |  #endif /* HAVE_OPAQUE_LSA */ | 
   | 
 |        vty_out (vty, "                %s %s%s", | 
        vty_out (vty, "                %s %s%s", | 
 |                 show_database_desc[type], | 
                 show_database_desc[type], | 
 |                 VTY_NEWLINE, VTY_NEWLINE); | 
                 VTY_NEWLINE, VTY_NEWLINE); | 
| 
 Line 3996  show_ip_ospf_database_summary (struct vty *vty, struct
 | 
 Line 4081  show_ip_ospf_database_summary (struct vty *vty, struct
 | 
 |            switch (type) | 
            switch (type) | 
 |              { | 
              { | 
 |              case OSPF_AS_EXTERNAL_LSA: | 
              case OSPF_AS_EXTERNAL_LSA: | 
 |  #ifdef HAVE_OPAQUE_LSA | 
   | 
 |              case OSPF_OPAQUE_AS_LSA: | 
              case OSPF_OPAQUE_AS_LSA: | 
 |  #endif /* HAVE_OPAQUE_LSA */ | 
   | 
 |                continue; | 
                continue; | 
 |              default: | 
              default: | 
 |                break; | 
                break; | 
| 
 Line 4025  show_ip_ospf_database_summary (struct vty *vty, struct
 | 
 Line 4108  show_ip_ospf_database_summary (struct vty *vty, struct
 | 
 |        switch (type) | 
        switch (type) | 
 |          { | 
          { | 
 |            case OSPF_AS_EXTERNAL_LSA: | 
            case OSPF_AS_EXTERNAL_LSA: | 
 |  #ifdef HAVE_OPAQUE_LSA | 
   | 
 |            case OSPF_OPAQUE_AS_LSA: | 
            case OSPF_OPAQUE_AS_LSA: | 
 |  #endif /* HAVE_OPAQUE_LSA */ | 
   | 
 |              break; | 
              break; | 
 |            default: | 
            default: | 
 |              continue; | 
              continue; | 
| 
 Line 4054  show_ip_ospf_database_summary (struct vty *vty, struct
 | 
 Line 4135  show_ip_ospf_database_summary (struct vty *vty, struct
 | 
 |  static void | 
  static void | 
 |  show_ip_ospf_database_maxage (struct vty *vty, struct ospf *ospf) | 
  show_ip_ospf_database_maxage (struct vty *vty, struct ospf *ospf) | 
 |  { | 
  { | 
|   struct listnode *node; |   struct route_node *rn; | 
|   struct ospf_lsa *lsa; |   | 
 |   | 
   | 
 |    vty_out (vty, "%s                MaxAge Link States:%s%s", | 
    vty_out (vty, "%s                MaxAge Link States:%s%s", | 
 |             VTY_NEWLINE, VTY_NEWLINE, VTY_NEWLINE); | 
             VTY_NEWLINE, VTY_NEWLINE, VTY_NEWLINE); | 
 |   | 
   | 
|   for (ALL_LIST_ELEMENTS_RO (ospf->maxage_lsa, node, lsa)) |   for (rn = route_top (ospf->maxage_lsa); rn; rn = route_next (rn)) | 
 |      { | 
      { | 
|       vty_out (vty, "Link type: %d%s", lsa->data->type, VTY_NEWLINE); |       struct ospf_lsa *lsa; | 
|       vty_out (vty, "Link State ID: %s%s", |  | 
|                inet_ntoa (lsa->data->id), VTY_NEWLINE); |       if ((lsa = rn->info) != NULL) | 
|       vty_out (vty, "Advertising Router: %s%s", |         { | 
|                inet_ntoa (lsa->data->adv_router), VTY_NEWLINE); |           vty_out (vty, "Link type: %d%s", lsa->data->type, VTY_NEWLINE); | 
|       vty_out (vty, "LSA lock count: %d%s", lsa->lock, VTY_NEWLINE); |           vty_out (vty, "Link State ID: %s%s", | 
|       vty_out (vty, "%s", VTY_NEWLINE); |                    inet_ntoa (lsa->data->id), VTY_NEWLINE); | 
|   |           vty_out (vty, "Advertising Router: %s%s", | 
|   |                    inet_ntoa (lsa->data->adv_router), VTY_NEWLINE); | 
|   |           vty_out (vty, "LSA lock count: %d%s", lsa->lock, VTY_NEWLINE); | 
|   |           vty_out (vty, "%s", VTY_NEWLINE); | 
|   |         } | 
 |      } | 
      } | 
 |  } | 
  } | 
 |   | 
   | 
 |  #define OSPF_LSA_TYPE_NSSA_DESC      "NSSA external link state\n" | 
  #define OSPF_LSA_TYPE_NSSA_DESC      "NSSA external link state\n" | 
 |  #define OSPF_LSA_TYPE_NSSA_CMD_STR   "|nssa-external" | 
  #define OSPF_LSA_TYPE_NSSA_CMD_STR   "|nssa-external" | 
 |   | 
   | 
 |  #ifdef HAVE_OPAQUE_LSA | 
   | 
 |  #define OSPF_LSA_TYPE_OPAQUE_LINK_DESC "Link local Opaque-LSA\n" | 
  #define OSPF_LSA_TYPE_OPAQUE_LINK_DESC "Link local Opaque-LSA\n" | 
 |  #define OSPF_LSA_TYPE_OPAQUE_AREA_DESC "Link area Opaque-LSA\n" | 
  #define OSPF_LSA_TYPE_OPAQUE_AREA_DESC "Link area Opaque-LSA\n" | 
 |  #define OSPF_LSA_TYPE_OPAQUE_AS_DESC   "Link AS Opaque-LSA\n" | 
  #define OSPF_LSA_TYPE_OPAQUE_AS_DESC   "Link AS Opaque-LSA\n" | 
 |  #define OSPF_LSA_TYPE_OPAQUE_CMD_STR   "|opaque-link|opaque-area|opaque-as" | 
  #define OSPF_LSA_TYPE_OPAQUE_CMD_STR   "|opaque-link|opaque-area|opaque-as" | 
 |  #else /* HAVE_OPAQUE_LSA */ | 
   | 
 |  #define OSPF_LSA_TYPE_OPAQUE_LINK_DESC "" | 
   | 
 |  #define OSPF_LSA_TYPE_OPAQUE_AREA_DESC "" | 
   | 
 |  #define OSPF_LSA_TYPE_OPAQUE_AS_DESC   "" | 
   | 
 |  #define OSPF_LSA_TYPE_OPAQUE_CMD_STR   "" | 
   | 
 |  #endif /* HAVE_OPAQUE_LSA */ | 
   | 
 |   | 
   | 
 |  #define OSPF_LSA_TYPES_CMD_STR                                                \ | 
  #define OSPF_LSA_TYPES_CMD_STR                                                \ | 
 |      "asbr-summary|external|network|router|summary"                            \ | 
      "asbr-summary|external|network|router|summary"                            \ | 
| 
 Line 4155  DEFUN (show_ip_ospf_database,
 | 
 Line 4233  DEFUN (show_ip_ospf_database,
 | 
 |        show_ip_ospf_database_maxage (vty, ospf); | 
        show_ip_ospf_database_maxage (vty, ospf); | 
 |        return CMD_SUCCESS; | 
        return CMD_SUCCESS; | 
 |      } | 
      } | 
 |  #ifdef HAVE_OPAQUE_LSA | 
   | 
 |    else if (strncmp (argv[0], "opaque-l", 8) == 0) | 
    else if (strncmp (argv[0], "opaque-l", 8) == 0) | 
 |      type = OSPF_OPAQUE_LINK_LSA; | 
      type = OSPF_OPAQUE_LINK_LSA; | 
 |    else if (strncmp (argv[0], "opaque-ar", 9) == 0) | 
    else if (strncmp (argv[0], "opaque-ar", 9) == 0) | 
 |      type = OSPF_OPAQUE_AREA_LSA; | 
      type = OSPF_OPAQUE_AREA_LSA; | 
 |    else if (strncmp (argv[0], "opaque-as", 9) == 0) | 
    else if (strncmp (argv[0], "opaque-as", 9) == 0) | 
 |      type = OSPF_OPAQUE_AS_LSA; | 
      type = OSPF_OPAQUE_AS_LSA; | 
 |  #endif /* HAVE_OPAQUE_LSA */ | 
   | 
 |    else | 
    else | 
 |      return CMD_WARNING; | 
      return CMD_WARNING; | 
 |   | 
   | 
| 
 Line 4282  DEFUN (show_ip_ospf_database_type_adv_router,
 | 
 Line 4358  DEFUN (show_ip_ospf_database_type_adv_router,
 | 
 |      type = OSPF_ASBR_SUMMARY_LSA; | 
      type = OSPF_ASBR_SUMMARY_LSA; | 
 |    else if (strncmp (argv[0], "e", 1) == 0) | 
    else if (strncmp (argv[0], "e", 1) == 0) | 
 |      type = OSPF_AS_EXTERNAL_LSA; | 
      type = OSPF_AS_EXTERNAL_LSA; | 
 |  #ifdef HAVE_OPAQUE_LSA | 
   | 
 |    else if (strncmp (argv[0], "opaque-l", 8) == 0) | 
    else if (strncmp (argv[0], "opaque-l", 8) == 0) | 
 |      type = OSPF_OPAQUE_LINK_LSA; | 
      type = OSPF_OPAQUE_LINK_LSA; | 
 |    else if (strncmp (argv[0], "opaque-ar", 9) == 0) | 
    else if (strncmp (argv[0], "opaque-ar", 9) == 0) | 
 |      type = OSPF_OPAQUE_AREA_LSA; | 
      type = OSPF_OPAQUE_AREA_LSA; | 
 |    else if (strncmp (argv[0], "opaque-as", 9) == 0) | 
    else if (strncmp (argv[0], "opaque-as", 9) == 0) | 
 |      type = OSPF_OPAQUE_AS_LSA; | 
      type = OSPF_OPAQUE_AS_LSA; | 
 |  #endif /* HAVE_OPAQUE_LSA */ | 
   | 
 |    else | 
    else | 
 |      return CMD_WARNING; | 
      return CMD_WARNING; | 
 |   | 
   | 
| 
 Line 4318  ALIAS (show_ip_ospf_database_type_adv_router,
 | 
 Line 4392  ALIAS (show_ip_ospf_database_type_adv_router,
 | 
 |         OSPF_LSA_TYPES_DESC | 
         OSPF_LSA_TYPES_DESC | 
 |         "Self-originated link states\n") | 
         "Self-originated link states\n") | 
 |   | 
   | 
 |  | 
 |  DEFUN (ip_ospf_authentication_args, | 
  DEFUN (ip_ospf_authentication_args, | 
 |         ip_ospf_authentication_args_addr_cmd, | 
         ip_ospf_authentication_args_addr_cmd, | 
 |         "ip ospf authentication (null|message-digest) A.B.C.D", | 
         "ip ospf authentication (null|message-digest) A.B.C.D", | 
| 
 Line 5325  DEFUN (ip_ospf_network,
 | 
 Line 5399  DEFUN (ip_ospf_network,
 | 
 |    struct interface *ifp = vty->index; | 
    struct interface *ifp = vty->index; | 
 |    int old_type = IF_DEF_PARAMS (ifp)->type; | 
    int old_type = IF_DEF_PARAMS (ifp)->type; | 
 |    struct route_node *rn; | 
    struct route_node *rn; | 
|    |  | 
|   |   if (old_type == OSPF_IFTYPE_LOOPBACK) | 
|   |     { | 
|   |       vty_out (vty, "This is a loopback interface. Can't set network type.%s", VTY_NEWLINE); | 
|   |       return CMD_WARNING; | 
|   |     } | 
|   |  | 
 |    if (strncmp (argv[0], "b", 1) == 0) | 
    if (strncmp (argv[0], "b", 1) == 0) | 
 |      IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_BROADCAST; | 
      IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_BROADCAST; | 
 |    else if (strncmp (argv[0], "n", 1) == 0) | 
    else if (strncmp (argv[0], "n", 1) == 0) | 
| 
 Line 5422  DEFUN (ip_ospf_priority,
 | 
 Line 5502  DEFUN (ip_ospf_priority,
 | 
 |         "Address of interface") | 
         "Address of interface") | 
 |  { | 
  { | 
 |    struct interface *ifp = vty->index; | 
    struct interface *ifp = vty->index; | 
|   u_int32_t priority; |   long priority; | 
 |    struct route_node *rn; | 
    struct route_node *rn; | 
 |    struct in_addr addr; | 
    struct in_addr addr; | 
 |    int ret; | 
    int ret; | 
| 
 Line 5803  ALIAS (no_ip_ospf_transmit_delay,
 | 
 Line 5883  ALIAS (no_ip_ospf_transmit_delay,
 | 
 |         "OSPF interface commands\n" | 
         "OSPF interface commands\n" | 
 |         "Link state transmit delay\n") | 
         "Link state transmit delay\n") | 
 |   | 
   | 
 | DEFUN (ip_ospf_area, | 
| DEFUN (ospf_redistribute_source_metric_type, |        ip_ospf_area_cmd, | 
|        ospf_redistribute_source_metric_type_routemap_cmd, |        "ip ospf area (A.B.C.D|<0-4294967295>) [A.B.C.D]", | 
|        "redistribute " QUAGGA_REDIST_STR_OSPFD  |        "IP Information\n" | 
|          " metric <0-16777214> metric-type (1|2) route-map WORD", |        "OSPF interface commands\n" | 
|        REDIST_STR |        "Enable OSPF on this interface\n" | 
|        QUAGGA_REDIST_HELP_STR_OSPFD |        "OSPF area ID in IP address format\n" | 
|        "Metric for redistributed routes\n" |        "OSPF area ID as a decimal value\n" | 
|        "OSPF default metric\n" |        "Address of interface\n") | 
|        "OSPF exterior metric type for redistributed routes\n" |   | 
|        "Set OSPF External Type 1 metrics\n" |   | 
|        "Set OSPF External Type 2 metrics\n" |   | 
|        "Route map reference\n" |   | 
|        "Pointer to route-map entries\n") |   | 
 |  { | 
  { | 
|   struct ospf *ospf = vty->index; |   struct interface *ifp = vty->index; | 
|   int source; |   struct in_addr area_id; | 
|   int type = -1; |   struct in_addr addr; | 
|   int metric = -1; |   int format; | 
|   |   struct ospf_if_params *params; | 
 |   | 
   | 
|   /* Get distribute source. */ |   VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]); | 
|   if (!str2distribute_source (argv[0], &source)) |   | 
|     return CMD_WARNING; |   | 
 |   | 
   | 
|   /* Get metric value. */ |   OSPF_VTY_GET_IF_PARAMS(ifp, params, 1, addr, VTY_SET); | 
|   if (argc >= 2) |    | 
|     if (!str2metric (argv[1], &metric)) |   if (OSPF_IF_PARAM_CONFIGURED(params, if_area)) | 
|   |     { | 
|   |       vty_out (vty, "There is already an interface area statement.%s", | 
|   |               VTY_NEWLINE); | 
 |        return CMD_WARNING; | 
        return CMD_WARNING; | 
 |     } | 
|   /* Get metric type. */ |   if (memcmp (ifp->name, "VLINK", 5) == 0) | 
|   if (argc >= 3) |     { | 
|     if (!str2metric_type (argv[2], &type)) |       vty_out (vty, "Cannot enable OSPF on a virtual link.%s", VTY_NEWLINE); | 
 |        return CMD_WARNING; | 
        return CMD_WARNING; | 
 |   | 
      } | 
 |   | 
     | 
 |   | 
    SET_IF_PARAM (params, if_area); | 
 |   | 
    params->if_area = area_id; | 
 |   | 
    ospf_interface_area_set (ifp); | 
 |   | 
   | 
|   if (argc == 4) |   return CMD_SUCCESS; | 
|     ospf_routemap_set (ospf, source, argv[3]); | } | 
|   else |  | 
|     ospf_routemap_unset (ospf, source); | DEFUN (no_ip_ospf_area, | 
|   |        no_ip_ospf_area_cmd, | 
|   |        "no ip ospf area [A.B.C.D]", | 
|   |        NO_STR | 
|   |        "IP Information\n" | 
|   |        "OSPF interface commands\n" | 
|   |        "Disable OSPF on this interface\n" | 
|   |        "Address of interface\n") | 
|   | { | 
|   |   struct interface *ifp = vty->index; | 
|   |   struct ospf_if_params *params; | 
|   |   struct in_addr addr; | 
|   |  | 
|   |   OSPF_VTY_GET_IF_PARAMS(ifp, params, 0, addr, VTY_UNSET); | 
 |     | 
     | 
|   return ospf_redistribute_set (ospf, source, type, metric); |   if (!OSPF_IF_PARAM_CONFIGURED(params, if_area)) | 
|   |     return CMD_SUCCESS; | 
|   |    | 
|   |   OSPF_VTY_PARAM_UNSET(params, if_area, ifp, addr); | 
|   |    | 
|   |   ospf_interface_area_unset (ifp); | 
|   |  | 
|   |   return CMD_SUCCESS; | 
 |  } | 
  } | 
 |   | 
   | 
| ALIAS (ospf_redistribute_source_metric_type, | DEFUN (ospf_redistribute_source, | 
|        ospf_redistribute_source_metric_type_cmd, |        ospf_redistribute_source_cmd, | 
|        "redistribute " QUAGGA_REDIST_STR_OSPFD  |        "redistribute " QUAGGA_REDIST_STR_OSPFD | 
|        " metric <0-16777214> metric-type (1|2)", |          " {metric <0-16777214>|metric-type (1|2)|route-map WORD}", | 
 |         REDIST_STR | 
         REDIST_STR | 
 |         QUAGGA_REDIST_HELP_STR_OSPFD | 
         QUAGGA_REDIST_HELP_STR_OSPFD | 
 |         "Metric for redistributed routes\n" | 
         "Metric for redistributed routes\n" | 
 |         "OSPF default metric\n" | 
         "OSPF default metric\n" | 
 |         "OSPF exterior metric type for redistributed routes\n" | 
         "OSPF exterior metric type for redistributed routes\n" | 
 |         "Set OSPF External Type 1 metrics\n" | 
         "Set OSPF External Type 1 metrics\n" | 
 |         "Set OSPF External Type 2 metrics\n") | 
   | 
 |   | 
   | 
 |  ALIAS (ospf_redistribute_source_metric_type, | 
   | 
 |         ospf_redistribute_source_metric_cmd, | 
   | 
 |         "redistribute " QUAGGA_REDIST_STR_OSPFD " metric <0-16777214>", | 
   | 
 |         REDIST_STR | 
   | 
 |         QUAGGA_REDIST_HELP_STR_OSPFD | 
   | 
 |         "Metric for redistributed routes\n" | 
   | 
 |         "OSPF default metric\n") | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_redistribute_source_type_metric, | 
   | 
 |         ospf_redistribute_source_type_metric_routemap_cmd, | 
   | 
 |         "redistribute " QUAGGA_REDIST_STR_OSPFD  | 
   | 
 |           " metric-type (1|2) metric <0-16777214> route-map WORD", | 
   | 
 |         REDIST_STR | 
   | 
 |         QUAGGA_REDIST_HELP_STR_OSPFD | 
   | 
 |         "OSPF exterior metric type for redistributed routes\n" | 
   | 
 |         "Set OSPF External Type 1 metrics\n" | 
   | 
 |         "Set OSPF External Type 2 metrics\n" | 
         "Set OSPF External Type 2 metrics\n" | 
 |         "Metric for redistributed routes\n" | 
   | 
 |         "OSPF default metric\n" | 
   | 
 |         "Route map reference\n" | 
         "Route map reference\n" | 
 |         "Pointer to route-map entries\n") | 
         "Pointer to route-map entries\n") | 
 |  { | 
  { | 
| 
 Line 5884  DEFUN (ospf_redistribute_source_type_metric,
 | 
 Line 5966  DEFUN (ospf_redistribute_source_type_metric,
 | 
 |    int type = -1; | 
    int type = -1; | 
 |    int metric = -1; | 
    int metric = -1; | 
 |   | 
   | 
 |   | 
    if (argc < 4) | 
 |   | 
      return CMD_WARNING; /* should not happen */ | 
 |   | 
   | 
 |    /* Get distribute source. */ | 
    /* Get distribute source. */ | 
|   if (!str2distribute_source (argv[0], &source)) |   source = proto_redistnum(AFI_IP, argv[0]); | 
|   |   if (source < 0 || source == ZEBRA_ROUTE_OSPF) | 
 |      return CMD_WARNING; | 
      return CMD_WARNING; | 
 |   | 
   | 
 |    /* Get metric value. */ | 
    /* Get metric value. */ | 
|   if (argc >= 2) |   if (argv[1] != NULL) | 
|     if (!str2metric_type (argv[1], &type)) |     if (!str2metric (argv[1], &metric)) | 
 |        return CMD_WARNING; | 
        return CMD_WARNING; | 
 |   | 
   | 
 |    /* Get metric type. */ | 
    /* Get metric type. */ | 
|   if (argc >= 3) |   if (argv[2] != NULL) | 
|     if (!str2metric (argv[2], &metric)) |     if (!str2metric_type (argv[2], &type)) | 
 |        return CMD_WARNING; | 
        return CMD_WARNING; | 
 |   | 
   | 
|   if (argc == 4) |   if (argv[3] != NULL) | 
 |      ospf_routemap_set (ospf, source, argv[3]); | 
      ospf_routemap_set (ospf, source, argv[3]); | 
 |    else | 
    else | 
 |      ospf_routemap_unset (ospf, source); | 
      ospf_routemap_unset (ospf, source); | 
| 
 Line 5906  DEFUN (ospf_redistribute_source_type_metric,
 | 
 Line 5992  DEFUN (ospf_redistribute_source_type_metric,
 | 
 |    return ospf_redistribute_set (ospf, source, type, metric); | 
    return ospf_redistribute_set (ospf, source, type, metric); | 
 |  } | 
  } | 
 |   | 
   | 
 |  ALIAS (ospf_redistribute_source_type_metric, | 
   | 
 |         ospf_redistribute_source_type_metric_cmd, | 
   | 
 |         "redistribute " QUAGGA_REDIST_STR_OSPFD  | 
   | 
 |           " metric-type (1|2) metric <0-16777214>", | 
   | 
 |         REDIST_STR | 
   | 
 |         QUAGGA_REDIST_HELP_STR_OSPFD | 
   | 
 |         "OSPF exterior metric type for redistributed routes\n" | 
   | 
 |         "Set OSPF External Type 1 metrics\n" | 
   | 
 |         "Set OSPF External Type 2 metrics\n" | 
   | 
 |         "Metric for redistributed routes\n" | 
   | 
 |         "OSPF default metric\n") | 
   | 
 |   | 
   | 
 |  ALIAS (ospf_redistribute_source_type_metric, | 
   | 
 |         ospf_redistribute_source_type_cmd, | 
   | 
 |         "redistribute " QUAGGA_REDIST_STR_OSPFD " metric-type (1|2)", | 
   | 
 |         REDIST_STR | 
   | 
 |         QUAGGA_REDIST_HELP_STR_OSPFD | 
   | 
 |         "OSPF exterior metric type for redistributed routes\n" | 
   | 
 |         "Set OSPF External Type 1 metrics\n" | 
   | 
 |         "Set OSPF External Type 2 metrics\n") | 
   | 
 |   | 
   | 
 |  ALIAS (ospf_redistribute_source_type_metric, | 
   | 
 |         ospf_redistribute_source_cmd, | 
   | 
 |         "redistribute " QUAGGA_REDIST_STR_OSPFD, | 
   | 
 |         REDIST_STR | 
   | 
 |         QUAGGA_REDIST_HELP_STR_OSPFD) | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_redistribute_source_metric_routemap, | 
   | 
 |         ospf_redistribute_source_metric_routemap_cmd, | 
   | 
 |         "redistribute " QUAGGA_REDIST_STR_OSPFD  | 
   | 
 |           " metric <0-16777214> route-map WORD", | 
   | 
 |         REDIST_STR | 
   | 
 |         QUAGGA_REDIST_HELP_STR_OSPFD | 
   | 
 |         "Metric for redistributed routes\n" | 
   | 
 |         "OSPF default metric\n" | 
   | 
 |         "Route map reference\n" | 
   | 
 |         "Pointer to route-map entries\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |    int source; | 
   | 
 |    int metric = -1; | 
   | 
 |   | 
   | 
 |    /* Get distribute source. */ | 
   | 
 |    if (!str2distribute_source (argv[0], &source)) | 
   | 
 |      return CMD_WARNING; | 
   | 
 |   | 
   | 
 |    /* Get metric value. */ | 
   | 
 |    if (argc >= 2) | 
   | 
 |      if (!str2metric (argv[1], &metric)) | 
   | 
 |        return CMD_WARNING; | 
   | 
 |   | 
   | 
 |    if (argc == 3) | 
   | 
 |      ospf_routemap_set (ospf, source, argv[2]); | 
   | 
 |    else | 
   | 
 |      ospf_routemap_unset (ospf, source); | 
   | 
 |     | 
   | 
 |    return ospf_redistribute_set (ospf, source, -1, metric); | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_redistribute_source_type_routemap, | 
   | 
 |         ospf_redistribute_source_type_routemap_cmd, | 
   | 
 |         "redistribute " QUAGGA_REDIST_STR_OSPFD  | 
   | 
 |           " metric-type (1|2) route-map WORD", | 
   | 
 |         REDIST_STR | 
   | 
 |         QUAGGA_REDIST_HELP_STR_OSPFD | 
   | 
 |         "OSPF exterior metric type for redistributed routes\n" | 
   | 
 |         "Set OSPF External Type 1 metrics\n" | 
   | 
 |         "Set OSPF External Type 2 metrics\n" | 
   | 
 |         "Route map reference\n" | 
   | 
 |         "Pointer to route-map entries\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |    int source; | 
   | 
 |    int type = -1; | 
   | 
 |   | 
   | 
 |    /* Get distribute source. */ | 
   | 
 |    if (!str2distribute_source (argv[0], &source)) | 
   | 
 |      return CMD_WARNING; | 
   | 
 |   | 
   | 
 |    /* Get metric value. */ | 
   | 
 |    if (argc >= 2) | 
   | 
 |      if (!str2metric_type (argv[1], &type)) | 
   | 
 |        return CMD_WARNING; | 
   | 
 |   | 
   | 
 |    if (argc == 3) | 
   | 
 |      ospf_routemap_set (ospf, source, argv[2]); | 
   | 
 |    else | 
   | 
 |      ospf_routemap_unset (ospf, source); | 
   | 
 |   | 
   | 
 |    return ospf_redistribute_set (ospf, source, type, -1); | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_redistribute_source_routemap, | 
   | 
 |         ospf_redistribute_source_routemap_cmd, | 
   | 
 |         "redistribute " QUAGGA_REDIST_STR_OSPFD " route-map WORD", | 
   | 
 |         REDIST_STR | 
   | 
 |         QUAGGA_REDIST_HELP_STR_OSPFD | 
   | 
 |         "Route map reference\n" | 
   | 
 |         "Pointer to route-map entries\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |    int source; | 
   | 
 |   | 
   | 
 |    /* Get distribute source. */ | 
   | 
 |    if (!str2distribute_source (argv[0], &source)) | 
   | 
 |      return CMD_WARNING; | 
   | 
 |   | 
   | 
 |    if (argc == 2) | 
   | 
 |      ospf_routemap_set (ospf, source, argv[1]); | 
   | 
 |    else | 
   | 
 |      ospf_routemap_unset (ospf, source); | 
   | 
 |   | 
   | 
 |    return ospf_redistribute_set (ospf, source, -1, -1); | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  DEFUN (no_ospf_redistribute_source, | 
  DEFUN (no_ospf_redistribute_source, | 
 |         no_ospf_redistribute_source_cmd, | 
         no_ospf_redistribute_source_cmd, | 
 |         "no redistribute " QUAGGA_REDIST_STR_OSPFD, | 
         "no redistribute " QUAGGA_REDIST_STR_OSPFD, | 
| 
 Line 6031  DEFUN (no_ospf_redistribute_source,
 | 
 Line 6002  DEFUN (no_ospf_redistribute_source,
 | 
 |    struct ospf *ospf = vty->index; | 
    struct ospf *ospf = vty->index; | 
 |    int source; | 
    int source; | 
 |   | 
   | 
|   if (!str2distribute_source (argv[0], &source)) |   source = proto_redistnum(AFI_IP, argv[0]); | 
|   |   if (source < 0 || source == ZEBRA_ROUTE_OSPF) | 
 |      return CMD_WARNING; | 
      return CMD_WARNING; | 
 |   | 
   | 
 |    ospf_routemap_unset (ospf, source); | 
    ospf_routemap_unset (ospf, source); | 
| 
 Line 6050  DEFUN (ospf_distribute_list_out,
 | 
 Line 6022  DEFUN (ospf_distribute_list_out,
 | 
 |    int source; | 
    int source; | 
 |   | 
   | 
 |    /* Get distribute source. */ | 
    /* Get distribute source. */ | 
|   if (!str2distribute_source (argv[1], &source)) |   source = proto_redistnum(AFI_IP, argv[1]); | 
|   |   if (source < 0 || source == ZEBRA_ROUTE_OSPF) | 
 |      return CMD_WARNING; | 
      return CMD_WARNING; | 
 |   | 
   | 
 |    return ospf_distribute_list_out_set (ospf, source, argv[0]); | 
    return ospf_distribute_list_out_set (ospf, source, argv[0]); | 
| 
 Line 6068  DEFUN (no_ospf_distribute_list_out,
 | 
 Line 6041  DEFUN (no_ospf_distribute_list_out,
 | 
 |    struct ospf *ospf = vty->index; | 
    struct ospf *ospf = vty->index; | 
 |    int source; | 
    int source; | 
 |   | 
   | 
|   if (!str2distribute_source (argv[1], &source)) |   source = proto_redistnum(AFI_IP, argv[1]); | 
|   |   if (source < 0 || source == ZEBRA_ROUTE_OSPF) | 
 |      return CMD_WARNING; | 
      return CMD_WARNING; | 
 |   | 
   | 
 |    return ospf_distribute_list_out_unset (ospf, source, argv[0]); | 
    return ospf_distribute_list_out_unset (ospf, source, argv[0]); | 
 |  } | 
  } | 
 |   | 
   | 
 |  /* Default information originate. */ | 
  /* Default information originate. */ | 
| DEFUN (ospf_default_information_originate_metric_type_routemap, | DEFUN (ospf_default_information_originate, | 
|        ospf_default_information_originate_metric_type_routemap_cmd, |   | 
|        "default-information originate metric <0-16777214> metric-type (1|2) route-map WORD", |   | 
|        "Control distribution of default information\n" |   | 
|        "Distribute a default route\n" |   | 
|        "OSPF default metric\n" |   | 
|        "OSPF metric\n" |   | 
|        "OSPF metric type for default routes\n" |   | 
|        "Set OSPF External Type 1 metrics\n" |   | 
|        "Set OSPF External Type 2 metrics\n" |   | 
|        "Route map reference\n" |   | 
|        "Pointer to route-map entries\n") |   | 
| { |   | 
|   struct ospf *ospf = vty->index; |   | 
|   int type = -1; |   | 
|   int metric = -1; |   | 
 |   | 
|   /* Get metric value. */ |   | 
|   if (argc >= 1) |   | 
|     if (!str2metric (argv[0], &metric)) |   | 
|       return CMD_WARNING; |   | 
 |   | 
|   /* Get metric type. */ |   | 
|   if (argc >= 2) |   | 
|     if (!str2metric_type (argv[1], &type)) |   | 
|       return CMD_WARNING; |   | 
 |   | 
|   if (argc == 3) |   | 
|     ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[2]); |   | 
|   else |   | 
|     ospf_routemap_unset (ospf, DEFAULT_ROUTE); |   | 
 |   | 
|   return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ZEBRA, |   | 
|                                         type, metric); |   | 
| } |   | 
 |   | 
| ALIAS (ospf_default_information_originate_metric_type_routemap, |   | 
|        ospf_default_information_originate_metric_type_cmd, |   | 
|        "default-information originate metric <0-16777214> metric-type (1|2)", |   | 
|        "Control distribution of default information\n" |   | 
|        "Distribute a default route\n" |   | 
|        "OSPF default metric\n" |   | 
|        "OSPF metric\n" |   | 
|        "OSPF metric type for default routes\n" |   | 
|        "Set OSPF External Type 1 metrics\n" |   | 
|        "Set OSPF External Type 2 metrics\n") |   | 
 |   | 
| ALIAS (ospf_default_information_originate_metric_type_routemap, |   | 
|        ospf_default_information_originate_metric_cmd, |   | 
|        "default-information originate metric <0-16777214>", |   | 
|        "Control distribution of default information\n" |   | 
|        "Distribute a default route\n" |   | 
|        "OSPF default metric\n" |   | 
|        "OSPF metric\n") |   | 
 |   | 
| ALIAS (ospf_default_information_originate_metric_type_routemap, |   | 
 |         ospf_default_information_originate_cmd, | 
         ospf_default_information_originate_cmd, | 
|        "default-information originate", |        "default-information originate " | 
|   |          "{always|metric <0-16777214>|metric-type (1|2)|route-map WORD}", | 
 |         "Control distribution of default information\n" | 
         "Control distribution of default information\n" | 
 |         "Distribute a default route\n") | 
   | 
 |   | 
   | 
 |  /* Default information originate. */ | 
   | 
 |  DEFUN (ospf_default_information_originate_metric_routemap, | 
   | 
 |         ospf_default_information_originate_metric_routemap_cmd, | 
   | 
 |         "default-information originate metric <0-16777214> route-map WORD", | 
   | 
 |         "Control distribution of default information\n" | 
   | 
 |         "Distribute a default route\n" | 
         "Distribute a default route\n" | 
 |         "OSPF default metric\n" | 
   | 
 |         "OSPF metric\n" | 
   | 
 |         "Route map reference\n" | 
   | 
 |         "Pointer to route-map entries\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |    int metric = -1; | 
   | 
 |   | 
   | 
 |    /* Get metric value. */ | 
   | 
 |    if (argc >= 1) | 
   | 
 |      if (!str2metric (argv[0], &metric)) | 
   | 
 |        return CMD_WARNING; | 
   | 
 |   | 
   | 
 |    if (argc == 2) | 
   | 
 |      ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[1]); | 
   | 
 |    else | 
   | 
 |      ospf_routemap_unset (ospf, DEFAULT_ROUTE); | 
   | 
 |   | 
   | 
 |    return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ZEBRA, | 
   | 
 |                                          -1, metric); | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  /* Default information originate. */ | 
   | 
 |  DEFUN (ospf_default_information_originate_routemap, | 
   | 
 |         ospf_default_information_originate_routemap_cmd, | 
   | 
 |         "default-information originate route-map WORD", | 
   | 
 |         "Control distribution of default information\n" | 
   | 
 |         "Distribute a default route\n" | 
   | 
 |         "Route map reference\n" | 
   | 
 |         "Pointer to route-map entries\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |   | 
   | 
 |    if (argc == 1) | 
   | 
 |      ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[0]); | 
   | 
 |    else | 
   | 
 |      ospf_routemap_unset (ospf, DEFAULT_ROUTE); | 
   | 
 |   | 
   | 
 |    return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ZEBRA, -1, -1); | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_default_information_originate_type_metric_routemap, | 
   | 
 |         ospf_default_information_originate_type_metric_routemap_cmd, | 
   | 
 |         "default-information originate metric-type (1|2) metric <0-16777214> route-map WORD", | 
   | 
 |         "Control distribution of default information\n" | 
   | 
 |         "Distribute a default route\n" | 
   | 
 |         "OSPF metric type for default routes\n" | 
   | 
 |         "Set OSPF External Type 1 metrics\n" | 
   | 
 |         "Set OSPF External Type 2 metrics\n" | 
   | 
 |         "OSPF default metric\n" | 
   | 
 |         "OSPF metric\n" | 
   | 
 |         "Route map reference\n" | 
   | 
 |         "Pointer to route-map entries\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |    int type = -1; | 
   | 
 |    int metric = -1; | 
   | 
 |   | 
   | 
 |    /* Get metric type. */ | 
   | 
 |    if (argc >= 1) | 
   | 
 |      if (!str2metric_type (argv[0], &type)) | 
   | 
 |        return CMD_WARNING; | 
   | 
 |   | 
   | 
 |    /* Get metric value. */ | 
   | 
 |    if (argc >= 2) | 
   | 
 |      if (!str2metric (argv[1], &metric)) | 
   | 
 |        return CMD_WARNING; | 
   | 
 |   | 
   | 
 |    if (argc == 3) | 
   | 
 |      ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[2]); | 
   | 
 |    else | 
   | 
 |      ospf_routemap_unset (ospf, DEFAULT_ROUTE); | 
   | 
 |   | 
   | 
 |    return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ZEBRA, | 
   | 
 |                                          type, metric); | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  ALIAS (ospf_default_information_originate_type_metric_routemap, | 
   | 
 |         ospf_default_information_originate_type_metric_cmd, | 
   | 
 |         "default-information originate metric-type (1|2) metric <0-16777214>", | 
   | 
 |         "Control distribution of default information\n" | 
   | 
 |         "Distribute a default route\n" | 
   | 
 |         "OSPF metric type for default routes\n" | 
   | 
 |         "Set OSPF External Type 1 metrics\n" | 
   | 
 |         "Set OSPF External Type 2 metrics\n" | 
   | 
 |         "OSPF default metric\n" | 
   | 
 |         "OSPF metric\n") | 
   | 
 |   | 
   | 
 |  ALIAS (ospf_default_information_originate_type_metric_routemap, | 
   | 
 |         ospf_default_information_originate_type_cmd, | 
   | 
 |         "default-information originate metric-type (1|2)", | 
   | 
 |         "Control distribution of default information\n" | 
   | 
 |         "Distribute a default route\n" | 
   | 
 |         "OSPF metric type for default routes\n" | 
   | 
 |         "Set OSPF External Type 1 metrics\n" | 
   | 
 |         "Set OSPF External Type 2 metrics\n") | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_default_information_originate_type_routemap, | 
   | 
 |         ospf_default_information_originate_type_routemap_cmd, | 
   | 
 |         "default-information originate metric-type (1|2) route-map WORD", | 
   | 
 |         "Control distribution of default information\n" | 
   | 
 |         "Distribute a default route\n" | 
   | 
 |         "OSPF metric type for default routes\n" | 
   | 
 |         "Set OSPF External Type 1 metrics\n" | 
   | 
 |         "Set OSPF External Type 2 metrics\n" | 
   | 
 |         "Route map reference\n" | 
   | 
 |         "Pointer to route-map entries\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |    int type = -1; | 
   | 
 |   | 
   | 
 |    /* Get metric type. */ | 
   | 
 |    if (argc >= 1) | 
   | 
 |      if (!str2metric_type (argv[0], &type)) | 
   | 
 |        return CMD_WARNING; | 
   | 
 |   | 
   | 
 |    if (argc == 2) | 
   | 
 |      ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[1]); | 
   | 
 |    else | 
   | 
 |      ospf_routemap_unset (ospf, DEFAULT_ROUTE); | 
   | 
 |   | 
   | 
 |    return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ZEBRA, | 
   | 
 |                                          type, -1); | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_default_information_originate_always_metric_type_routemap, | 
   | 
 |         ospf_default_information_originate_always_metric_type_routemap_cmd, | 
   | 
 |         "default-information originate always metric <0-16777214> metric-type (1|2) route-map WORD", | 
   | 
 |         "Control distribution of default information\n" | 
   | 
 |         "Distribute a default route\n" | 
   | 
 |         "Always advertise default route\n" | 
         "Always advertise default route\n" | 
 |         "OSPF default metric\n" | 
         "OSPF default metric\n" | 
 |         "OSPF metric\n" | 
         "OSPF metric\n" | 
| 
 Line 6282  DEFUN (ospf_default_information_originate_always_metri
 | 
 Line 6065  DEFUN (ospf_default_information_originate_always_metri
 | 
 |         "Pointer to route-map entries\n") | 
         "Pointer to route-map entries\n") | 
 |  { | 
  { | 
 |    struct ospf *ospf = vty->index; | 
    struct ospf *ospf = vty->index; | 
 |   | 
    int default_originate = DEFAULT_ORIGINATE_ZEBRA; | 
 |    int type = -1; | 
    int type = -1; | 
 |    int metric = -1; | 
    int metric = -1; | 
 |   | 
   | 
|   /* Get metric value. */ |   if (argc < 4) | 
|   if (argc >= 1) |     return CMD_WARNING; /* this should not happen */ | 
|     if (!str2metric (argv[0], &metric)) |   | 
|       return CMD_WARNING; |   | 
 |   | 
   | 
|   /* Get metric type. */ |   /* Check whether "always" was specified */ | 
|   if (argc >= 2) |   if (argv[0] != NULL) | 
|     if (!str2metric_type (argv[1], &type)) |     default_originate = DEFAULT_ORIGINATE_ALWAYS; | 
|       return CMD_WARNING; |   | 
 |   | 
   | 
 |    if (argc == 3) | 
   | 
 |      ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[2]); | 
   | 
 |    else | 
   | 
 |      ospf_routemap_unset (ospf, DEFAULT_ROUTE); | 
   | 
 |   | 
   | 
 |    return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ALWAYS, | 
   | 
 |                                          type, metric); | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  ALIAS (ospf_default_information_originate_always_metric_type_routemap, | 
   | 
 |         ospf_default_information_originate_always_metric_type_cmd, | 
   | 
 |         "default-information originate always metric <0-16777214> metric-type (1|2)", | 
   | 
 |         "Control distribution of default information\n" | 
   | 
 |         "Distribute a default route\n" | 
   | 
 |         "Always advertise default route\n" | 
   | 
 |         "OSPF default metric\n" | 
   | 
 |         "OSPF metric\n" | 
   | 
 |         "OSPF metric type for default routes\n" | 
   | 
 |         "Set OSPF External Type 1 metrics\n" | 
   | 
 |         "Set OSPF External Type 2 metrics\n") | 
   | 
 |   | 
   | 
 |  ALIAS (ospf_default_information_originate_always_metric_type_routemap, | 
   | 
 |         ospf_default_information_originate_always_metric_cmd, | 
   | 
 |         "default-information originate always metric <0-16777214>", | 
   | 
 |         "Control distribution of default information\n" | 
   | 
 |         "Distribute a default route\n" | 
   | 
 |         "Always advertise default route\n" | 
   | 
 |         "OSPF default metric\n" | 
   | 
 |         "OSPF metric\n" | 
   | 
 |         "OSPF metric type for default routes\n") | 
   | 
 |   | 
   | 
 |  ALIAS (ospf_default_information_originate_always_metric_type_routemap, | 
   | 
 |         ospf_default_information_originate_always_cmd, | 
   | 
 |         "default-information originate always", | 
   | 
 |         "Control distribution of default information\n" | 
   | 
 |         "Distribute a default route\n" | 
   | 
 |         "Always advertise default route\n") | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_default_information_originate_always_metric_routemap, | 
   | 
 |         ospf_default_information_originate_always_metric_routemap_cmd, | 
   | 
 |         "default-information originate always metric <0-16777214> route-map WORD", | 
   | 
 |         "Control distribution of default information\n" | 
   | 
 |         "Distribute a default route\n" | 
   | 
 |         "Always advertise default route\n" | 
   | 
 |         "OSPF default metric\n" | 
   | 
 |         "OSPF metric\n" | 
   | 
 |         "Route map reference\n" | 
   | 
 |         "Pointer to route-map entries\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |    int metric = -1; | 
   | 
 |   | 
   | 
 |    /* Get metric value. */ | 
    /* Get metric value. */ | 
|   if (argc >= 1) |   if (argv[1] != NULL) | 
|     if (!str2metric (argv[0], &metric)) |     if (!str2metric (argv[1], &metric)) | 
 |        return CMD_WARNING; | 
        return CMD_WARNING; | 
 |   | 
   | 
 |    if (argc == 2) | 
   | 
 |      ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[1]); | 
   | 
 |    else | 
   | 
 |      ospf_routemap_unset (ospf, DEFAULT_ROUTE); | 
   | 
 |   | 
   | 
 |    return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ALWAYS, | 
   | 
 |                                          -1, metric); | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_default_information_originate_always_routemap, | 
   | 
 |         ospf_default_information_originate_always_routemap_cmd, | 
   | 
 |         "default-information originate always route-map WORD", | 
   | 
 |         "Control distribution of default information\n" | 
   | 
 |         "Distribute a default route\n" | 
   | 
 |         "Always advertise default route\n" | 
   | 
 |         "Route map reference\n" | 
   | 
 |         "Pointer to route-map entries\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |   | 
   | 
 |    if (argc == 1) | 
   | 
 |      ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[0]); | 
   | 
 |    else | 
   | 
 |      ospf_routemap_unset (ospf, DEFAULT_ROUTE); | 
   | 
 |   | 
   | 
 |    return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ALWAYS, -1, -1); | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_default_information_originate_always_type_metric_routemap, | 
   | 
 |         ospf_default_information_originate_always_type_metric_routemap_cmd, | 
   | 
 |         "default-information originate always metric-type (1|2) metric <0-16777214> route-map WORD", | 
   | 
 |         "Control distribution of default information\n" | 
   | 
 |         "Distribute a default route\n" | 
   | 
 |         "Always advertise default route\n" | 
   | 
 |         "OSPF metric type for default routes\n" | 
   | 
 |         "Set OSPF External Type 1 metrics\n" | 
   | 
 |         "Set OSPF External Type 2 metrics\n" | 
   | 
 |         "OSPF default metric\n" | 
   | 
 |         "OSPF metric\n" | 
   | 
 |         "Route map reference\n" | 
   | 
 |         "Pointer to route-map entries\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |    int type = -1; | 
   | 
 |    int metric = -1; | 
   | 
 |   | 
   | 
 |    /* Get metric type. */ | 
    /* Get metric type. */ | 
|   if (argc >= 1) |   if (argv[2] != NULL) | 
|     if (!str2metric_type (argv[0], &type)) |     if (!str2metric_type (argv[2], &type)) | 
 |        return CMD_WARNING; | 
        return CMD_WARNING; | 
 |   | 
   | 
|   /* Get metric value. */ |   if (argv[3] != NULL) | 
|   if (argc >= 2) |     ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[3]); | 
|     if (!str2metric (argv[1], &metric)) |   | 
|       return CMD_WARNING; |   | 
 |   | 
|   if (argc == 3) |   | 
|     ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[2]); |   | 
 |    else | 
    else | 
 |      ospf_routemap_unset (ospf, DEFAULT_ROUTE); | 
      ospf_routemap_unset (ospf, DEFAULT_ROUTE); | 
 |   | 
   | 
|   return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ALWAYS, |   return ospf_redistribute_default_set (ospf, default_originate, | 
 |                                          type, metric); | 
                                          type, metric); | 
 |  } | 
  } | 
 |   | 
   | 
 |  ALIAS (ospf_default_information_originate_always_type_metric_routemap, | 
   | 
 |         ospf_default_information_originate_always_type_metric_cmd, | 
   | 
 |         "default-information originate always metric-type (1|2) metric <0-16777214>", | 
   | 
 |         "Control distribution of default information\n" | 
   | 
 |         "Distribute a default route\n" | 
   | 
 |         "Always advertise default route\n" | 
   | 
 |         "OSPF metric type for default routes\n" | 
   | 
 |         "Set OSPF External Type 1 metrics\n" | 
   | 
 |         "Set OSPF External Type 2 metrics\n" | 
   | 
 |         "OSPF default metric\n" | 
   | 
 |         "OSPF metric\n") | 
   | 
 |   | 
   | 
 |  ALIAS (ospf_default_information_originate_always_type_metric_routemap, | 
   | 
 |         ospf_default_information_originate_always_type_cmd, | 
   | 
 |         "default-information originate always metric-type (1|2)", | 
   | 
 |         "Control distribution of default information\n" | 
   | 
 |         "Distribute a default route\n" | 
   | 
 |         "Always advertise default route\n" | 
   | 
 |         "OSPF metric type for default routes\n" | 
   | 
 |         "Set OSPF External Type 1 metrics\n" | 
   | 
 |         "Set OSPF External Type 2 metrics\n") | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_default_information_originate_always_type_routemap, | 
   | 
 |         ospf_default_information_originate_always_type_routemap_cmd, | 
   | 
 |         "default-information originate always metric-type (1|2) route-map WORD", | 
   | 
 |         "Control distribution of default information\n" | 
   | 
 |         "Distribute a default route\n" | 
   | 
 |         "Always advertise default route\n" | 
   | 
 |         "OSPF metric type for default routes\n" | 
   | 
 |         "Set OSPF External Type 1 metrics\n" | 
   | 
 |         "Set OSPF External Type 2 metrics\n" | 
   | 
 |         "Route map reference\n" | 
   | 
 |         "Pointer to route-map entries\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |    int type = -1; | 
   | 
 |   | 
   | 
 |    /* Get metric type. */ | 
   | 
 |    if (argc >= 1) | 
   | 
 |      if (!str2metric_type (argv[0], &type)) | 
   | 
 |        return CMD_WARNING; | 
   | 
 |   | 
   | 
 |    if (argc == 2) | 
   | 
 |      ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[1]); | 
   | 
 |    else | 
   | 
 |      ospf_routemap_unset (ospf, DEFAULT_ROUTE); | 
   | 
 |   | 
   | 
 |    return ospf_redistribute_default_set (ospf, DEFAULT_ORIGINATE_ALWAYS, | 
   | 
 |                                          type, -1); | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  DEFUN (no_ospf_default_information_originate, | 
  DEFUN (no_ospf_default_information_originate, | 
 |         no_ospf_default_information_originate_cmd, | 
         no_ospf_default_information_originate_cmd, | 
 |         "no default-information originate", | 
         "no default-information originate", | 
| 
 Line 6560  DEFUN (no_ospf_distance,
 | 
 Line 6187  DEFUN (no_ospf_distance,
 | 
 |   | 
   | 
 |  DEFUN (no_ospf_distance_ospf, | 
  DEFUN (no_ospf_distance_ospf, | 
 |         no_ospf_distance_ospf_cmd, | 
         no_ospf_distance_ospf_cmd, | 
|        "no distance ospf", |        "no distance ospf {intra-area|inter-area|external}", | 
 |         NO_STR | 
         NO_STR | 
 |         "Define an administrative distance\n" | 
         "Define an administrative distance\n" | 
 |         "OSPF Administrative distance\n" | 
         "OSPF Administrative distance\n" | 
|        "OSPF Distance\n") |        "OSPF Distance\n" | 
| { |   | 
|   struct ospf *ospf = vty->index; |   | 
 |   | 
|   ospf->distance_intra = 0; |   | 
|   ospf->distance_inter = 0; |   | 
|   ospf->distance_external = 0; |   | 
 |   | 
|   return CMD_SUCCESS; |   | 
| } |   | 
 |   | 
| DEFUN (ospf_distance_ospf_intra, |   | 
|        ospf_distance_ospf_intra_cmd, |   | 
|        "distance ospf intra-area <1-255>", |   | 
|        "Define an administrative distance\n" |   | 
|        "OSPF Administrative distance\n" |   | 
 |         "Intra-area routes\n" | 
         "Intra-area routes\n" | 
 |         "Distance for intra-area routes\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |   | 
   | 
 |    ospf->distance_intra = atoi (argv[0]); | 
   | 
 |   | 
   | 
 |    return CMD_SUCCESS; | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_distance_ospf_intra_inter, | 
   | 
 |         ospf_distance_ospf_intra_inter_cmd, | 
   | 
 |         "distance ospf intra-area <1-255> inter-area <1-255>", | 
   | 
 |         "Define an administrative distance\n" | 
   | 
 |         "OSPF Administrative distance\n" | 
   | 
 |         "Intra-area routes\n" | 
   | 
 |         "Distance for intra-area routes\n" | 
   | 
 |         "Inter-area routes\n" | 
         "Inter-area routes\n" | 
|        "Distance for inter-area routes\n") |        "External routes\n") | 
 |  { | 
  { | 
 |    struct ospf *ospf = vty->index; | 
    struct ospf *ospf = vty->index; | 
 |   | 
   | 
|   ospf->distance_intra = atoi (argv[0]); |   if (argc < 3) | 
|   ospf->distance_inter = atoi (argv[1]); |     return CMD_WARNING; | 
 |   | 
   | 
|   return CMD_SUCCESS; |   if (argv[0] != NULL) | 
| } |     ospf->distance_intra = 0; | 
 |   | 
   | 
| DEFUN (ospf_distance_ospf_intra_external, |   if (argv[1] != NULL) | 
|        ospf_distance_ospf_intra_external_cmd, |     ospf->distance_inter = 0; | 
|        "distance ospf intra-area <1-255> external <1-255>", |   | 
|        "Define an administrative distance\n" |   | 
|        "OSPF Administrative distance\n" |   | 
|        "Intra-area routes\n" |   | 
|        "Distance for intra-area routes\n" |   | 
|        "External routes\n" |   | 
|        "Distance for external routes\n") |   | 
| { |   | 
|   struct ospf *ospf = vty->index; |   | 
 |   | 
   | 
|   ospf->distance_intra = atoi (argv[0]); |   if (argv[2] != NULL) | 
|   ospf->distance_external = atoi (argv[1]); |     ospf->distance_external = 0; | 
 |   | 
   | 
|   return CMD_SUCCESS; |   if (argv[0] || argv[1] || argv[2]) | 
| } |     return CMD_SUCCESS; | 
 |   | 
   | 
| DEFUN (ospf_distance_ospf_intra_inter_external, |   /* If no arguments are given, clear all distance information */ | 
|        ospf_distance_ospf_intra_inter_external_cmd, |   ospf->distance_intra = 0; | 
|        "distance ospf intra-area <1-255> inter-area <1-255> external <1-255>", |   ospf->distance_inter = 0; | 
|        "Define an administrative distance\n" |   ospf->distance_external = 0; | 
|        "OSPF Administrative distance\n" |   | 
|        "Intra-area routes\n" |   | 
|        "Distance for intra-area routes\n" |   | 
|        "Inter-area routes\n" |   | 
|        "Distance for inter-area routes\n" |   | 
|        "External routes\n" |   | 
|        "Distance for external routes\n") |   | 
| { |   | 
|   struct ospf *ospf = vty->index; |   | 
 |   | 
   | 
 |    ospf->distance_intra = atoi (argv[0]); | 
   | 
 |    ospf->distance_inter = atoi (argv[1]); | 
   | 
 |    ospf->distance_external = atoi (argv[2]); | 
   | 
 |   | 
   | 
 |    return CMD_SUCCESS; | 
    return CMD_SUCCESS; | 
 |  } | 
  } | 
 |   | 
   | 
| DEFUN (ospf_distance_ospf_intra_external_inter, | DEFUN (ospf_distance_ospf, | 
|        ospf_distance_ospf_intra_external_inter_cmd, |        ospf_distance_ospf_cmd, | 
|        "distance ospf intra-area <1-255> external <1-255> inter-area <1-255>", |        "distance ospf " | 
|   |          "{intra-area <1-255>|inter-area <1-255>|external <1-255>}", | 
 |         "Define an administrative distance\n" | 
         "Define an administrative distance\n" | 
 |         "OSPF Administrative distance\n" | 
         "OSPF Administrative distance\n" | 
 |         "Intra-area routes\n" | 
         "Intra-area routes\n" | 
 |         "Distance for intra-area routes\n" | 
         "Distance for intra-area routes\n" | 
 |         "External routes\n" | 
   | 
 |         "Distance for external routes\n" | 
   | 
 |         "Inter-area routes\n" | 
         "Inter-area routes\n" | 
 |         "Distance for inter-area routes\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |   | 
   | 
 |    ospf->distance_intra = atoi (argv[0]); | 
   | 
 |    ospf->distance_external = atoi (argv[1]); | 
   | 
 |    ospf->distance_inter = atoi (argv[2]); | 
   | 
 |   | 
   | 
 |    return CMD_SUCCESS; | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_distance_ospf_inter, | 
   | 
 |         ospf_distance_ospf_inter_cmd, | 
   | 
 |         "distance ospf inter-area <1-255>", | 
   | 
 |         "Define an administrative distance\n" | 
   | 
 |         "OSPF Administrative distance\n" | 
   | 
 |         "Inter-area routes\n" | 
   | 
 |         "Distance for inter-area routes\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |   | 
   | 
 |    ospf->distance_inter = atoi (argv[0]); | 
   | 
 |   | 
   | 
 |    return CMD_SUCCESS; | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_distance_ospf_inter_intra, | 
   | 
 |         ospf_distance_ospf_inter_intra_cmd, | 
   | 
 |         "distance ospf inter-area <1-255> intra-area <1-255>", | 
   | 
 |         "Define an administrative distance\n" | 
   | 
 |         "OSPF Administrative distance\n" | 
   | 
 |         "Inter-area routes\n" | 
   | 
 |         "Distance for inter-area routes\n" | 
         "Distance for inter-area routes\n" | 
 |         "Intra-area routes\n" | 
   | 
 |         "Distance for intra-area routes\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |   | 
   | 
 |    ospf->distance_inter = atoi (argv[0]); | 
   | 
 |    ospf->distance_intra = atoi (argv[1]); | 
   | 
 |   | 
   | 
 |    return CMD_SUCCESS; | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_distance_ospf_inter_external, | 
   | 
 |         ospf_distance_ospf_inter_external_cmd, | 
   | 
 |         "distance ospf inter-area <1-255> external <1-255>", | 
   | 
 |         "Define an administrative distance\n" | 
   | 
 |         "OSPF Administrative distance\n" | 
   | 
 |         "Inter-area routes\n" | 
   | 
 |         "Distance for inter-area routes\n" | 
   | 
 |         "External routes\n" | 
         "External routes\n" | 
 |         "Distance for external routes\n") | 
         "Distance for external routes\n") | 
 |  { | 
  { | 
 |    struct ospf *ospf = vty->index; | 
    struct ospf *ospf = vty->index; | 
 |   | 
   | 
|   ospf->distance_inter = atoi (argv[0]); |   if (argc < 3) /* should not happen */ | 
|   ospf->distance_external = atoi (argv[1]); |     return CMD_WARNING; | 
 |   | 
   | 
|   return CMD_SUCCESS; |   if (!argv[0] && !argv[1] && !argv[2]) | 
| } |     { | 
|   |       vty_out(vty, "%% Command incomplete. (Arguments required)%s", | 
|   |               VTY_NEWLINE); | 
|   |       return CMD_WARNING; | 
|   |     } | 
 |   | 
   | 
| DEFUN (ospf_distance_ospf_inter_intra_external, |   if (argv[0] != NULL) | 
|        ospf_distance_ospf_inter_intra_external_cmd, |     ospf->distance_intra = atoi(argv[0]); | 
|        "distance ospf inter-area <1-255> intra-area <1-255> external <1-255>", |   | 
|        "Define an administrative distance\n" |   | 
|        "OSPF Administrative distance\n" |   | 
|        "Inter-area routes\n" |   | 
|        "Distance for inter-area routes\n" |   | 
|        "Intra-area routes\n" |   | 
|        "Distance for intra-area routes\n" |   | 
|        "External routes\n" |   | 
|        "Distance for external routes\n") |   | 
| { |   | 
|   struct ospf *ospf = vty->index; |   | 
 |   | 
   | 
|   ospf->distance_inter = atoi (argv[0]); |   if (argv[1] != NULL) | 
|   ospf->distance_intra = atoi (argv[1]); |     ospf->distance_inter = atoi(argv[1]); | 
|   ospf->distance_external = atoi (argv[2]); |   | 
 |   | 
   | 
|   return CMD_SUCCESS; |   if (argv[2] != NULL) | 
| } |     ospf->distance_external = atoi(argv[2]); | 
 |   | 
   | 
 |  DEFUN (ospf_distance_ospf_inter_external_intra, | 
   | 
 |         ospf_distance_ospf_inter_external_intra_cmd, | 
   | 
 |         "distance ospf inter-area <1-255> external <1-255> intra-area <1-255>", | 
   | 
 |         "Define an administrative distance\n" | 
   | 
 |         "OSPF Administrative distance\n" | 
   | 
 |         "Inter-area routes\n" | 
   | 
 |         "Distance for inter-area routes\n" | 
   | 
 |         "External routes\n" | 
   | 
 |         "Distance for external routes\n" | 
   | 
 |         "Intra-area routes\n" | 
   | 
 |         "Distance for intra-area routes\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |   | 
   | 
 |    ospf->distance_inter = atoi (argv[0]); | 
   | 
 |    ospf->distance_external = atoi (argv[1]); | 
   | 
 |    ospf->distance_intra = atoi (argv[2]); | 
   | 
 |   | 
   | 
 |    return CMD_SUCCESS; | 
    return CMD_SUCCESS; | 
 |  } | 
  } | 
 |   | 
   | 
 |  DEFUN (ospf_distance_ospf_external, | 
   | 
 |         ospf_distance_ospf_external_cmd, | 
   | 
 |         "distance ospf external <1-255>", | 
   | 
 |         "Define an administrative distance\n" | 
   | 
 |         "OSPF Administrative distance\n" | 
   | 
 |         "External routes\n" | 
   | 
 |         "Distance for external routes\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |   | 
   | 
 |    ospf->distance_external = atoi (argv[0]); | 
   | 
 |   | 
   | 
 |    return CMD_SUCCESS; | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_distance_ospf_external_intra, | 
   | 
 |         ospf_distance_ospf_external_intra_cmd, | 
   | 
 |         "distance ospf external <1-255> intra-area <1-255>", | 
   | 
 |         "Define an administrative distance\n" | 
   | 
 |         "OSPF Administrative distance\n" | 
   | 
 |         "External routes\n" | 
   | 
 |         "Distance for external routes\n" | 
   | 
 |         "Intra-area routes\n" | 
   | 
 |         "Distance for intra-area routes\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |   | 
   | 
 |    ospf->distance_external = atoi (argv[0]); | 
   | 
 |    ospf->distance_intra = atoi (argv[1]); | 
   | 
 |   | 
   | 
 |    return CMD_SUCCESS; | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_distance_ospf_external_inter, | 
   | 
 |         ospf_distance_ospf_external_inter_cmd, | 
   | 
 |         "distance ospf external <1-255> inter-area <1-255>", | 
   | 
 |         "Define an administrative distance\n" | 
   | 
 |         "OSPF Administrative distance\n" | 
   | 
 |         "External routes\n" | 
   | 
 |         "Distance for external routes\n" | 
   | 
 |         "Inter-area routes\n" | 
   | 
 |         "Distance for inter-area routes\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |   | 
   | 
 |    ospf->distance_external = atoi (argv[0]); | 
   | 
 |    ospf->distance_inter = atoi (argv[1]); | 
   | 
 |   | 
   | 
 |    return CMD_SUCCESS; | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_distance_ospf_external_intra_inter, | 
   | 
 |         ospf_distance_ospf_external_intra_inter_cmd, | 
   | 
 |         "distance ospf external <1-255> intra-area <1-255> inter-area <1-255>", | 
   | 
 |         "Define an administrative distance\n" | 
   | 
 |         "OSPF Administrative distance\n" | 
   | 
 |         "External routes\n" | 
   | 
 |         "Distance for external routes\n" | 
   | 
 |         "Intra-area routes\n" | 
   | 
 |         "Distance for intra-area routes\n" | 
   | 
 |         "Inter-area routes\n" | 
   | 
 |         "Distance for inter-area routes\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |   | 
   | 
 |    ospf->distance_external = atoi (argv[0]); | 
   | 
 |    ospf->distance_intra = atoi (argv[1]); | 
   | 
 |    ospf->distance_inter = atoi (argv[2]); | 
   | 
 |   | 
   | 
 |    return CMD_SUCCESS; | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_distance_ospf_external_inter_intra, | 
   | 
 |         ospf_distance_ospf_external_inter_intra_cmd, | 
   | 
 |         "distance ospf external <1-255> inter-area <1-255> intra-area <1-255>", | 
   | 
 |         "Define an administrative distance\n" | 
   | 
 |         "OSPF Administrative distance\n" | 
   | 
 |         "External routes\n" | 
   | 
 |         "Distance for external routes\n" | 
   | 
 |         "Inter-area routes\n" | 
   | 
 |         "Distance for inter-area routes\n" | 
   | 
 |         "Intra-area routes\n" | 
   | 
 |         "Distance for intra-area routes\n") | 
   | 
 |  { | 
   | 
 |    struct ospf *ospf = vty->index; | 
   | 
 |   | 
   | 
 |    ospf->distance_external = atoi (argv[0]); | 
   | 
 |    ospf->distance_inter = atoi (argv[1]); | 
   | 
 |    ospf->distance_intra = atoi (argv[2]); | 
   | 
 |   | 
   | 
 |    return CMD_SUCCESS; | 
   | 
 |  } | 
   | 
 |   | 
   | 
 |  DEFUN (ospf_distance_source, | 
  DEFUN (ospf_distance_source, | 
 |         ospf_distance_source_cmd, | 
         ospf_distance_source_cmd, | 
 |         "distance <1-255> A.B.C.D/M", | 
         "distance <1-255> A.B.C.D/M", | 
| 
 Line 7012  ALIAS (no_ip_ospf_mtu_ignore,
 | 
 Line 6416  ALIAS (no_ip_ospf_mtu_ignore,
 | 
 |        "IP Information\n" | 
        "IP Information\n" | 
 |        "OSPF interface commands\n" | 
        "OSPF interface commands\n" | 
 |        "Disable mtu mismatch detection\n") | 
        "Disable mtu mismatch detection\n") | 
 |  | 
 |  DEFUN (ospf_max_metric_router_lsa_admin, | 
  DEFUN (ospf_max_metric_router_lsa_admin, | 
 |         ospf_max_metric_router_lsa_admin_cmd, | 
         ospf_max_metric_router_lsa_admin_cmd, | 
 |         "max-metric router-lsa administrative", | 
         "max-metric router-lsa administrative", | 
| 
 Line 7031  DEFUN (ospf_max_metric_router_lsa_admin,
 | 
 Line 6435  DEFUN (ospf_max_metric_router_lsa_admin,
 | 
 |        if (!CHECK_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED)) | 
        if (!CHECK_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED)) | 
 |            ospf_router_lsa_update_area (area); | 
            ospf_router_lsa_update_area (area); | 
 |      } | 
      } | 
 |   | 
   | 
 |   | 
    /* Allows for areas configured later to get the property */ | 
 |   | 
    ospf->stub_router_admin_set = OSPF_STUB_ROUTER_ADMINISTRATIVE_SET; | 
 |   | 
   | 
 |    return CMD_SUCCESS; | 
    return CMD_SUCCESS; | 
 |  } | 
  } | 
 |   | 
   | 
| 
 Line 7058  DEFUN (no_ospf_max_metric_router_lsa_admin,
 | 
 Line 6466  DEFUN (no_ospf_max_metric_router_lsa_admin,
 | 
 |            ospf_router_lsa_update_area (area); | 
            ospf_router_lsa_update_area (area); | 
 |          } | 
          } | 
 |      } | 
      } | 
 |   | 
    ospf->stub_router_admin_set = OSPF_STUB_ROUTER_ADMINISTRATIVE_UNSET; | 
 |    return CMD_SUCCESS; | 
    return CMD_SUCCESS; | 
 |  } | 
  } | 
 |   | 
   | 
| 
 Line 7176  config_write_stub_router (struct vty *vty, struct ospf
 | 
 Line 6585  config_write_stub_router (struct vty *vty, struct ospf
 | 
 |      } | 
      } | 
 |    return; | 
    return; | 
 |  } | 
  } | 
 |  | 
 |  static void | 
  static void | 
 |  show_ip_ospf_route_network (struct vty *vty, struct route_table *rt) | 
  show_ip_ospf_route_network (struct vty *vty, struct route_table *rt) | 
 |  { | 
  { | 
| 
 Line 7395  DEFUN (show_ip_ospf_route,
 | 
 Line 6804  DEFUN (show_ip_ospf_route,
 | 
 |    return CMD_SUCCESS; | 
    return CMD_SUCCESS; | 
 |  } | 
  } | 
 |   | 
   | 
 |  | 
 |  const char *ospf_abr_type_str[] =  | 
  const char *ospf_abr_type_str[] =  | 
 |  { | 
  { | 
 |    "unknown", | 
    "unknown", | 
| 
 Line 7424  area_id2str (char *buf, int length, struct ospf_area *
 | 
 Line 6833  area_id2str (char *buf, int length, struct ospf_area *
 | 
 |      sprintf (buf, "%lu", (unsigned long) ntohl (area->area_id.s_addr)); | 
      sprintf (buf, "%lu", (unsigned long) ntohl (area->area_id.s_addr)); | 
 |  } | 
  } | 
 |   | 
   | 
 |  | 
 |  const char *ospf_int_type_str[] =  | 
  const char *ospf_int_type_str[] =  | 
 |  { | 
  { | 
 |    "unknown",            /* should never be used. */ | 
    "unknown",            /* should never be used. */ | 
| 
 Line 7602  config_write_interface (struct vty *vty)
 | 
 Line 7011  config_write_interface (struct vty *vty)
 | 
 |              vty_out (vty, "%s", VTY_NEWLINE); | 
              vty_out (vty, "%s", VTY_NEWLINE); | 
 |            } | 
            } | 
 |   | 
   | 
 |   | 
          /* Area  print. */ | 
 |   | 
          if (OSPF_IF_PARAM_CONFIGURED (params, if_area)) | 
 |   | 
            { | 
 |   | 
              vty_out (vty, " ip ospf area %s", inet_ntoa (params->if_area)); | 
 |   | 
              if (params != IF_DEF_PARAMS (ifp)) | 
 |   | 
                vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4)); | 
 |   | 
              vty_out (vty, "%s", VTY_NEWLINE); | 
 |   | 
            } | 
 |   | 
   | 
 |      /* MTU ignore print. */ | 
      /* MTU ignore print. */ | 
 |      if (OSPF_IF_PARAM_CONFIGURED (params, mtu_ignore) && | 
      if (OSPF_IF_PARAM_CONFIGURED (params, mtu_ignore) && | 
 |         params->mtu_ignore != OSPF_MTU_IGNORE_DEFAULT) | 
         params->mtu_ignore != OSPF_MTU_IGNORE_DEFAULT) | 
| 
 Line 7631  config_write_interface (struct vty *vty)
 | 
 Line 7049  config_write_interface (struct vty *vty)
 | 
 |            } | 
            } | 
 |        } while (rn); | 
        } while (rn); | 
 |         | 
         | 
 |  #ifdef HAVE_OPAQUE_LSA | 
   | 
 |        ospf_opaque_config_write_if (vty, ifp); | 
        ospf_opaque_config_write_if (vty, ifp); | 
 |  #endif /* HAVE_OPAQUE_LSA */ | 
   | 
 |      } | 
      } | 
 |   | 
   | 
 |    return write; | 
    return write; | 
| 
 Line 7858  config_write_virtual_link (struct vty *vty, struct osp
 | 
 Line 7274  config_write_virtual_link (struct vty *vty, struct osp
 | 
 |    return 0; | 
    return 0; | 
 |  } | 
  } | 
 |   | 
   | 
 |  | 
 |  static int | 
  static int | 
 |  config_write_ospf_redistribute (struct vty *vty, struct ospf *ospf) | 
  config_write_ospf_redistribute (struct vty *vty, struct ospf *ospf) | 
 |  { | 
  { | 
| 
 Line 7866  config_write_ospf_redistribute (struct vty *vty, struc
 | 
 Line 7282  config_write_ospf_redistribute (struct vty *vty, struc
 | 
 |   | 
   | 
 |    /* redistribute print. */ | 
    /* redistribute print. */ | 
 |    for (type = 0; type < ZEBRA_ROUTE_MAX; type++) | 
    for (type = 0; type < ZEBRA_ROUTE_MAX; type++) | 
|     if (type != zclient->redist_default && zclient->redist[type]) |     if (type != zclient->redist_default && | 
|   |         vrf_bitmap_check (zclient->redist[type], VRF_DEFAULT)) | 
 |        { | 
        { | 
 |          vty_out (vty, " redistribute %s", zebra_route_string(type)); | 
          vty_out (vty, " redistribute %s", zebra_route_string(type)); | 
 |          if (ospf->dmetric[type].value >= 0) | 
          if (ospf->dmetric[type].value >= 0) | 
| 
 Line 8021  ospf_config_write (struct vty *vty)
 | 
 Line 7438  ospf_config_write (struct vty *vty)
 | 
 |                     ospf->ref_bandwidth / 1000, VTY_NEWLINE); | 
                     ospf->ref_bandwidth / 1000, VTY_NEWLINE); | 
 |          } | 
          } | 
 |   | 
   | 
 |   | 
        /* LSA timers */ | 
 |   | 
        if (ospf->min_ls_interval != OSPF_MIN_LS_INTERVAL) | 
 |   | 
    vty_out (vty, " timers throttle lsa all %d%s", | 
 |   | 
       ospf->min_ls_interval, VTY_NEWLINE); | 
 |   | 
        if (ospf->min_ls_arrival != OSPF_MIN_LS_ARRIVAL) | 
 |   | 
    vty_out (vty, " timers lsa arrival %d%s", | 
 |   | 
       ospf->min_ls_arrival, VTY_NEWLINE); | 
 |   | 
   | 
 |        /* SPF timers print. */ | 
        /* SPF timers print. */ | 
 |        if (ospf->spf_delay != OSPF_SPF_DELAY_DEFAULT || | 
        if (ospf->spf_delay != OSPF_SPF_DELAY_DEFAULT || | 
 |            ospf->spf_holdtime != OSPF_SPF_HOLDTIME_DEFAULT || | 
            ospf->spf_holdtime != OSPF_SPF_HOLDTIME_DEFAULT || | 
| 
 Line 8093  ospf_config_write (struct vty *vty)
 | 
 Line 7518  ospf_config_write (struct vty *vty)
 | 
 |        /* Distance configuration. */ | 
        /* Distance configuration. */ | 
 |        config_write_ospf_distance (vty, ospf); | 
        config_write_ospf_distance (vty, ospf); | 
 |   | 
   | 
 |  #ifdef HAVE_OPAQUE_LSA | 
   | 
 |        ospf_opaque_config_write_router (vty, ospf); | 
        ospf_opaque_config_write_router (vty, ospf); | 
 |  #endif /* HAVE_OPAQUE_LSA */ | 
   | 
 |      } | 
      } | 
 |   | 
   | 
 |    return write; | 
    return write; | 
| 
 Line 8151  ospf_vty_show_init (void)
 | 
 Line 7574  ospf_vty_show_init (void)
 | 
 |    install_element (ENABLE_NODE, &show_ip_ospf_border_routers_cmd); | 
    install_element (ENABLE_NODE, &show_ip_ospf_border_routers_cmd); | 
 |  } | 
  } | 
 |   | 
   | 
 |  | 
 |  /* ospfd's interface node. */ | 
  /* ospfd's interface node. */ | 
 |  static struct cmd_node interface_node = | 
  static struct cmd_node interface_node = | 
 |  { | 
  { | 
| 
 Line 8243  ospf_vty_if_init (void)
 | 
 Line 7666  ospf_vty_if_init (void)
 | 
 |    install_element (INTERFACE_NODE, &no_ip_ospf_transmit_delay_addr_cmd); | 
    install_element (INTERFACE_NODE, &no_ip_ospf_transmit_delay_addr_cmd); | 
 |    install_element (INTERFACE_NODE, &no_ip_ospf_transmit_delay_cmd); | 
    install_element (INTERFACE_NODE, &no_ip_ospf_transmit_delay_cmd); | 
 |   | 
   | 
 |   | 
    /* "ip ospf area" commands. */ | 
 |   | 
    install_element (INTERFACE_NODE, &ip_ospf_area_cmd); | 
 |   | 
    install_element (INTERFACE_NODE, &no_ip_ospf_area_cmd); | 
 |   | 
   | 
 |    /* These commands are compatibitliy for previous version. */ | 
    /* These commands are compatibitliy for previous version. */ | 
 |    install_element (INTERFACE_NODE, &ospf_authentication_key_cmd); | 
    install_element (INTERFACE_NODE, &ospf_authentication_key_cmd); | 
 |    install_element (INTERFACE_NODE, &no_ospf_authentication_key_cmd); | 
    install_element (INTERFACE_NODE, &no_ospf_authentication_key_cmd); | 
| 
 Line 8271  ospf_vty_if_init (void)
 | 
 Line 7698  ospf_vty_if_init (void)
 | 
 |  static void | 
  static void | 
 |  ospf_vty_zebra_init (void) | 
  ospf_vty_zebra_init (void) | 
 |  { | 
  { | 
 |    install_element (OSPF_NODE, &ospf_redistribute_source_type_metric_cmd); | 
   | 
 |    install_element (OSPF_NODE, &ospf_redistribute_source_metric_type_cmd); | 
   | 
 |    install_element (OSPF_NODE, &ospf_redistribute_source_type_cmd); | 
   | 
 |    install_element (OSPF_NODE, &ospf_redistribute_source_metric_cmd); | 
   | 
 |    install_element (OSPF_NODE, &ospf_redistribute_source_cmd); | 
    install_element (OSPF_NODE, &ospf_redistribute_source_cmd); | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_redistribute_source_metric_type_routemap_cmd); | 
   | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_redistribute_source_type_metric_routemap_cmd); | 
   | 
 |    install_element (OSPF_NODE, &ospf_redistribute_source_metric_routemap_cmd); | 
   | 
 |    install_element (OSPF_NODE, &ospf_redistribute_source_type_routemap_cmd); | 
   | 
 |    install_element (OSPF_NODE, &ospf_redistribute_source_routemap_cmd); | 
   | 
 |     | 
   | 
 |    install_element (OSPF_NODE, &no_ospf_redistribute_source_cmd); | 
    install_element (OSPF_NODE, &no_ospf_redistribute_source_cmd); | 
 |   | 
   | 
 |    install_element (OSPF_NODE, &ospf_distribute_list_out_cmd); | 
    install_element (OSPF_NODE, &ospf_distribute_list_out_cmd); | 
 |    install_element (OSPF_NODE, &no_ospf_distribute_list_out_cmd); | 
    install_element (OSPF_NODE, &no_ospf_distribute_list_out_cmd); | 
 |   | 
   | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_default_information_originate_metric_type_cmd); | 
   | 
 |    install_element (OSPF_NODE, &ospf_default_information_originate_metric_cmd); | 
   | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_default_information_originate_type_metric_cmd); | 
   | 
 |    install_element (OSPF_NODE, &ospf_default_information_originate_type_cmd); | 
   | 
 |    install_element (OSPF_NODE, &ospf_default_information_originate_cmd); | 
    install_element (OSPF_NODE, &ospf_default_information_originate_cmd); | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_default_information_originate_always_metric_type_cmd); | 
   | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_default_information_originate_always_metric_cmd); | 
   | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_default_information_originate_always_cmd); | 
   | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_default_information_originate_always_type_metric_cmd); | 
   | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_default_information_originate_always_type_cmd); | 
   | 
 |   | 
   | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_default_information_originate_metric_type_routemap_cmd); | 
   | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_default_information_originate_metric_routemap_cmd); | 
   | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_default_information_originate_routemap_cmd); | 
   | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_default_information_originate_type_metric_routemap_cmd); | 
   | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_default_information_originate_type_routemap_cmd); | 
   | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_default_information_originate_always_metric_type_routemap_cmd); | 
   | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_default_information_originate_always_metric_routemap_cmd); | 
   | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_default_information_originate_always_routemap_cmd); | 
   | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_default_information_originate_always_type_metric_routemap_cmd); | 
   | 
 |    install_element (OSPF_NODE, | 
   | 
 |                     &ospf_default_information_originate_always_type_routemap_cmd); | 
   | 
 |   | 
   | 
 |    install_element (OSPF_NODE, &no_ospf_default_information_originate_cmd); | 
    install_element (OSPF_NODE, &no_ospf_default_information_originate_cmd); | 
 |   | 
   | 
 |    install_element (OSPF_NODE, &ospf_default_metric_cmd); | 
    install_element (OSPF_NODE, &ospf_default_metric_cmd); | 
| 
 Line 8337  ospf_vty_zebra_init (void)
 | 
 Line 7714  ospf_vty_zebra_init (void)
 | 
 |    install_element (OSPF_NODE, &ospf_distance_cmd); | 
    install_element (OSPF_NODE, &ospf_distance_cmd); | 
 |    install_element (OSPF_NODE, &no_ospf_distance_cmd); | 
    install_element (OSPF_NODE, &no_ospf_distance_cmd); | 
 |    install_element (OSPF_NODE, &no_ospf_distance_ospf_cmd); | 
    install_element (OSPF_NODE, &no_ospf_distance_ospf_cmd); | 
|   install_element (OSPF_NODE, &ospf_distance_ospf_intra_cmd); |   install_element (OSPF_NODE, &ospf_distance_ospf_cmd); | 
|   install_element (OSPF_NODE, &ospf_distance_ospf_intra_inter_cmd); |   | 
|   install_element (OSPF_NODE, &ospf_distance_ospf_intra_external_cmd); |   | 
|   install_element (OSPF_NODE, &ospf_distance_ospf_intra_inter_external_cmd); |   | 
|   install_element (OSPF_NODE, &ospf_distance_ospf_intra_external_inter_cmd); |   | 
|   install_element (OSPF_NODE, &ospf_distance_ospf_inter_cmd); |   | 
|   install_element (OSPF_NODE, &ospf_distance_ospf_inter_intra_cmd); |   | 
|   install_element (OSPF_NODE, &ospf_distance_ospf_inter_external_cmd); |   | 
|   install_element (OSPF_NODE, &ospf_distance_ospf_inter_intra_external_cmd); |   | 
|   install_element (OSPF_NODE, &ospf_distance_ospf_inter_external_intra_cmd); |   | 
|   install_element (OSPF_NODE, &ospf_distance_ospf_external_cmd); |   | 
|   install_element (OSPF_NODE, &ospf_distance_ospf_external_intra_cmd); |   | 
|   install_element (OSPF_NODE, &ospf_distance_ospf_external_inter_cmd); |   | 
|   install_element (OSPF_NODE, &ospf_distance_ospf_external_intra_inter_cmd); |   | 
|   install_element (OSPF_NODE, &ospf_distance_ospf_external_inter_intra_cmd); |   | 
 |  #if 0 | 
  #if 0 | 
 |    install_element (OSPF_NODE, &ospf_distance_source_cmd); | 
    install_element (OSPF_NODE, &ospf_distance_source_cmd); | 
 |    install_element (OSPF_NODE, &no_ospf_distance_source_cmd); | 
    install_element (OSPF_NODE, &no_ospf_distance_source_cmd); | 
| 
 Line 8367  static struct cmd_node ospf_node =
 | 
 Line 7730  static struct cmd_node ospf_node =
 | 
 |    1 | 
    1 | 
 |  }; | 
  }; | 
 |   | 
   | 
 |  | 
 |  /* Install OSPF related vty commands. */ | 
  /* Install OSPF related vty commands. */ | 
 |  void | 
  void | 
 |  ospf_vty_init (void) | 
  ospf_vty_init (void) | 
| 
 Line 8496  ospf_vty_init (void)
 | 
 Line 7859  ospf_vty_init (void)
 | 
 |    install_element (OSPF_NODE, &ospf_area_import_list_cmd); | 
    install_element (OSPF_NODE, &ospf_area_import_list_cmd); | 
 |    install_element (OSPF_NODE, &no_ospf_area_import_list_cmd); | 
    install_element (OSPF_NODE, &no_ospf_area_import_list_cmd); | 
 |     | 
     | 
 |   | 
    /* LSA timer commands */ | 
 |   | 
    install_element (OSPF_NODE, &ospf_timers_min_ls_interval_cmd); | 
 |   | 
    install_element (OSPF_NODE, &no_ospf_timers_min_ls_interval_cmd); | 
 |   | 
    install_element (OSPF_NODE, &ospf_timers_min_ls_arrival_cmd); | 
 |   | 
    install_element (OSPF_NODE, &no_ospf_timers_min_ls_arrival_cmd); | 
 |   | 
   | 
 |    /* SPF timer commands */ | 
    /* SPF timer commands */ | 
 |    install_element (OSPF_NODE, &ospf_timers_spf_cmd); | 
    install_element (OSPF_NODE, &ospf_timers_spf_cmd); | 
 |    install_element (OSPF_NODE, &no_ospf_timers_spf_cmd); | 
    install_element (OSPF_NODE, &no_ospf_timers_spf_cmd); |