Browse Source

Fix most compiler warnings in default GCC build.

Fix lots of warnings. Some const and type-pun breaks strict-aliasing
warnings left but much reduced.

* bgp_advertise.h: (struct bgp_advertise_fifo) is functionally identical to
  (struct fifo), so just use that.  Makes it clearer the beginning of
  (struct bgp_advertise) is compatible with with (struct fifo), which seems
  to be enough for gcc.
  Add a BGP_ADV_FIFO_HEAD macro to contain the right cast to try shut up
  type-punning breaks strict aliasing warnings.
* bgp_packet.c: Use BGP_ADV_FIFO_HEAD.
  (bgp_route_refresh_receive) fix an interesting logic error in
  (!ok || (ret != BLAH)) where ret is only well-defined if ok.
* bgp_vty.c: Peer commands should use bgp_vty_return to set their return.
* jhash.{c,h}: Can take const on * args without adding issues & fix warnings.
* libospf.h: LSA sequence numbers use the unsigned range of values, and
  constants need to be set to unsigned, or it causes warnings in ospf6d.
* md5.h: signedness of caddr_t is implementation specific, change to an
  explicit (uint_8 *), fix sign/unsigned comparison warnings.
* vty.c: (vty_log_fixed) const on level is well-intentioned, but not going
  to fly given iov_base.
* workqueue.c: ALL_LIST_ELEMENTS_RO tests for null pointer, which is always
  true for address of static variable.  Correct but pointless warning in
  this case, but use a 2nd pointer to shut it up.
* ospf6_route.h: Add a comment about the use of (struct prefix) to stuff 2
  different 32 bit IDs into in (struct ospf6_route), and the resulting
  type-pun strict-alias breakage warnings this causes.  Need to use 2
  different fields to fix that warning?

general:

* remove unused variables, other than a few cases where they serve a
  sufficiently useful documentary purpose (e.g.  for code that needs
  fixing), or they're required dummies.  In those cases, try mark them as
  unused.
* Remove dead code that can't be reached.
* Quite a few 'no ...' forms of vty commands take arguments, but do not
  check the argument matches the command being negated.  E.g., should
  'distance X <prefix>' succeed if previously 'distance Y <prefix>' was set?
  Or should it be required that the distance match the previously configured
  distance for the prefix?
  Ultimately, probably better to be strict about this.  However, changing
  from slack to strict might expose problems in command aliases and tools.
* Fix uninitialised use of variables.
* Fix sign/unsigned comparison warnings by making signedness of types consistent.
* Mark functions as static where their use is restricted to the same compilation
  unit.
* Add required headers
* Move constants defined in headers into code.
* remove dead, unused functions that have no debug purpose.
Paul Jakma 5 years ago
parent
commit
7aa9dcef80

+ 6 - 11
bgpd/bgp_advertise.h

@@ -21,13 +21,6 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 #ifndef _QUAGGA_BGP_ADVERTISE_H
 #define _QUAGGA_BGP_ADVERTISE_H
 
-/* BGP advertise FIFO.  */
-struct bgp_advertise_fifo
-{
-  struct bgp_advertise *next;
-  struct bgp_advertise *prev;
-};
-
 /* BGP advertise attribute.  */
 struct bgp_advertise_attr
 {
@@ -44,7 +37,7 @@ struct bgp_advertise_attr
 struct bgp_advertise
 {
   /* FIFO for advertisement.  */
-  struct bgp_advertise_fifo fifo;
+  struct fifo fifo;
 
   /* Link list for same attribute advertise.  */
   struct bgp_advertise *next;
@@ -97,11 +90,13 @@ struct bgp_adj_in
 /* BGP advertisement list.  */
 struct bgp_synchronize
 {
-  struct bgp_advertise_fifo update;
-  struct bgp_advertise_fifo withdraw;
-  struct bgp_advertise_fifo withdraw_low;
+  struct fifo update;
+  struct fifo withdraw;
+  struct fifo withdraw_low;
 };
 
+#define BGP_ADV_FIFO_HEAD(F) ((struct bgp_advertise *)FIFO_HEAD(F))
+
 /* BGP adjacency linked list.  */
 #define BGP_INFO_ADD(N,A,TYPE)                        \
   do {                                                \

+ 0 - 1
bgpd/bgp_attr.c

@@ -2110,7 +2110,6 @@ bgp_packet_mpattr_start (struct stream *s, afi_t afi, safi_t safi,
       case SAFI_UNICAST:
       case SAFI_MULTICAST:
 	{
-	  unsigned long sizep;
 	  struct attr_extra *attre = attr->extra;
 
 	  assert (attr->extra);

+ 3 - 3
bgpd/bgp_mplsvpn.c

@@ -84,7 +84,6 @@ bgp_nlri_parse_vpnv4 (struct peer *peer, struct attr *attr,
   struct prefix p;
   int psize;
   int prefixlen;
-  u_int32_t label;
   u_int16_t type;
   struct rd_as rd_as;
   struct rd_ip rd_ip;
@@ -117,8 +116,9 @@ bgp_nlri_parse_vpnv4 (struct peer *peer, struct attr *attr,
 	  zlog_err ("prefix length is less than 88: %d", prefixlen);
 	  return -1;
 	}
-
-      label = decode_label (pnt);
+	
+      /* XXX: Not doing anything with the label */
+      decode_label (pnt);
 
       /* Copyr label to prefix. */
       tagpnt = pnt;;

+ 21 - 14
bgpd/bgp_nexthop.c

@@ -789,9 +789,9 @@ zlookup_read (void)
   uint16_t length;
   u_char marker;
   u_char version;
-  uint16_t command;
-  int nbytes;
-  struct in_addr raddr;
+  uint16_t command __attribute__((unused));
+  int nbytes __attribute__((unused));
+  struct in_addr raddr __attribute__((unused));
   uint32_t metric;
   int i;
   u_char nexthop_num;
@@ -801,6 +801,7 @@ zlookup_read (void)
   s = zlookup->ibuf;
   stream_reset (s);
 
+  /* nbytes not being checked */
   nbytes = stream_read (s, zlookup->sock, 2);
   length = stream_getw (s);
 
@@ -814,9 +815,11 @@ zlookup_read (void)
                __func__, zlookup->sock, marker, version);
       return NULL;
     }
-    
+  
+  /* XXX: not checking command */
   command = stream_getw (s);
   
+  /* XXX: not doing anything with raddr */
   raddr.s_addr = stream_get_ipv4 (s);
   metric = stream_getl (s);
   nexthop_num = stream_getc (s);
@@ -901,8 +904,6 @@ zlookup_read_ipv6 (void)
   struct stream *s;
   uint16_t length;
   u_char version, marker;
-  uint16_t  command;
-  int nbytes;
   struct in6_addr raddr;
   uint32_t metric;
   int i;
@@ -913,10 +914,11 @@ zlookup_read_ipv6 (void)
   s = zlookup->ibuf;
   stream_reset (s);
 
-  nbytes = stream_read (s, zlookup->sock, 2);
+  /* XXX: ignoring nbytes, see also zread_lookup */
+  stream_read (s, zlookup->sock, 2);
   length = stream_getw (s);
 
-  nbytes = stream_read (s, zlookup->sock, length - 2);
+  stream_read (s, zlookup->sock, length - 2);
   marker = stream_getc (s);
   version = stream_getc (s);
   
@@ -926,9 +928,11 @@ zlookup_read_ipv6 (void)
                __func__, zlookup->sock, marker, version);
       return NULL;
     }
-    
-  command = stream_getw (s);
   
+  /* XXX: ignoring command */  
+  stream_getw (s);
+  
+  /* XXX: not actually doing anything with raddr */
   stream_get (&raddr, s, 16);
 
   metric = stream_getl (s);
@@ -1014,10 +1018,10 @@ bgp_import_check (struct prefix *p, u_int32_t *igpmetric,
 {
   struct stream *s;
   int ret;
-  u_int16_t length, command;
+  u_int16_t length, command __attribute__((unused));
   u_char version, marker;
-  int nbytes;
-  struct in_addr addr;
+  int nbytes __attribute__((unused));
+  struct in_addr addr __attribute__((unused));
   struct in_addr nexthop;
   u_int32_t metric = 0;
   u_char nexthop_num;
@@ -1063,6 +1067,7 @@ bgp_import_check (struct prefix *p, u_int32_t *igpmetric,
   stream_reset (s);
 
   /* Fetch length. */
+  /* XXX: not using nbytes */
   nbytes = stream_read (s, zlookup->sock, 2);
   length = stream_getw (s);
 
@@ -1077,9 +1082,11 @@ bgp_import_check (struct prefix *p, u_int32_t *igpmetric,
                __func__, zlookup->sock, marker, version);
       return 0;
     }
-    
+  
+  /* XXX: not using command */
   command = stream_getw (s);
   
+  /* XXX: not using addr */
   addr.s_addr = stream_get_ipv4 (s);
   metric = stream_getl (s);
   nexthop_num = stream_getc (s);

+ 12 - 15
bgpd/bgp_packet.c

@@ -158,7 +158,7 @@ bgp_update_packet (struct peer *peer, afi_t afi, safi_t safi)
   snlri = peer->scratch;
   stream_reset (snlri);
 
-  adv = FIFO_HEAD (&peer->sync[afi][safi]->update);
+  adv = BGP_ADV_FIFO_HEAD (&peer->sync[afi][safi]->update);
 
   while (adv)
     {
@@ -331,7 +331,6 @@ bgp_withdraw_packet (struct peer *peer, afi_t afi, safi_t safi)
   struct bgp_adj_out *adj;
   struct bgp_advertise *adv;
   struct bgp_node *rn;
-  unsigned long pos;
   bgp_size_t unfeasible_len;
   bgp_size_t total_attr_len;
   size_t mp_start = 0;
@@ -342,7 +341,7 @@ bgp_withdraw_packet (struct peer *peer, afi_t afi, safi_t safi)
   s = peer->work;
   stream_reset (s);
 
-  while ((adv = FIFO_HEAD (&peer->sync[afi][safi]->withdraw)) != NULL)
+  while ((adv = BGP_ADV_FIFO_HEAD (&peer->sync[afi][safi]->withdraw)) != NULL)
     {
       assert (adv->rn);
       adj = adv->adj;
@@ -595,7 +594,7 @@ bgp_write_packet (struct peer *peer)
   for (afi = AFI_IP; afi < AFI_MAX; afi++)
     for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
       {
-	adv = FIFO_HEAD (&peer->sync[afi][safi]->withdraw);
+	adv = BGP_ADV_FIFO_HEAD (&peer->sync[afi][safi]->withdraw);
 	if (adv)
 	  {
 	    s = bgp_withdraw_packet (peer, afi, safi);
@@ -607,7 +606,7 @@ bgp_write_packet (struct peer *peer)
   for (afi = AFI_IP; afi < AFI_MAX; afi++)
     for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
       {
-	adv = FIFO_HEAD (&peer->sync[afi][safi]->update);
+	adv = BGP_ADV_FIFO_HEAD (&peer->sync[afi][safi]->update);
 	if (adv)
 	  {
             if (adv->binfo && adv->binfo->uptime < peer->synctime)
@@ -663,7 +662,7 @@ bgp_write_proceed (struct peer *peer)
 
   for (afi = AFI_IP; afi < AFI_MAX; afi++)
     for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
-      if ((adv = FIFO_HEAD (&peer->sync[afi][safi]->update)) != NULL)
+      if ((adv = BGP_ADV_FIFO_HEAD (&peer->sync[afi][safi]->update)) != NULL)
 	if (adv->binfo->uptime < peer->synctime)
 	  return 1;
 
@@ -2036,7 +2035,6 @@ bgp_route_refresh_receive (struct peer *peer, bgp_size_t size)
 {
   afi_t afi;
   safi_t safi;
-  u_char reserved;
   struct stream *s;
 
   /* If peer does not have the capability, send notification. */
@@ -2064,7 +2062,8 @@ bgp_route_refresh_receive (struct peer *peer, bgp_size_t size)
   
   /* Parse packet. */
   afi = stream_getw (s);
-  reserved = stream_getc (s);
+  /* reserved byte */
+  stream_getc (s);
   safi = stream_getc (s);
 
   if (BGP_DEBUG (normal, NORMAL))
@@ -2116,8 +2115,8 @@ bgp_route_refresh_receive (struct peer *peer, bgp_size_t size)
 	  if (orf_type == ORF_TYPE_PREFIX
 	      || orf_type == ORF_TYPE_PREFIX_OLD)
 	    {
-	      u_char *p_pnt = stream_pnt (s);
-	      u_char *p_end = stream_pnt (s) + orf_len;
+	      uint8_t *p_pnt = stream_pnt (s);
+	      uint8_t *p_end = stream_pnt (s) + orf_len;
 	      struct orf_prefix orfp;
 	      u_char common = 0;
 	      u_int32_t seq;
@@ -2157,7 +2156,7 @@ bgp_route_refresh_receive (struct peer *peer, bgp_size_t size)
 		      prefix_bgp_orf_remove_all (name);
 		      break;
 		    }
-		  ok = ((p_end - p_pnt) >= sizeof(u_int32_t)) ;
+		  ok = ((size_t)(p_end - p_pnt) >= sizeof(u_int32_t)) ;
 		  if (ok)
 		    {
 		      memcpy (&seq, p_pnt, sizeof (u_int32_t));
@@ -2209,8 +2208,8 @@ bgp_route_refresh_receive (struct peer *peer, bgp_size_t size)
 		    ret = prefix_bgp_orf_set (name, afi, &orfp,
 				   (common & ORF_COMMON_PART_DENY ? 0 : 1 ),
 				   (common & ORF_COMMON_PART_REMOVE ? 0 : 1));
-
-		  if (!ok || (ret != CMD_SUCCESS))
+                  
+		  if (!ok || (ok && ret != CMD_SUCCESS))
 		    {
 		      if (BGP_DEBUG (normal, NORMAL))
 			zlog_debug ("%s Received misformatted prefixlist ORF."
@@ -2246,11 +2245,9 @@ bgp_capability_msg_parse (struct peer *peer, u_char *pnt, bgp_size_t length)
   struct capability_mp_data mpc;
   struct capability_header *hdr;
   u_char action;
-  struct bgp *bgp;
   afi_t afi;
   safi_t safi;
 
-  bgp = peer->bgp;
   end = pnt + length;
 
   while (pnt < end)

+ 8 - 15
bgpd/bgp_route.c

@@ -4525,20 +4525,11 @@ bgp_aggregate_route (struct bgp *bgp, struct prefix *p, struct bgp_info *rinew,
   struct aspath *asmerge = NULL;
   struct community *community = NULL;
   struct community *commerge = NULL;
-  struct in_addr nexthop;
-  u_int32_t med = 0;
   struct bgp_info *ri;
   struct bgp_info *new;
   int first = 1;
   unsigned long match = 0;
 
-  /* Record adding route's nexthop and med. */
-  if (rinew)
-    {
-      nexthop = rinew->attr->nexthop;
-      med = rinew->attr->med;
-    }
-
   /* ORIGIN attribute: If at least one route among routes that are
      aggregated has ORIGIN with the value INCOMPLETE, then the
      aggregated route must have the ORIGIN attribute with the value
@@ -4566,11 +4557,7 @@ bgp_aggregate_route (struct bgp *bgp, struct prefix *p, struct bgp_info *rinew,
 	      continue;
 
 	    if (! rinew && first)
-	      {
-		nexthop = ri->attr->nexthop;
-		med = ri->attr->med;
-		first = 0;
-	      }
+              first = 0;
 
 #ifdef AGGREGATE_NEXTHOP_CHECK
 	    if (! IPV4_ADDR_SAME (&ri->attr->nexthop, &nexthop)
@@ -11773,7 +11760,13 @@ bgp_distance_unset (struct vty *vty, const char *distance_str,
     }
 
   bdistance = rn->info;
-
+  
+  if (bdistance->distance != distance)
+    {
+       vty_out (vty, "Distance does not match configured%s", VTY_NEWLINE);
+       return CMD_WARNING;
+    }
+  
   if (bdistance->access_list)
     free (bdistance->access_list);
   bgp_distance_free (bdistance);

+ 5 - 9
bgpd/bgp_routemap.c

@@ -1174,7 +1174,6 @@ route_set_metric (void *rule, struct prefix *prefix,
 static void *
 route_set_metric_compile (const char *arg)
 {
-  u_int32_t metric;
   unsigned long larg;
   char *endptr = NULL;
 
@@ -1185,7 +1184,6 @@ route_set_metric_compile (const char *arg)
       larg = strtoul (arg, &endptr, 10);
       if (*endptr != '\0' || errno || larg > UINT32_MAX)
         return NULL;
-      metric = larg;
     }
   else
     {
@@ -1199,7 +1197,6 @@ route_set_metric_compile (const char *arg)
       larg = strtoul (arg+1, &endptr, 10);
       if (*endptr != '\0' || errno || larg > UINT32_MAX)
 	return NULL;
-      metric = larg;
     }
 
   return XSTRDUP (MTYPE_ROUTE_MAP_COMPILED, arg);
@@ -1802,22 +1799,21 @@ static route_map_result_t
 route_match_ipv6_next_hop (void *rule, struct prefix *prefix, 
 			   route_map_object_t type, void *object)
 {
-  struct in6_addr *addr;
+  struct in6_addr *addr = rule;
   struct bgp_info *bgp_info;
 
   if (type == RMAP_BGP)
     {
-      addr = rule;
       bgp_info = object;
       
       if (!bgp_info->attr->extra)
         return RMAP_NOMATCH;
       
-      if (IPV6_ADDR_SAME (&bgp_info->attr->extra->mp_nexthop_global, rule))
+      if (IPV6_ADDR_SAME (&bgp_info->attr->extra->mp_nexthop_global, addr))
 	return RMAP_MATCH;
 
       if (bgp_info->attr->extra->mp_nexthop_len == 32 &&
-	  IPV6_ADDR_SAME (&bgp_info->attr->extra->mp_nexthop_local, rule))
+	  IPV6_ADDR_SAME (&bgp_info->attr->extra->mp_nexthop_local, addr))
 	return RMAP_MATCH;
 
       return RMAP_NOMATCH;
@@ -3430,7 +3426,7 @@ DEFUN (set_aggregator_as,
        "IP address of aggregator\n")
 {
   int ret;
-  as_t as;
+  as_t as __attribute__((unused)); /* dummy for VTY_GET_INTEGER_RANGE */
   struct in_addr address;
   char *argstr;
 
@@ -3464,7 +3460,7 @@ DEFUN (no_set_aggregator_as,
        "AS number of aggregator\n")
 {
   int ret;
-  as_t as;
+  as_t as __attribute__((unused)); /* dummy for VTY_GET_INTEGER_RANGE */
   struct in_addr address;
   char *argstr;
 

+ 7 - 18
bgpd/bgp_vty.c

@@ -576,7 +576,7 @@ DEFUN (no_bgp_confederation_identifier,
        "AS number\n")
 {
   struct bgp *bgp;
-  as_t as;
+  as_t as __attribute__((unused)); /* Dummy for VTY_GET_INTEGER_RANGE */
 
   bgp = vty->index;
 
@@ -3205,7 +3205,6 @@ static int
 peer_weight_set_vty (struct vty *vty, const char *ip_str, 
                      const char *weight_str)
 {
-  int ret;
   struct peer *peer;
   unsigned long weight;
 
@@ -3215,9 +3214,7 @@ peer_weight_set_vty (struct vty *vty, const char *ip_str,
 
   VTY_GET_INTEGER_RANGE("weight", weight, weight_str, 0, 65535);
 
-  ret = peer_weight_set (peer, weight);
-
-  return CMD_SUCCESS;
+  return bgp_vty_return (vty, peer_weight_set (peer, weight));
 }
 
 static int
@@ -3229,9 +3226,7 @@ peer_weight_unset_vty (struct vty *vty, const char *ip_str)
   if (! peer)
     return CMD_WARNING;
 
-  peer_weight_unset (peer);
-
-  return CMD_SUCCESS;
+  return bgp_vty_return (vty, peer_weight_unset (peer));
 }
 
 DEFUN (neighbor_weight,
@@ -3371,7 +3366,6 @@ static int
 peer_timers_connect_set_vty (struct vty *vty, const char *ip_str, 
                              const char *time_str)
 {
-  int ret;
   struct peer *peer;
   u_int32_t connect;
 
@@ -3381,24 +3375,19 @@ peer_timers_connect_set_vty (struct vty *vty, const char *ip_str,
 
   VTY_GET_INTEGER_RANGE ("Connect time", connect, time_str, 0, 65535);
 
-  ret = peer_timers_connect_set (peer, connect);
-
-  return CMD_SUCCESS;
+  return bgp_vty_return (vty, peer_timers_connect_set (peer, connect));
 }
 
 static int
 peer_timers_connect_unset_vty (struct vty *vty, const char *ip_str)
 {
-  int ret;
   struct peer *peer;
 
   peer = peer_and_group_lookup_vty (vty, ip_str);
   if (! peer)
     return CMD_WARNING;
 
-  ret = peer_timers_connect_unset (peer);
-
-  return CMD_SUCCESS;
+  return bgp_vty_return (vty, peer_timers_connect_unset (peer));
 }
 
 DEFUN (neighbor_timers_connect,
@@ -3455,7 +3444,7 @@ peer_advertise_interval_vty (struct vty *vty, const char *ip_str,
   else
     ret = peer_advertise_interval_unset (peer);
 
-  return CMD_SUCCESS;
+  return bgp_vty_return (vty, ret);
 }
 
 DEFUN (neighbor_advertise_interval,
@@ -3505,7 +3494,7 @@ peer_interface_vty (struct vty *vty, const char *ip_str, const char *str)
   else
     ret = peer_interface_unset (peer);
 
-  return CMD_SUCCESS;
+  return bgp_vty_return (vty, ret);
 }
 
 DEFUN (neighbor_interface,

+ 2 - 2
lib/command.c

@@ -1411,7 +1411,7 @@ cmd_matcher_read_keywords(struct cmd_matcher *matcher,
   const char *word;
   int keyword_argc;
   const char **keyword_argv;
-  enum matcher_rv rv;
+  enum matcher_rv rv = MATCHER_NO_MATCH;
 
   keyword_mask = 0;
   while (1)
@@ -1642,7 +1642,7 @@ cmd_element_match(struct cmd_element *cmd_element,
 {
   struct cmd_matcher matcher;
   unsigned int token_index;
-  enum matcher_rv rv;
+  enum matcher_rv rv = MATCHER_NO_MATCH;
 
   cmd_matcher_init(&matcher, cmd_element, filter,
                    vline, index, match_type, match);

+ 1 - 3
lib/if.c

@@ -309,8 +309,6 @@ struct interface *
 if_lookup_prefix (struct prefix *prefix)
 {
   struct listnode *node;
-  struct prefix addr;
-  int bestlen = 0;
   struct listnode *cnode;
   struct interface *ifp;
   struct connected *c;
@@ -453,7 +451,7 @@ static void
 if_dump (const struct interface *ifp)
 {
   struct listnode *node;
-  struct connected *c;
+  struct connected *c __attribute__((unused));
 
   for (ALL_LIST_ELEMENTS_RO (ifp->connected, node, c))
     zlog_info ("Interface %s index %d metric %d mtu %d "

+ 3 - 3
lib/jhash.c

@@ -42,10 +42,10 @@
  * the input key.
  */
 u_int32_t
-jhash (void *key, u_int32_t length, u_int32_t initval)
+jhash (const void *key, u_int32_t length, u_int32_t initval)
 {
   u_int32_t a, b, c, len;
-  u_int8_t *k = key;
+  const u_int8_t *k = key;
 
   len = length;
   a = b = JHASH_GOLDEN_RATIO;
@@ -105,7 +105,7 @@ jhash (void *key, u_int32_t length, u_int32_t initval)
  * The length parameter here is the number of u_int32_ts in the key.
  */
 u_int32_t
-jhash2 (u_int32_t * k, u_int32_t length, u_int32_t initval)
+jhash2 (const u_int32_t *k, u_int32_t length, u_int32_t initval)
 {
   u_int32_t a, b, c, len;
 

+ 2 - 2
lib/jhash.h

@@ -24,12 +24,12 @@
  * of bytes.  No alignment or length assumptions are made about
  * the input key.
  */
-extern u_int32_t jhash(void *key, u_int32_t length, u_int32_t initval);
+extern u_int32_t jhash(const void *key, u_int32_t length, u_int32_t initval);
 
 /* A special optimized version that handles 1 or more of u_int32_ts.
  * The length parameter here is the number of u_int32_ts in the key.
  */
-extern u_int32_t jhash2(u_int32_t *k, u_int32_t length, u_int32_t initval);
+extern u_int32_t jhash2(const u_int32_t *k, u_int32_t length, u_int32_t initval);
 
 /* A special ultra-optimized versions that knows they are hashing exactly
  * 3, 2 or 1 word(s).

+ 2 - 2
lib/libospf.h

@@ -47,8 +47,8 @@
 #define OSPF_LSA_MAXAGE_DIFF                   900
 #define OSPF_LS_INFINITY                  0xffffff
 #define OSPF_DEFAULT_DESTINATION        0x00000000      /* 0.0.0.0 */
-#define OSPF_INITIAL_SEQUENCE_NUMBER    0x80000001
-#define OSPF_MAX_SEQUENCE_NUMBER        0x7fffffff
+#define OSPF_INITIAL_SEQUENCE_NUMBER    0x80000001U
+#define OSPF_MAX_SEQUENCE_NUMBER        0x7fffffffU
 
 /* OSPF Interface Types */
 #define OSPF_IFTYPE_NONE		0

+ 1 - 1
lib/md5.c

@@ -306,7 +306,7 @@ unsigned char*  text;			/* pointer to data stream */
 int             text_len;		/* length of data stream */
 unsigned char*  key;			/* pointer to authentication key */
 int             key_len;		/* length of authentication key */
-caddr_t         digest;		/* caller digest to be filled in */
+uint8_t *       digest;			/* caller digest to be filled in */
 
 {
     MD5_CTX context;

+ 1 - 1
lib/md5.h

@@ -84,6 +84,6 @@ do {				\
 
 /* From RFC 2104 */
 void hmac_md5(unsigned char* text, int text_len, unsigned char* key,
-              int key_len, caddr_t digest);
+              int key_len, uint8_t *digest);
 
 #endif /* ! _LIBZEBRA_MD5_H_*/

+ 0 - 3
lib/table.c

@@ -626,11 +626,8 @@ route_table_get_next_internal (const struct route_table *table,
 			       struct prefix *p)
 {
   struct route_node *node, *tmp_node;
-  u_char prefixlen;
   int cmp;
 
-  prefixlen = p->prefixlen;
-
   node = table->top;
 
   while (node)

+ 2 - 2
lib/vty.c

@@ -2458,7 +2458,7 @@ vty_log (const char *level, const char *proto_str,
 
 /* Async-signal-safe version of vty_log for fixed strings. */
 void
-vty_log_fixed (const char *buf, size_t len)
+vty_log_fixed (char *buf, size_t len)
 {
   unsigned int i;
   struct iovec iov[2];
@@ -2467,7 +2467,7 @@ vty_log_fixed (const char *buf, size_t len)
   if (!vtyvec)
     return;
   
-  iov[0].iov_base = (void *)buf;
+  iov[0].iov_base = buf;
   iov[0].iov_len = len;
   iov[1].iov_base = (void *)"\r\n";
   iov[1].iov_len = 2;

+ 1 - 1
lib/vty.h

@@ -242,6 +242,6 @@ extern void vty_hello (struct vty *);
 
 /* Send a fixed-size message to all vty terminal monitors; this should be
    an async-signal-safe function. */
-extern void vty_log_fixed (const char *buf, size_t len);
+extern void vty_log_fixed (char *buf, size_t len);
 
 #endif /* _ZEBRA_VTY_H */

+ 8 - 4
lib/workqueue.c

@@ -30,7 +30,11 @@
 #include "log.h"
 
 /* master list of work_queues */
-static struct list work_queues;
+static struct list _work_queues;
+/* pointer primarily to avoid an otherwise harmless warning on
+ * ALL_LIST_ELEMENTS_RO 
+ */
+static struct list *work_queues = &_work_queues;
 
 #define WORK_QUEUE_MIN_GRANULARITY 1
 
@@ -78,7 +82,7 @@ work_queue_new (struct thread_master *m, const char *queue_name)
   
   new->items->del = (void (*)(void *)) work_queue_item_free;  
   
-  listnode_add (&work_queues, new);
+  listnode_add (work_queues, new);
   
   new->cycles.granularity = WORK_QUEUE_MIN_GRANULARITY;
 
@@ -96,7 +100,7 @@ work_queue_free (struct work_queue *wq)
   
   /* list_delete frees items via callback */
   list_delete (wq->items);
-  listnode_delete (&work_queues, wq);
+  listnode_delete (work_queues, wq);
   
   XFREE (MTYPE_WORK_QUEUE_NAME, wq->name);
   XFREE (MTYPE_WORK_QUEUE, wq);
@@ -187,7 +191,7 @@ DEFUN(show_work_queues,
            "Name", 
            VTY_NEWLINE);
  
-  for (ALL_LIST_ELEMENTS_RO ((&work_queues), node, wq))
+  for (ALL_LIST_ELEMENTS_RO (work_queues, node, wq))
     {
       vty_out (vty,"%c %8d %5d %8ld %7d %6d %6u %s%s",
                (CHECK_FLAG (wq->flags, WQ_UNPLUGGED) ? ' ' : 'P'),

+ 2 - 0
ospf6d/ospf6_abr.h

@@ -24,6 +24,8 @@
 
 /* for struct ospf6_route */
 #include "ospf6_route.h"
+/* for struct ospf6_prefix */
+#include "ospf6_proto.h"
 
 /* Debug option */
 extern unsigned char conf_debug_ospf6_abr;

+ 0 - 2
ospf6d/ospf6_area.c

@@ -518,13 +518,11 @@ DEFUN (no_area_filter_list,
        "Filter networks sent from this area\n")
 {
   struct ospf6_area *area;
-  struct prefix_list *plist;
 
   OSPF6_CMD_AREA_GET (argv[0], area);
   argc--;
   argv++;
 
-  plist = prefix_list_lookup (AFI_IP6, argv[0]);
   if (strncmp (argv[1], "in", 2) == 0)
     {
       if (PREFIX_NAME_IN (area))

+ 1 - 6
ospf6d/ospf6_asbr.c

@@ -58,18 +58,13 @@ ospf6_as_external_lsa_originate (struct ospf6_route *route)
 {
   char buffer[OSPF6_MAX_LSASIZE];
   struct ospf6_lsa_header *lsa_header;
-  struct ospf6_lsa *old, *lsa;
+  struct ospf6_lsa *lsa;
   struct ospf6_external_info *info = route->route_option;
 
   struct ospf6_as_external_lsa *as_external_lsa;
   char buf[64];
   caddr_t p;
 
-  /* find previous LSA */
-  old = ospf6_lsdb_lookup (htons (OSPF6_LSTYPE_AS_EXTERNAL),
-                           route->path.origin.id, ospf6->router_id,
-                           ospf6->lsdb);
-
   if (IS_OSPF6_DEBUG_ASBR || IS_OSPF6_DEBUG_ORIGINATE (AS_EXTERNAL))
     {
       prefix2str (&route->prefix, buf, sizeof (buf));

+ 0 - 1
ospf6d/ospf6_interface.c

@@ -1283,7 +1283,6 @@ DEFUN (no_ipv6_ospf6_cost,
 {
   struct ospf6_interface *oi;
   struct interface *ifp;
-  unsigned long int lcost;
 
   ifp = (struct interface *) vty->index;
   assert (ifp);

+ 1 - 1
ospf6d/ospf6_lsa.c

@@ -493,7 +493,7 @@ ospf6_lsa_show_internal (struct vty *vty, struct ospf6_lsa *lsa)
   vty_out (vty, "Flag: %x %s", lsa->flag, VNL);
   vty_out (vty, "Lock: %d %s", lsa->lock, VNL);
   vty_out (vty, "ReTx Count: %d%s", lsa->retrans_count, VNL);
-  vty_out (vty, "Threads: Expire: %x, Refresh: %x %s",
+  vty_out (vty, "Threads: Expire: 0x%p, Refresh: 0x%p %s",
 	   lsa->expire, lsa->refresh, VNL);
   vty_out (vty, "%s", VNL);
   return;

+ 25 - 0
ospf6d/ospf6_neighbor.c

@@ -46,6 +46,31 @@ const char *ospf6_neighbor_state_str[] =
 { "None", "Down", "Attempt", "Init", "Twoway", "ExStart", "ExChange",
   "Loading", "Full", NULL };
 
+static const char *ospf6_neighbor_event_str[] =
+  {
+    "NoEvent",
+    "HelloReceived",
+    "2-WayReceived",
+    "NegotiationDone",
+    "ExchangeDone",
+    "LoadingDone",
+    "AdjOK?",
+    "SeqNumberMismatch",
+    "BadLSReq",
+    "1-WayReceived",
+    "InactivityTimer",
+  };
+
+static const char *
+ospf6_neighbor_event_string (int event)
+{
+  #define OSPF6_NEIGHBOR_UNKNOWN_EVENT_STRING "UnknownEvent"
+
+  if (event < OSPF6_NEIGHBOR_EVENT_MAX_EVENT)
+      return ospf6_neighbor_event_str[event];
+  return OSPF6_NEIGHBOR_UNKNOWN_EVENT_STRING;
+}
+
 int
 ospf6_neighbor_cmp (void *va, void *vb)
 {

+ 0 - 25
ospf6d/ospf6_neighbor.h

@@ -122,33 +122,8 @@ struct ospf6_neighbor
 #define OSPF6_NEIGHBOR_EVENT_INACTIVITY_TIMER    10
 #define OSPF6_NEIGHBOR_EVENT_MAX_EVENT           11
 
-static const char *ospf6_neighbor_event_str[] =
-  {
-    "NoEvent",
-    "HelloReceived",
-    "2-WayReceived",
-    "NegotiationDone",
-    "ExchangeDone",
-    "LoadingDone",
-    "AdjOK?",
-    "SeqNumberMismatch",
-    "BadLSReq",
-    "1-WayReceived",
-    "InactivityTimer",
-  };
-
-static const char *ospf6_neighbor_event_string (int event)
-{
-  #define OSPF6_NEIGHBOR_UNKNOWN_EVENT_STRING "UnknownEvent"
-
-  if (event < OSPF6_NEIGHBOR_EVENT_MAX_EVENT)
-      return ospf6_neighbor_event_str[event];
-  return OSPF6_NEIGHBOR_UNKNOWN_EVENT_STRING;
-}
-
 extern const char *ospf6_neighbor_state_str[];
 
-
 /* Function Prototypes */
 int ospf6_neighbor_cmp (void *va, void *vb);
 void ospf6_neighbor_dbex_init (struct ospf6_neighbor *on);

+ 4 - 14
ospf6d/ospf6_network.c

@@ -37,18 +37,8 @@ int  ospf6_sock;
 struct in6_addr allspfrouters6;
 struct in6_addr alldrouters6;
 
-/* setsockopt ReUseAddr to on */
-void
-ospf6_set_reuseaddr (void)
-{
-  u_int on = 0;
-  if (setsockopt (ospf6_sock, SOL_SOCKET, SO_REUSEADDR, &on,
-                  sizeof (u_int)) < 0)
-    zlog_warn ("Network: set SO_REUSEADDR failed: %s", safe_strerror (errno));
-}
-
 /* setsockopt MulticastLoop to off */
-void
+static void
 ospf6_reset_mcastloop (void)
 {
   u_int off = 0;
@@ -58,13 +48,13 @@ ospf6_reset_mcastloop (void)
                safe_strerror (errno));
 }
 
-void
+static void
 ospf6_set_pktinfo (void)
 {
   setsockopt_ipv6_pktinfo (ospf6_sock, 1);
 }
 
-void
+static void
 ospf6_set_transport_class (void)
 {
 #ifdef IPTOS_PREC_INTERNETCONTROL
@@ -72,7 +62,7 @@ ospf6_set_transport_class (void)
 #endif
 }
 
-void
+static void
 ospf6_set_checksum (void)
 {
   int offset = 12;

+ 0 - 6
ospf6d/ospf6_network.h

@@ -28,12 +28,6 @@ extern int ospf6_sock;
 extern struct in6_addr allspfrouters6;
 extern struct in6_addr alldrouters6;
 
-/* Function Prototypes */
-extern void ospf6_set_reuseaddr (void);
-extern void ospf6_reset_mcastloop (void);
-extern void ospf6_set_pktinfo (void);
-extern void ospf6_set_checksum (void);
-
 extern int ospf6_serv_sock (void);
 extern void ospf6_sso (u_int ifindex, struct in6_addr *group, int option);
 

+ 5 - 0
ospf6d/ospf6_route.h

@@ -122,6 +122,10 @@ struct ospf6_route
   /* Destination Type */
   u_char type;
 
+  /* XXX: It would likely be better to use separate struct in_addr's
+   * for the advertising router-ID and prefix IDs, instead of stuffing them
+   * into one. See also XXX below.
+   */
   /* Destination ID */
   struct prefix prefix;
 
@@ -235,6 +239,7 @@ extern const char *ospf6_path_type_substr[OSPF6_PATH_TYPE_MAX];
            sizeof (struct ospf6_nexthop) * OSPF6_MULTI_PATH_LIMIT) == 0)
 #define ospf6_route_is_best(r) (CHECK_FLAG ((r)->flag, OSPF6_ROUTE_BEST))
 
+/* XXX: This gives GCC heartburn aboutbreaking aliasing rules. */
 #define ospf6_linkstate_prefix_adv_router(x) \
   (*(u_int32_t *)(&(x)->u.prefix6.s6_addr[0]))
 #define ospf6_linkstate_prefix_id(x) \

+ 2 - 1
ospf6d/ospf6_spf.c

@@ -40,6 +40,7 @@
 #include "ospf6_intra.h"
 #include "ospf6_interface.h"
 #include "ospf6d.h"
+#include "ospf6_abr.h"
 
 unsigned char conf_debug_ospf6_spf = 0;
 
@@ -391,7 +392,7 @@ static const char *ospf6_spf_reason_str[] =
 
 void ospf6_spf_reason_string (unsigned int reason, char *buf, int size)
 {
-  int bit;
+  size_t bit;
   int len = 0;
 
   if (!buf)

+ 2 - 4
ospf6d/ospf6_top.c

@@ -180,6 +180,7 @@ ospf6_delete (struct ospf6 *o)
 }
 
 static void
+__attribute__((unused))
 ospf6_enable (struct ospf6 *o)
 {
   struct listnode *node, *nnode;
@@ -219,7 +220,7 @@ ospf6_disable (struct ospf6 *o)
     }
 }
 
-int
+static int
 ospf6_maxage_remover (struct thread *thread)
 {
   struct ospf6 *o = (struct ospf6 *) THREAD_ARG (thread);
@@ -471,14 +472,11 @@ DEFUN (no_ospf6_interface_area,
        "OSPF6 area ID in IPv4 address notation\n"
        )
 {
-  struct ospf6 *o;
   struct ospf6_interface *oi;
   struct ospf6_area *oa;
   struct interface *ifp;
   u_int32_t area_id;
 
-  o = (struct ospf6 *) vty->index;
-
   ifp = if_lookup_by_name (argv[0]);
   if (ifp == NULL)
     {

+ 4 - 4
ospfd/ospf_api.c

@@ -464,7 +464,7 @@ new_msg_register_event (u_int32_t seqnum, struct lsa_filter_type *filter)
 {
   u_char buf[OSPF_API_MAX_MSG_SIZE];
   struct msg_register_event *emsg;
-  int len;
+  size_t len;
 
   emsg = (struct msg_register_event *) buf;
   len = sizeof (struct msg_register_event) +
@@ -483,7 +483,7 @@ new_msg_sync_lsdb (u_int32_t seqnum, struct lsa_filter_type *filter)
 {
   u_char buf[OSPF_API_MAX_MSG_SIZE];
   struct msg_sync_lsdb *smsg;
-  int len;
+  size_t len;
 
   smsg = (struct msg_sync_lsdb *) buf;
   len = sizeof (struct msg_sync_lsdb) +
@@ -504,7 +504,7 @@ new_msg_originate_request (u_int32_t seqnum,
 			   struct in_addr area_id, struct lsa_header *data)
 {
   struct msg_originate_request *omsg;
-  int omsglen;
+  size_t omsglen;
   char buf[OSPF_API_MAX_MSG_SIZE];
 
   omsg = (struct msg_originate_request *) buf;
@@ -630,7 +630,7 @@ new_msg_lsa_change_notify (u_char msgtype,
 {
   u_char buf[OSPF_API_MAX_MSG_SIZE];
   struct msg_lsa_change_notify *nmsg;
-  int len;
+  size_t len;
 
   assert (data);
 

+ 0 - 1
ospfd/ospf_vty.c

@@ -4034,7 +4034,6 @@ static void
 show_ip_ospf_database_maxage (struct vty *vty, struct ospf *ospf)
 {
   struct route_node *rn;
-  struct ospf_lsa *lsa;
 
   vty_out (vty, "%s                MaxAge Link States:%s%s",
            VTY_NEWLINE, VTY_NEWLINE, VTY_NEWLINE);

+ 0 - 13
ripd/ripd.c

@@ -1737,16 +1737,6 @@ rip_request_process (struct rip_packet *packet, int size,
       ntohs (rte->family) == 0 &&
       ntohl (rte->metric) == RIP_METRIC_INFINITY)
     {	
-      struct prefix_ipv4 saddr;
-
-      /* saddr will be used for determining which routes to split-horizon.
-         Since the source address we'll pick will be on the same subnet as the
-         destination, for the purpose of split-horizoning, we'll
-         pretend that "from" is our source address.  */
-      saddr.family = AF_INET;
-      saddr.prefixlen = IPV4_MAX_BITLEN;
-      saddr.prefix = from->sin_addr;
-
       /* All route with split horizon */
       rip_output_process (ifc, from, rip_all_route, packet->version);
     }
@@ -3262,7 +3252,6 @@ rip_distance_unset (struct vty *vty, const char *distance_str,
 {
   int ret;
   struct prefix_ipv4 p;
-  u_char distance;
   struct route_node *rn;
   struct rip_distance *rdistance;
 
@@ -3273,8 +3262,6 @@ rip_distance_unset (struct vty *vty, const char *distance_str,
       return CMD_WARNING;
     }
 
-  distance = atoi (distance_str);
-
   rn = route_node_lookup (rip_distance_table, (struct prefix *)&p);
   if (! rn)
     {

+ 0 - 3
zebra/irdp_interface.c

@@ -638,7 +638,6 @@ DEFUN (no_ip_irdp_address_preference,
 {
   struct listnode *node, *nnode;
   struct in_addr ip; 
-  int pref;
   int ret;
   struct interface *ifp;
   struct zebra_if *zi;
@@ -657,8 +656,6 @@ DEFUN (no_ip_irdp_address_preference,
   if (!ret) 
     return CMD_WARNING;
 
-  pref = atoi(argv[1]);
-
   for (ALL_LIST_ELEMENTS (irdp->AdvPrefList, node, nnode, adv))
     {
       if(adv->ip.s_addr == ip.s_addr )

+ 19 - 14
zebra/router-id.c

@@ -41,8 +41,13 @@
 #include "zebra/router-id.h"
 #include "zebra/redistribute.h"
 
-static struct list rid_all_sorted_list;
-static struct list rid_lo_sorted_list;
+/* 2nd pointer type used primarily to quell a warning on 
+ * ALL_LIST_ELEMENTS_RO
+ */
+static struct list _rid_all_sorted_list;
+static struct list _rid_lo_sorted_list;
+static struct list *rid_all_sorted_list = &_rid_all_sorted_list;
+static struct list *rid_lo_sorted_list = &_rid_lo_sorted_list;
 static struct prefix rid_user_assigned;
 
 /* master zebra server structure */
@@ -86,15 +91,15 @@ router_id_get (struct prefix *p)
 
   if (rid_user_assigned.u.prefix4.s_addr)
     p->u.prefix4.s_addr = rid_user_assigned.u.prefix4.s_addr;
-  else if (!list_isempty (&rid_lo_sorted_list))
+  else if (!list_isempty (rid_lo_sorted_list))
     {
-      node = listtail (&rid_lo_sorted_list);
+      node = listtail (rid_lo_sorted_list);
       c = listgetdata (node);
       p->u.prefix4.s_addr = c->address->u.prefix4.s_addr;
     }
-  else if (!list_isempty (&rid_all_sorted_list))
+  else if (!list_isempty (rid_all_sorted_list))
     {
-      node = listtail (&rid_all_sorted_list);
+      node = listtail (rid_all_sorted_list);
       c = listgetdata (node);
       p->u.prefix4.s_addr = c->address->u.prefix4.s_addr;
     }
@@ -131,9 +136,9 @@ router_id_add_address (struct connected *ifc)
 
   if (!strncmp (ifc->ifp->name, "lo", 2)
       || !strncmp (ifc->ifp->name, "dummy", 5))
-    l = &rid_lo_sorted_list;
+    l = rid_lo_sorted_list;
   else
-    l = &rid_all_sorted_list;
+    l = rid_all_sorted_list;
   
   if (!router_id_find_node (l, ifc))
     listnode_add_sort (l, ifc);
@@ -164,9 +169,9 @@ router_id_del_address (struct connected *ifc)
 
   if (!strncmp (ifc->ifp->name, "lo", 2)
       || !strncmp (ifc->ifp->name, "dummy", 5))
-    l = &rid_lo_sorted_list;
+    l = rid_lo_sorted_list;
   else
-    l = &rid_all_sorted_list;
+    l = rid_all_sorted_list;
 
   if ((c = router_id_find_node (l, ifc)))
     listnode_delete (l, c);
@@ -240,12 +245,12 @@ router_id_init (void)
   install_element (CONFIG_NODE, &router_id_cmd);
   install_element (CONFIG_NODE, &no_router_id_cmd);
 
-  memset (&rid_all_sorted_list, 0, sizeof (rid_all_sorted_list));
-  memset (&rid_lo_sorted_list, 0, sizeof (rid_lo_sorted_list));
+  memset (rid_all_sorted_list, 0, sizeof (rid_all_sorted_list));
+  memset (rid_lo_sorted_list, 0, sizeof (rid_lo_sorted_list));
   memset (&rid_user_assigned, 0, sizeof (rid_user_assigned));
 
-  rid_all_sorted_list.cmp = router_id_cmp;
-  rid_lo_sorted_list.cmp = router_id_cmp;
+  rid_all_sorted_list->cmp = router_id_cmp;
+  rid_lo_sorted_list->cmp = router_id_cmp;
 
   rid_user_assigned.family = AF_INET;
   rid_user_assigned.prefixlen = 32;

+ 4 - 4
zebra/rt_netlink.c

@@ -1246,9 +1246,9 @@ netlink_route_read (void)
 /* Utility function  comes from iproute2. 
    Authors:	Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru> */
 int
-addattr_l (struct nlmsghdr *n, int maxlen, int type, void *data, int alen)
+addattr_l (struct nlmsghdr *n, size_t maxlen, int type, void *data, int alen)
 {
-  int len;
+  size_t len;
   struct rtattr *rta;
 
   len = RTA_LENGTH (alen);
@@ -1288,9 +1288,9 @@ rta_addattr_l (struct rtattr *rta, int maxlen, int type, void *data, int alen)
 /* Utility function comes from iproute2. 
    Authors:	Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru> */
 int
-addattr32 (struct nlmsghdr *n, int maxlen, int type, int data)
+addattr32 (struct nlmsghdr *n, size_t maxlen, int type, int data)
 {
-  int len;
+  size_t len;
   struct rtattr *rta;
 
   len = RTA_LENGTH (4);

+ 2 - 2
zebra/rt_netlink.h

@@ -27,9 +27,9 @@
 #define NL_PKT_BUF_SIZE 8192
 
 extern int
-addattr32 (struct nlmsghdr *n, int maxlen, int type, int data);
+addattr32 (struct nlmsghdr *n, size_t maxlen, int type, int data);
 extern int
-addattr_l (struct nlmsghdr *n, int maxlen, int type, void *data, int alen);
+addattr_l (struct nlmsghdr *n, size_t maxlen, int type, void *data, int alen);
 
 extern int
 rta_addattr_l (struct rtattr *rta, int maxlen, int type, void *data, int alen);