diff --git a/bgpd/ChangeLog b/bgpd/ChangeLog
index 9ed186b..7603dc5 100644
--- a/bgpd/ChangeLog
+++ b/bgpd/ChangeLog
@@ -1,3 +1,7 @@
+2004-06-04 Paul Jakma <paul@dishone.st>
+
+	* type mismatch fixes
+	  
 2004-05-21  Akihiro Mizutani <mizutani@net-chef.net>
 
 	* bgpd.h, bgp_open.[ch], bgp_debug.c, bgp_vty.[ch], bgp_fsm.c:
diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
index 7d48374..d745d87 100644
--- a/bgpd/bgp_attr.c
+++ b/bgpd/bgp_attr.c
@@ -84,13 +84,13 @@
 
 /* Cluster list related functions. */
 struct cluster_list *
-cluster_parse (caddr_t pnt, int length)
+cluster_parse (struct in_addr * pnt, int length)
 {
   struct cluster_list tmp;
   struct cluster_list *cluster;
 
   tmp.length = length;
-  tmp.list = (struct in_addr *) pnt;
+  tmp.list = pnt;
 
   cluster = hash_get (cluster_hash, &tmp, cluster_hash_alloc);
   cluster->refcnt++;
@@ -857,7 +857,8 @@
     attr->community = NULL;
   else
     {
-      attr->community = community_parse (stream_pnt (peer->ibuf), length);
+      attr->community = 
+        community_parse ((u_int32_t *)stream_pnt (peer->ibuf), length);
       stream_forward (peer->ibuf, length);
     }
 
@@ -904,7 +905,8 @@
       return -1;
     }
 
-  attr->cluster = cluster_parse (stream_pnt (peer->ibuf), length);
+  attr->cluster = cluster_parse ((struct in_addr *)stream_pnt (peer->ibuf), 
+                                 length);
 
   stream_forward (peer->ibuf, length);;
 
@@ -1065,7 +1067,8 @@
     attr->ecommunity = NULL;
   else
     {
-      attr->ecommunity = ecommunity_parse (stream_pnt (peer->ibuf), length);
+      attr->ecommunity = 
+        ecommunity_parse ((u_int8_t *)stream_pnt (peer->ibuf), length);
       stream_forward (peer->ibuf, length);
     }
   attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_EXT_COMMUNITIES);
@@ -1339,7 +1342,7 @@
 bgp_packet_attribute (struct bgp *bgp, struct peer *peer,
 		      struct stream *s, struct attr *attr, struct prefix *p,
 		      afi_t afi, safi_t safi, struct peer *from,
-		      struct prefix_rd *prd, u_char *tag)
+		      struct prefix_rd *prd, char *tag)
 {
   unsigned long cp;
   struct aspath *aspath;
@@ -1671,7 +1674,7 @@
 	}
       else
 	{
-	  u_char *pnt;
+	  u_int8_t *pnt;
 	  int tbit;
 	  int ecom_tr_size = 0;
 	  int i;
@@ -1727,7 +1730,7 @@
 bgp_size_t
 bgp_packet_withdraw (struct peer *peer, struct stream *s, struct prefix *p,
 		     afi_t afi, safi_t safi, struct prefix_rd *prd,
-		     u_char *tag)
+		     char *tag)
 {
   unsigned long cp;
   unsigned long attrlen_pnt;
diff --git a/bgpd/bgp_attr.h b/bgpd/bgp_attr.h
index 2bcbbf3..c9acc71 100644
--- a/bgpd/bgp_attr.h
+++ b/bgpd/bgp_attr.h
@@ -111,9 +111,16 @@
 void bgp_attr_flush (struct attr *);
 struct attr *bgp_attr_default_set (struct attr *attr, u_char);
 struct attr *bgp_attr_default_intern (u_char);
-struct attr *bgp_attr_aggregate_intern (struct bgp *, u_char, struct aspath *, struct community *, int as_set);
-bgp_size_t bgp_packet_attribute (struct bgp *bgp, struct peer *, struct stream *, struct attr *, struct prefix *, afi_t, safi_t, struct peer *, struct prefix_rd *, u_char *);
-bgp_size_t bgp_packet_withdraw (struct peer *peer, struct stream *s, struct prefix *p, afi_t, safi_t, struct prefix_rd *, u_char *);
+struct attr *bgp_attr_aggregate_intern (struct bgp *, u_char,
+                                        struct aspath *, 
+                                        struct community *, int as_set);
+bgp_size_t bgp_packet_attribute (struct bgp *bgp, struct peer *, 
+                                 struct stream *, struct attr *, 
+                                 struct prefix *, afi_t, safi_t, 
+                                 struct peer *, struct prefix_rd *, char *);
+bgp_size_t bgp_packet_withdraw (struct peer *peer, struct stream *s, 
+                                struct prefix *p, afi_t, safi_t, 
+                                struct prefix_rd *, char *);
 void bgp_dump_routes_attr (struct stream *, struct attr *, struct prefix *);
 unsigned int attrhash_key_make (struct attr *);
 int attrhash_cmp (struct attr *, struct attr *);
diff --git a/bgpd/bgp_community.c b/bgpd/bgp_community.c
index 83b1cc5..5467971 100644
--- a/bgpd/bgp_community.c
+++ b/bgpd/bgp_community.c
@@ -338,7 +338,7 @@
 
 /* Create new community attribute. */
 struct community *
-community_parse (char *pnt, u_short length)
+community_parse (u_int32_t *pnt, u_short length)
 {
   struct community tmp;
   struct community *new;
@@ -349,7 +349,7 @@
 
   /* Make temporary community for hash look up. */
   tmp.size = length / 4;
-  tmp.val = (u_int32_t *) pnt;
+  tmp.val = pnt;
 
   new = community_uniq_sort (&tmp);
 
diff --git a/bgpd/bgp_community.h b/bgpd/bgp_community.h
index 58b3f9e..898ca9e 100644
--- a/bgpd/bgp_community.h
+++ b/bgpd/bgp_community.h
@@ -51,7 +51,7 @@
 void community_init ();
 void community_free (struct community *);
 struct community *community_uniq_sort (struct community *);
-struct community *community_parse (char *, u_short);
+struct community *community_parse (u_int32_t *, u_short);
 struct community *community_intern (struct community *);
 void community_unintern (struct community *);
 char *community_str (struct community *);
diff --git a/bgpd/bgp_ecommunity.c b/bgpd/bgp_ecommunity.c
index 4adbcf5..b3fc1c3 100644
--- a/bgpd/bgp_ecommunity.c
+++ b/bgpd/bgp_ecommunity.c
@@ -58,7 +58,7 @@
 static int
 ecommunity_add_val (struct ecommunity *ecom, struct ecommunity_val *eval)
 {
-  u_char *p;
+  u_int8_t *p;
   int ret;
   int c;
 
@@ -119,7 +119,7 @@
 
 /* Parse Extended Communites Attribute in BGP packet.  */
 struct ecommunity *
-ecommunity_parse (char *pnt, u_short length)
+ecommunity_parse (u_int8_t *pnt, u_short length)
 {
   struct ecommunity tmp;
   struct ecommunity *new;
@@ -232,7 +232,7 @@
 {
   int c;
   unsigned int key;
-  unsigned char *pnt;
+  u_int8_t *pnt;
 
   key = 0;
   pnt = ecom->val;
@@ -530,13 +530,13 @@
 ecommunity_ecom2str (struct ecommunity *ecom, int format)
 {
   int i;
-  u_char *pnt;
+  u_int8_t *pnt;
   int encode = 0;
   int type = 0;
 #define ECOMMUNITY_STR_DEFAULT_LEN  26
   int str_size;
   int str_pnt;
-  u_char *str_buf;
+  char *str_buf;
   char *prefix;
   int len = 0;
   int first = 1;
diff --git a/bgpd/bgp_ecommunity.h b/bgpd/bgp_ecommunity.h
index e266471..e7be786 100644
--- a/bgpd/bgp_ecommunity.h
+++ b/bgpd/bgp_ecommunity.h
@@ -47,7 +47,7 @@
   int size;
 
   /* Extended Communities value.  */
-  u_char *val;
+  u_int8_t *val;
 
   /* Human readable format string.  */
   char *str;
@@ -64,7 +64,7 @@
 void ecommunity_init (void);
 void ecommunity_free (struct ecommunity *);
 struct ecommunity *ecommunity_new (void);
-struct ecommunity *ecommunity_parse (char *, u_short);
+struct ecommunity *ecommunity_parse (u_int8_t *, u_short);
 struct ecommunity *ecommunity_dup (struct ecommunity *);
 struct ecommunity *ecommunity_merge (struct ecommunity *, struct ecommunity *);
 struct ecommunity *ecommunity_intern (struct ecommunity *);
diff --git a/bgpd/bgp_mplsvpn.c b/bgpd/bgp_mplsvpn.c
index e820cab..90219cf 100644
--- a/bgpd/bgp_mplsvpn.c
+++ b/bgpd/bgp_mplsvpn.c
@@ -180,13 +180,13 @@
 }
 
 int
-str2prefix_rd (u_char *str, struct prefix_rd *prd)
+str2prefix_rd (char *str, struct prefix_rd *prd)
 {
   int ret;
-  u_char *p;
-  u_char *p2;
+  char *p;
+  char *p2;
   struct stream *s;
-  u_char *half;
+  char *half;
   struct in_addr addr;
 
   s = stream_new (8);
@@ -236,7 +236,7 @@
 }
 
 int
-str2tag (u_char *str, u_char *tag)
+str2tag (char *str, u_char *tag)
 {
   u_int32_t l;
 
diff --git a/bgpd/bgp_mplsvpn.h b/bgpd/bgp_mplsvpn.h
index cd861a8..a5f3eb3 100644
--- a/bgpd/bgp_mplsvpn.h
+++ b/bgpd/bgp_mplsvpn.h
@@ -40,6 +40,6 @@
 void bgp_mplsvpn_init ();
 int bgp_nlri_parse_vpnv4 (struct peer *, struct attr *, struct bgp_nlri *);
 u_int32_t decode_label (u_char *);
-int str2prefix_rd (u_char *, struct prefix_rd *);
-int str2tag (u_char *, u_char *);
+int str2prefix_rd (char *, struct prefix_rd *);
+int str2tag (char *, u_char *);
 char *prefix_rd2str (struct prefix_rd *, char *, size_t);
diff --git a/bgpd/bgp_open.c b/bgpd/bgp_open.c
index ae4a7d4..eecea60 100644
--- a/bgpd/bgp_open.c
+++ b/bgpd/bgp_open.c
@@ -48,8 +48,8 @@
 void
 bgp_capability_vty_out (struct vty *vty, struct peer *peer)
 {
-  u_char *pnt;
-  u_char *end;
+  char *pnt;
+  char *end;
   struct capability cap;
 
   pnt = peer->notify.data;
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
index 341a192..316c44e 100644
--- a/bgpd/bgp_packet.c
+++ b/bgpd/bgp_packet.c
@@ -124,7 +124,7 @@
 bgp_connect_check (struct peer *peer)
 {
   int status;
-  int slen;
+  socklen_t slen;
   int ret;
 
   /* Anyway I have to reset read and write thread. */
@@ -203,10 +203,10 @@
 	  stream_putw (s, 0);		
 	  pos = stream_get_putp (s);
 	  stream_putw (s, 0);
-	  total_attr_len = bgp_packet_attribute (NULL, peer, s,
-	                			 adv->baa->attr,
-						 &rn->p, afi, safi,
-						 binfo->peer, prd, tag);
+	  total_attr_len = bgp_packet_attribute (NULL, peer, s, 
+	                                         adv->baa->attr,
+	                                         &rn->p, afi, safi, 
+	                                         binfo->peer, prd, tag);
 	  stream_putw_at (s, pos, total_attr_len);
 	}
 
@@ -1137,8 +1137,8 @@
   struct peer *realpeer;
   struct in_addr remote_id;
   int capability;
-  char notify_data_remote_as[2];
-  char notify_data_remote_id[4];
+  u_int8_t notify_data_remote_as[2];
+  u_int8_t notify_data_remote_id[4];
 
   realpeer = NULL;
   
@@ -1171,22 +1171,22 @@
 	  if (as)
 	    {
 	      if (BGP_DEBUG (normal, NORMAL))
-		zlog_info ("%s bad OPEN, wrong router identifier %s",
-			   peer->host, inet_ntoa (remote_id));
-	      bgp_notify_send_with_data (peer, 
-					 BGP_NOTIFY_OPEN_ERR, 
-					 BGP_NOTIFY_OPEN_BAD_BGP_IDENT,
-					 notify_data_remote_id, 4);
+          zlog_info ("%s bad OPEN, wrong router identifier %s",
+		                 peer->host, inet_ntoa (remote_id));
+          bgp_notify_send_with_data (peer, 
+                                     BGP_NOTIFY_OPEN_ERR, 
+					                           BGP_NOTIFY_OPEN_BAD_BGP_IDENT,
+					                           notify_data_remote_id, 4);
 	    }
 	  else
 	    {
 	      if (BGP_DEBUG (normal, NORMAL))
-		zlog_info ("%s bad OPEN, remote AS is %d, expected %d",
-			   peer->host, remote_as, peer->as);
-	      bgp_notify_send_with_data (peer, 
-					 BGP_NOTIFY_OPEN_ERR, 
-					 BGP_NOTIFY_OPEN_BAD_PEER_AS,
-					 notify_data_remote_as, 2);
+          zlog_info ("%s bad OPEN, remote AS is %d, expected %d",
+                     peer->host, remote_as, peer->as);
+        bgp_notify_send_with_data (peer,
+                                   BGP_NOTIFY_OPEN_ERR,
+                                   BGP_NOTIFY_OPEN_BAD_PEER_AS,
+                                   notify_data_remote_as, 2);
 	    }
 	  return -1;
 	}
@@ -1264,13 +1264,14 @@
   /* Peer BGP version check. */
   if (version != BGP_VERSION_4)
     {
+      u_int8_t maxver = BGP_VERSION_4;
       if (BGP_DEBUG (normal, NORMAL))
 	zlog_info ("%s bad protocol version, remote requested %d, local request %d",
 		   peer->host, version, BGP_VERSION_4);
       bgp_notify_send_with_data (peer, 
 				 BGP_NOTIFY_OPEN_ERR, 
 				 BGP_NOTIFY_OPEN_UNSUP_VERSION,
-				 "\x04", 1);
+				 &maxver, 1);
       return -1;
     }
 
diff --git a/bgpd/bgp_packet.h b/bgpd/bgp_packet.h
index c1efc8b..7bbcdb2 100644
--- a/bgpd/bgp_packet.h
+++ b/bgpd/bgp_packet.h
@@ -40,8 +40,9 @@
 
 void bgp_keepalive_send (struct peer *);
 void bgp_open_send (struct peer *);
-void bgp_notify_send (struct peer *, u_char, u_char);
-void bgp_notify_send_with_data (struct peer *, u_char, u_char, u_char *, size_t);
+void bgp_notify_send (struct peer *, u_int8_t, u_int8_t);
+void bgp_notify_send_with_data (struct peer *, u_int8_t, u_int8_t, 
+                                u_int8_t *, size_t);
 void bgp_route_refresh_send (struct peer *, afi_t, safi_t, u_char, u_char, int);
 void bgp_capability_send (struct peer *, afi_t, safi_t, int, int);
 void bgp_default_update_send (struct peer *, struct attr *,
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index b8af869..1dd8b57 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -875,7 +875,8 @@
 }
 
 int
-bgp_maximum_prefix_overflow (struct peer *peer, afi_t afi, safi_t safi, int always)
+bgp_maximum_prefix_overflow (struct peer *peer, afi_t afi, 
+                             safi_t safi, int always)
 {
   if (!CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_MAX_PREFIX))
     return 0;
@@ -895,18 +896,18 @@
        return 0;
 
       {
-       char ndata[7];
-
-       ndata[0] = (u_char)(afi >>  8);
-       ndata[1] = (u_char) afi;
-       ndata[3] = (u_char)(peer->pmax[afi][safi] >> 24);
-       ndata[4] = (u_char)(peer->pmax[afi][safi] >> 16);
-       ndata[5] = (u_char)(peer->pmax[afi][safi] >> 8);
-       ndata[6] = (u_char)(peer->pmax[afi][safi]);
+       u_int8_t ndata[7];
 
        if (safi == SAFI_MPLS_VPN)
          safi = BGP_SAFI_VPNV4;
-       ndata[2] = (u_char) safi;
+         
+       ndata[0] = (afi >>  8);
+       ndata[1] = afi;
+       ndata[2] = safi;
+       ndata[3] = (peer->pmax[afi][safi] >> 24);
+       ndata[4] = (peer->pmax[afi][safi] >> 16);
+       ndata[5] = (peer->pmax[afi][safi] >> 8);
+       ndata[6] = (peer->pmax[afi][safi]);
 
        SET_FLAG (peer->sflags, PEER_STATUS_PREFIX_OVERFLOW);
        bgp_notify_send_with_data (peer, BGP_NOTIFY_CEASE,
@@ -4371,7 +4372,7 @@
   int limit;
   int display;
 
-  rn = vty->output_rn;
+  rn = (struct bgp_node *) vty->output_rn;
   count = 0;
   limit = ((vty->lines == 0) 
 	   ? 10 : (vty->lines > 0 
@@ -4566,7 +4567,7 @@
 	if (count >= limit)
 	  {
 	    vty->status = VTY_CONTINUE;
-	    vty->output_rn = bgp_route_next (rn);;
+	    vty->output_rn = (struct route_node *) bgp_route_next (rn);;
 	    vty->output_func = bgp_show_callback;
 	    return 0;
 	  }
@@ -4824,7 +4825,7 @@
 	if (count >= limit  && vty->type != VTY_SHELL_SERV)
 	  {
 	    vty->status = VTY_START;
-	    vty->output_rn = bgp_route_next (rn);
+	    vty->output_rn = (struct route_node *) bgp_route_next (rn);
 	    vty->output_func = bgp_show_callback;
 	    vty->output_type = type;
 
@@ -7395,7 +7396,7 @@
           return NULL;
         }      
     }
-  else  // view_name==NULL
+  else
     {
       bgp = bgp_get_default ();
       if (! bgp)
diff --git a/bgpd/bgp_routemap.c b/bgpd/bgp_routemap.c
index ce9ceb5..261f6b8 100644
--- a/bgpd/bgp_routemap.c
+++ b/bgpd/bgp_routemap.c
@@ -1950,7 +1950,7 @@
 
 /* Hook function for updating route_map assignment. */
 void
-bgp_route_map_update ()
+bgp_route_map_update (char *unused)
 {
   int i;
   afi_t afi;
