2004-10-13 Paul Jakma <paul@dishone.st>

	* (global) more const'ification and fixups of types to clean up code.
	* bgp_mplsvpn.{c,h}: (str2tag) fix abuse. Still not perfect,
          should use something like the VTY_GET_INTEGER macro, but without
          the vty_out bits..
        * bgp_routemap.c: (set_aggregator_as) use VTY_GET_INTEGER_RANGE
          (no_set_aggregator_as) ditto.
        * bgpd.c: (peer_uptime) fix unlikely bug, where no buffer is
          returned, add comments about troublesome return value.
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index 6b3c498..027b8ca 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -84,7 +84,7 @@
 
 /* Utility function for looking up peer from VTY.  */
 struct peer *
-peer_lookup_vty (struct vty *vty, char *ip_str)
+peer_lookup_vty (struct vty *vty, const char *ip_str)
 {
   int ret;
   struct bgp *bgp;
@@ -111,7 +111,7 @@
 
 /* Utility function for looking up peer or peer group.  */
 struct peer *
-peer_and_group_lookup_vty (struct vty *vty, char *peer_str)
+peer_and_group_lookup_vty (struct vty *vty, const char *peer_str)
 {
   int ret;
   struct bgp *bgp;
@@ -144,7 +144,7 @@
 int
 bgp_vty_return (struct vty *vty, int ret)
 {
-  char *str = NULL;
+  const char *str = NULL;
 
   switch (ret)
     {
@@ -297,7 +297,7 @@
   int ret;
   as_t as;
   struct bgp *bgp;
-  char *name = NULL;
+  const char *name = NULL;
 
   VTY_GET_INTEGER_RANGE ("AS", as, argv[0], 1, 65535);
 
@@ -350,7 +350,7 @@
 {
   as_t as;
   struct bgp *bgp;
-  char *name = NULL;
+  const char *name = NULL;
 
   VTY_GET_INTEGER_RANGE ("AS", as, argv[0], 1, 65535);
 
@@ -1143,8 +1143,8 @@
        "Configure default local preference value\n")
 
 static int
-peer_remote_as_vty (struct vty *vty, char *peer_str, char *as_str, afi_t afi,
-		    safi_t safi)
+peer_remote_as_vty (struct vty *vty, const char *peer_str, 
+                    const char *as_str, afi_t afi, safi_t safi)
 {
   int ret;
   struct bgp *bgp;
@@ -1508,7 +1508,8 @@
 }
 
 int
-peer_flag_modify_vty (struct vty *vty, char *ip_str, u_int16_t flag, int set)
+peer_flag_modify_vty (struct vty *vty, const char *ip_str, 
+                      u_int16_t flag, int set)
 {
   int ret;
   struct peer *peer;
@@ -1526,13 +1527,13 @@
 }
 
 int
-peer_flag_set_vty (struct vty *vty, char *ip_str, u_int16_t flag)
+peer_flag_set_vty (struct vty *vty, const char *ip_str, u_int16_t flag)
 {
   return peer_flag_modify_vty (vty, ip_str, flag, 1);
 }
 
 int
-peer_flag_unset_vty (struct vty *vty, char *ip_str, u_int16_t flag)
+peer_flag_unset_vty (struct vty *vty, const char *ip_str, u_int16_t flag)
 {
   return peer_flag_modify_vty (vty, ip_str, flag, 0);
 }
@@ -1652,7 +1653,7 @@
 }
 
 int
-peer_af_flag_modify_vty (struct vty *vty, char *peer_str, afi_t afi,
+peer_af_flag_modify_vty (struct vty *vty, const char *peer_str, afi_t afi,
 			 safi_t safi, u_int32_t flag, int set)
 {
   int ret;
@@ -1671,14 +1672,14 @@
 }
 
 int
-peer_af_flag_set_vty (struct vty *vty, char *peer_str, afi_t afi,
+peer_af_flag_set_vty (struct vty *vty, const char *peer_str, afi_t afi,
 		      safi_t safi, u_int32_t flag)
 {
   return peer_af_flag_modify_vty (vty, peer_str, afi, safi, flag, 1);
 }
 
 int
-peer_af_flag_unset_vty (struct vty *vty, char *peer_str, afi_t afi,
+peer_af_flag_unset_vty (struct vty *vty, const char *peer_str, afi_t afi,
 			safi_t safi, u_int32_t flag)
 {
   return peer_af_flag_modify_vty (vty, peer_str, afi, safi, flag, 0);
@@ -1929,7 +1930,8 @@
 }
 
 int
-peer_rsclient_set_vty (struct vty *vty, char *peer_str, int afi, int safi)
+peer_rsclient_set_vty (struct vty *vty, const char *peer_str, 
+                       int afi, int safi)
 {
   int ret;
   struct bgp *bgp;
@@ -2010,7 +2012,8 @@
 }
 
 int
-peer_rsclient_unset_vty (struct vty *vty, char *peer_str, int afi, int safi)
+peer_rsclient_unset_vty (struct vty *vty, const char *peer_str, 
+                         int afi, int safi)
 {
   int ret;
   struct bgp *bgp;
@@ -2466,10 +2469,11 @@
 
 /* EBGP multihop configuration. */
 int
-peer_ebgp_multihop_set_vty (struct vty *vty, char *ip_str, char *ttl_str)
+peer_ebgp_multihop_set_vty (struct vty *vty, const char *ip_str, 
+                            const char *ttl_str)
 {
   struct peer *peer;
-  int ttl;
+  unsigned int ttl;
 
   peer = peer_and_group_lookup_vty (vty, ip_str);
   if (! peer)
@@ -2486,7 +2490,7 @@
 }
 
 int
-peer_ebgp_multihop_unset_vty (struct vty *vty, char *ip_str) 
+peer_ebgp_multihop_unset_vty (struct vty *vty, const char *ip_str) 
 {
   struct peer *peer;
 
@@ -2632,7 +2636,8 @@
 
 /* Neighbor update-source. */
 int
-peer_update_source_vty (struct vty *vty, char *peer_str, char *source_str)
+peer_update_source_vty (struct vty *vty, const char *peer_str, 
+                        const char *source_str)
 {
   struct peer *peer;
   union sockunion *su;
@@ -2682,8 +2687,9 @@
 }
 
 int
-peer_default_originate_set_vty (struct vty *vty, char *peer_str, afi_t afi,
-				safi_t safi, char *rmap, int set)
+peer_default_originate_set_vty (struct vty *vty, const char *peer_str, 
+                                afi_t afi, safi_t safi, 
+                                const char *rmap, int set)
 {
   int ret;
   struct peer *peer;
@@ -2749,7 +2755,8 @@
 
 /* Set neighbor's BGP port.  */
 int
-peer_port_vty (struct vty *vty, char *ip_str, int afi, char *port_str)
+peer_port_vty (struct vty *vty, const char *ip_str, int afi, 
+               const char *port_str)
 {
   struct peer *peer;
   u_int16_t port;
@@ -2808,7 +2815,8 @@
 
 /* neighbor weight. */
 int
-peer_weight_set_vty (struct vty *vty, char *ip_str, char *weight_str)
+peer_weight_set_vty (struct vty *vty, const char *ip_str, 
+                     const char *weight_str)
 {
   int ret;
   struct peer *peer;
@@ -2826,7 +2834,7 @@
 }
 
 int
-peer_weight_unset_vty (struct vty *vty, char *ip_str)
+peer_weight_unset_vty (struct vty *vty, const char *ip_str)
 {
   struct peer *peer;
 
@@ -2914,8 +2922,8 @@
 }
 
 int
-peer_timers_set_vty (struct vty *vty, char *ip_str, char *keep_str,
-		     char *hold_str)
+peer_timers_set_vty (struct vty *vty, const char *ip_str, 
+                     const char *keep_str, const char *hold_str)
 {
   int ret;
   struct peer *peer;
@@ -2935,7 +2943,7 @@
 }
 
 int
-peer_timers_unset_vty (struct vty *vty, char *ip_str)
+peer_timers_unset_vty (struct vty *vty, const char *ip_str)
 {
   int ret;
   struct peer *peer;
@@ -2973,7 +2981,8 @@
 }
 
 int
-peer_timers_connect_set_vty (struct vty *vty, char *ip_str, char *time_str)
+peer_timers_connect_set_vty (struct vty *vty, const char *ip_str, 
+                             const char *time_str)
 {
   int ret;
   struct peer *peer;
@@ -2991,7 +3000,7 @@
 }
 
 int
-peer_timers_connect_unset_vty (struct vty *vty, char *ip_str)
+peer_timers_connect_unset_vty (struct vty *vty, const char *ip_str)
 {
   int ret;
   struct peer *peer;
@@ -3040,8 +3049,8 @@
        "Connect timer\n")
 
 int
-peer_advertise_interval_vty (struct vty *vty, char *ip_str, char *time_str,
-			     int set)  
+peer_advertise_interval_vty (struct vty *vty, const char *ip_str, 
+                             const char *time_str, int set)  
 {
   int ret;
   struct peer *peer;
@@ -3094,7 +3103,7 @@
        "time in seconds\n")
 
 int
-peer_version_vty (struct vty *vty, char *ip_str, char *str)
+peer_version_vty (struct vty *vty, const char *ip_str, const char *str)
 {
   int ret;
   struct peer *peer;
@@ -3145,7 +3154,7 @@
 
 /* neighbor interface */
 int
-peer_interface_vty (struct vty *vty, char *ip_str, char *str)
+peer_interface_vty (struct vty *vty, const char *ip_str, const char *str)
 {
   int ret;
   struct peer *peer;
@@ -3187,8 +3196,9 @@
 
 /* Set distribute list to the peer. */
 int
-peer_distribute_set_vty (struct vty *vty, char *ip_str, afi_t afi, safi_t safi,
-			 char *name_str, char *direct_str)
+peer_distribute_set_vty (struct vty *vty, const char *ip_str, 
+                         afi_t afi, safi_t safi,
+			 const char *name_str, const char *direct_str)
 {
   int ret;
   struct peer *peer;
@@ -3210,8 +3220,8 @@
 }
 
 int
-peer_distribute_unset_vty (struct vty *vty, char *ip_str, afi_t afi,
-			   safi_t safi, char *direct_str)
+peer_distribute_unset_vty (struct vty *vty, const char *ip_str, afi_t afi,
+			   safi_t safi, const char *direct_str)
 {
   int ret;
   struct peer *peer;
@@ -3267,8 +3277,9 @@
 
 /* Set prefix list to the peer. */
 int
-peer_prefix_list_set_vty (struct vty *vty, char *ip_str, afi_t afi,
-			  safi_t safi, char *name_str, char *direct_str)
+peer_prefix_list_set_vty (struct vty *vty, const char *ip_str, afi_t afi,
+			  safi_t safi, const char *name_str, 
+                          const char *direct_str)
 {
   int ret;
   struct peer *peer;
@@ -3290,8 +3301,8 @@
 }
 
 int
-peer_prefix_list_unset_vty (struct vty *vty, char *ip_str, afi_t afi,
-			    safi_t safi, char *direct_str)
+peer_prefix_list_unset_vty (struct vty *vty, const char *ip_str, afi_t afi,
+			    safi_t safi, const char *direct_str)
 {
   int ret;
   struct peer *peer;
@@ -3342,8 +3353,9 @@
 }
 
 int
-peer_aslist_set_vty (struct vty *vty, char *ip_str, afi_t afi, safi_t safi,
-		     char *name_str, char *direct_str)
+peer_aslist_set_vty (struct vty *vty, const char *ip_str, 
+                     afi_t afi, safi_t safi,
+		     const char *name_str, const char *direct_str)
 {
   int ret;
   struct peer *peer;
@@ -3365,8 +3377,9 @@
 }
 
 int
-peer_aslist_unset_vty (struct vty *vty, char *ip_str, afi_t afi, safi_t safi,
-		       char *direct_str)
+peer_aslist_unset_vty (struct vty *vty, const char *ip_str, 
+                       afi_t afi, safi_t safi,
+		       const char *direct_str)
 {
   int ret;
   struct peer *peer;
@@ -3418,8 +3431,9 @@
 
 /* Set route-map to the peer. */
 int
-peer_route_map_set_vty (struct vty *vty, char *ip_str, afi_t afi, safi_t safi,
-			char *name_str, char *direct_str)
+peer_route_map_set_vty (struct vty *vty, const char *ip_str, 
+                        afi_t afi, safi_t safi,
+			const char *name_str, const char *direct_str)
 {
   int ret;
   struct peer *peer;
@@ -3445,8 +3459,8 @@
 }
 
 int
-peer_route_map_unset_vty (struct vty *vty, char *ip_str, afi_t afi,
-			  safi_t safi, char *direct_str)
+peer_route_map_unset_vty (struct vty *vty, const char *ip_str, afi_t afi,
+			  safi_t safi, const char *direct_str)
 {
   int ret;
   struct peer *peer;
@@ -3506,8 +3520,8 @@
 
 /* Set unsuppress-map to the peer. */
 int
-peer_unsuppress_map_set_vty (struct vty *vty, char *ip_str, afi_t afi,
-			     safi_t safi, char *name_str)
+peer_unsuppress_map_set_vty (struct vty *vty, const char *ip_str, afi_t afi,
+			     safi_t safi, const char *name_str)
 {
   int ret;
   struct peer *peer;
@@ -3523,7 +3537,7 @@
 
 /* Unset route-map from the peer. */
 int
-peer_unsuppress_map_unset_vty (struct vty *vty, char *ip_str, afi_t afi,
+peer_unsuppress_map_unset_vty (struct vty *vty, const char *ip_str, afi_t afi,
 			       safi_t safi)
 {
   int ret;
@@ -3564,9 +3578,9 @@
 }
 
 int
-peer_maximum_prefix_set_vty (struct vty *vty, char *ip_str, afi_t afi,
-			     safi_t safi, char *num_str,  char *threshold_str,
-                             int warning)
+peer_maximum_prefix_set_vty (struct vty *vty, const char *ip_str, afi_t afi,
+			     safi_t safi, const char *num_str,  
+                             const char *threshold_str, int warning)
 {
   int ret;
   struct peer *peer;
@@ -3589,7 +3603,7 @@
 }
 
 int
-peer_maximum_prefix_unset_vty (struct vty *vty, char *ip_str, afi_t afi,
+peer_maximum_prefix_unset_vty (struct vty *vty, const char *ip_str, afi_t afi,
 			       safi_t safi)
 {
   int ret;
@@ -3711,7 +3725,7 @@
 {
   int ret;
   struct peer *peer;
-  int allow_num;
+  unsigned int allow_num;
 
   peer = peer_and_group_lookup_vty (vty, argv[0]);
   if (! peer)
@@ -3863,7 +3877,7 @@
 /* `clear ip bgp' functions. */
 int
 bgp_clear (struct vty *vty, struct bgp *bgp,  afi_t afi, safi_t safi,
-           enum clear_sort sort,enum bgp_clear_type stype, char *arg)
+           enum clear_sort sort,enum bgp_clear_type stype, const char *arg)
 {
   int ret;
   struct peer *peer;
@@ -4005,8 +4019,9 @@
 }
 
 int
-bgp_clear_vty (struct vty *vty, char *name, afi_t afi, safi_t safi,
-               enum clear_sort sort, enum bgp_clear_type stype, char *arg)  
+bgp_clear_vty (struct vty *vty, const char *name, afi_t afi, safi_t safi,
+               enum clear_sort sort, enum bgp_clear_type stype, 
+               const char *arg)
 {
   int ret;
   struct bgp *bgp;
@@ -6412,7 +6427,8 @@
 }
 
 int 
-bgp_show_summary_vty (struct vty *vty, char *name, afi_t afi, safi_t safi)
+bgp_show_summary_vty (struct vty *vty, const char *name, 
+                      afi_t afi, safi_t safi)
 {
   struct bgp *bgp;
 
@@ -6602,7 +6618,7 @@
 }
 #endif /* HAVE_IPV6 */
 
-char *
+const char *
 afi_safi_print (afi_t afi, safi_t safi)
 {
   if (afi == AFI_IP && safi == SAFI_UNICAST)
@@ -7187,8 +7203,8 @@
 }
 
 int 
-bgp_show_neighbor_vty (struct vty *vty, char *name, enum show_type type,
-		       char *ip_str)
+bgp_show_neighbor_vty (struct vty *vty, const char *name, 
+                       enum show_type type, const char *ip_str)
 {
   int ret;
   struct bgp *bgp;
@@ -7505,7 +7521,7 @@
 {
   char timebuf[BGP_UPTIME_LEN];
   char rmbuf[14];
-  char *rmname;
+  const char *rmname;
   struct peer *peer;
   struct listnode *nn;
   int len;
@@ -7576,7 +7592,8 @@
 }
 
 int
-bgp_show_rsclient_summary (struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi)
+bgp_show_rsclient_summary (struct vty *vty, struct bgp *bgp, 
+                           afi_t afi, safi_t safi)
 {
   struct peer *peer;
   struct listnode *nn;
@@ -7618,7 +7635,8 @@
 }
 
 int
-bgp_show_rsclient_summary_vty (struct vty *vty, char *name, afi_t afi, safi_t safi)
+bgp_show_rsclient_summary_vty (struct vty *vty, const char *name, 
+                               afi_t afi, safi_t safi)
 {
   struct bgp *bgp;
 
@@ -7760,7 +7778,7 @@
 /* Utility function to convert user input route type string to route
    type.  */
 static int
-bgp_str2route_type (int afi, char *str)
+bgp_str2route_type (int afi, const char *str)
 {
   if (! str)
     return 0;
@@ -8306,7 +8324,7 @@
 			       safi_t safi, int *write)
 {
   int i;
-  char *str[] = { "system", "kernel", "connected", "static", "rip",
+  const char *str[] = { "system", "kernel", "connected", "static", "rip",
 		  "ripng", "ospf", "ospf6", "isis", "bgp"};
 
   /* Unicast redistribution only.  */
@@ -9325,7 +9343,7 @@
 /* VTY functions.  */
 
 /* Direction value to string conversion.  */
-char *
+const char *
 community_direct_str (int direct)
 {
   switch (direct)
@@ -9365,8 +9383,8 @@
 
 /* VTY interface for community_set() function.  */
 int
-community_list_set_vty (struct vty *vty, int argc, char **argv, int style,
-			int reject_all_digit_name)
+community_list_set_vty (struct vty *vty, int argc, const char **argv, 
+                        int style, int reject_all_digit_name)
 {
   int ret;
   int direct;
@@ -9418,7 +9436,7 @@
 
 /* Community-list delete with name.  */
 int
-community_list_unset_all_vty (struct vty *vty, char *name)
+community_list_unset_all_vty (struct vty *vty, const char *name)
 {
   int ret;
 
@@ -9434,7 +9452,8 @@
 
 /* Communiyt-list entry delete.  */
 int
-community_list_unset_vty (struct vty *vty, int argc, char **argv, int style)
+community_list_unset_vty (struct vty *vty, int argc, const char **argv, 
+                          int style)
 {
   int ret;
   int direct;
@@ -9738,8 +9757,8 @@
 }
 
 int
-extcommunity_list_set_vty (struct vty *vty, int argc, char **argv, int style,
-			   int reject_all_digit_name)
+extcommunity_list_set_vty (struct vty *vty, int argc, const char **argv, 
+                           int style, int reject_all_digit_name)
 {
   int ret;
   int direct;
@@ -9786,7 +9805,7 @@
 }
 
 int
-extcommunity_list_unset_all_vty (struct vty *vty, char *name)
+extcommunity_list_unset_all_vty (struct vty *vty, const char *name)
 {
   int ret;
 
@@ -9801,7 +9820,8 @@
 }
 
 int
-extcommunity_list_unset_vty (struct vty *vty, int argc, char **argv, int style)
+extcommunity_list_unset_vty (struct vty *vty, int argc, const char **argv, 
+                             int style)
 {
   int ret;
   int direct;
@@ -10077,10 +10097,10 @@
 }
 
 /* Return configuration string of community-list entry.  */
-static char *
+static const char *
 community_list_config_str (struct community_entry *entry)
 {
-  char *str;
+  const char *str;
 
   if (entry->any)
     str = "";