Browse Source

*: use an ifindex_t type, defined in lib/if.h, for ifindex values

Paul Jakma 3 years ago
parent
commit
9099f9b2a6
62 changed files with 194 additions and 183 deletions
  1. 1 1
      bgpd/bgp_btoa.c
  2. 1 1
      bgpd/bgp_network.c
  3. 1 1
      bgpd/bgp_zebra.c
  4. 1 1
      bgpd/bgpd.h
  5. 5 5
      isisd/isis_route.c
  6. 2 2
      isisd/isis_route.h
  7. 4 4
      isisd/isis_zebra.c
  8. 13 13
      lib/if.c
  9. 12 10
      lib/if.h
  10. 8 9
      lib/sockopt.c
  11. 4 5
      lib/sockopt.h
  12. 1 1
      lib/sockunion.c
  13. 3 1
      lib/sockunion.h
  14. 1 1
      lib/zclient.c
  15. 2 2
      lib/zclient.h
  16. 3 2
      ospf6d/ospf6_asbr.c
  17. 3 3
      ospf6d/ospf6_asbr.h
  18. 1 1
      ospf6d/ospf6_interface.c
  19. 1 1
      ospf6d/ospf6_message.c
  20. 1 1
      ospf6d/ospf6_neighbor.h
  21. 3 3
      ospf6d/ospf6_network.c
  22. 3 3
      ospf6d/ospf6_network.h
  23. 1 1
      ospf6d/ospf6_route.h
  24. 6 6
      ospf6d/ospf6_snmp.c
  25. 6 2
      ospf6d/ospf6_spf.c
  26. 1 1
      ospf6d/ospf6_zebra.c
  27. 1 1
      ospfd/ospf_asbr.c
  28. 2 2
      ospfd/ospf_asbr.h
  29. 1 1
      ospfd/ospf_lsa.c
  30. 1 1
      ospfd/ospf_lsa.h
  31. 5 7
      ospfd/ospf_network.c
  32. 5 5
      ospfd/ospf_network.h
  33. 1 1
      ospfd/ospf_packet.c
  34. 1 1
      ospfd/ospf_route.h
  35. 15 15
      ospfd/ospf_snmp.c
  36. 2 2
      pimd/pim_iface.c
  37. 2 2
      pimd/pim_iface.h
  38. 3 2
      pimd/pim_igmp.c
  39. 2 1
      pimd/pim_igmp_join.c
  40. 2 1
      pimd/pim_igmp_join.h
  41. 2 2
      pimd/pim_pim.c
  42. 3 3
      pimd/pim_sock.c
  43. 3 3
      pimd/pim_sock.h
  44. 1 1
      pimd/pim_ssmpingd.c
  45. 4 4
      pimd/pim_zebra.c
  46. 1 1
      pimd/pim_zlookup.h
  47. 2 2
      pimd/test_igmpv3_join.c
  48. 2 2
      ripd/rip_interface.c
  49. 4 4
      ripd/ripd.c
  50. 4 4
      ripd/ripd.h
  51. 1 1
      ripngd/ripng_zebra.c
  52. 4 4
      ripngd/ripngd.c
  53. 3 3
      ripngd/ripngd.h
  54. 1 1
      zebra/kernel_socket.c
  55. 7 7
      zebra/rib.h
  56. 1 1
      zebra/rt_netlink.c
  57. 2 2
      zebra/rt_socket.c
  58. 3 3
      zebra/rtadv.c
  59. 1 1
      zebra/test_main.c
  60. 12 9
      zebra/zebra_rib.c
  61. 1 1
      zebra/zebra_routemap.c
  62. 1 1
      zebra/zserv.c

+ 1 - 1
bgpd/bgp_btoa.c

@@ -144,7 +144,7 @@ main (int argc, char **argv)
   size_t len;
   int source_as;
   int dest_as;
-  int ifindex;
+  ifindex_t ifindex;
   int family;
   struct in_addr sip;
   struct in_addr dip;

+ 1 - 1
bgpd/bgp_network.c

@@ -365,7 +365,7 @@ bgp_update_source (struct peer *peer)
 int
 bgp_connect (struct peer *peer)
 {
-  unsigned int ifindex = 0;
+  ifindex_t ifindex = 0;
 
   /* Make socket for the peer. */
   peer->fd = sockunion_socket (&peer->su);

+ 1 - 1
bgpd/bgp_zebra.c

@@ -757,7 +757,7 @@ bgp_zebra_announce (struct prefix *p, struct bgp_info *info, struct bgp *bgp, sa
   /* We have to think about a IPv6 link-local address curse. */
   if (p->family == AF_INET6)
     {
-      unsigned int ifindex;
+      ifindex_t ifindex;
       struct in6_addr *nexthop;
       struct zapi_ipv6 api;
 

+ 1 - 1
bgpd/bgpd.h

@@ -340,7 +340,7 @@ struct peer
   time_t readtime;		/* Last read time */
   time_t resettime;		/* Last reset time */
   
-  unsigned int ifindex;		/* ifindex of the BGP connection. */
+  ifindex_t ifindex;		/* ifindex of the BGP connection. */
   char *ifname;			/* bind interface name. */
   char *update_if;
   union sockunion *update_source;

+ 5 - 5
isisd/isis_route.c

@@ -50,7 +50,7 @@
 #include "isis_zebra.h"
 
 static struct isis_nexthop *
-isis_nexthop_create (struct in_addr *ip, unsigned int ifindex)
+isis_nexthop_create (struct in_addr *ip, ifindex_t ifindex)
 {
   struct listnode *node;
   struct isis_nexthop *nexthop;
@@ -91,7 +91,7 @@ isis_nexthop_delete (struct isis_nexthop *nexthop)
 
 static int
 nexthoplookup (struct list *nexthops, struct in_addr *ip,
-	       unsigned int ifindex)
+	       ifindex_t ifindex)
 {
   struct listnode *node;
   struct isis_nexthop *nh;
@@ -130,7 +130,7 @@ nexthops_print (struct list *nhs)
 
 #ifdef HAVE_IPV6
 static struct isis_nexthop6 *
-isis_nexthop6_new (struct in6_addr *ip6, unsigned int ifindex)
+isis_nexthop6_new (struct in6_addr *ip6, ifindex_t ifindex)
 {
   struct isis_nexthop6 *nexthop6;
 
@@ -144,7 +144,7 @@ isis_nexthop6_new (struct in6_addr *ip6, unsigned int ifindex)
 }
 
 static struct isis_nexthop6 *
-isis_nexthop6_create (struct in6_addr *ip6, unsigned int ifindex)
+isis_nexthop6_create (struct in6_addr *ip6, ifindex_t ifindex)
 {
   struct listnode *node;
   struct isis_nexthop6 *nexthop6;
@@ -181,7 +181,7 @@ isis_nexthop6_delete (struct isis_nexthop6 *nexthop6)
 
 static int
 nexthop6lookup (struct list *nexthops6, struct in6_addr *ip6,
-		unsigned int ifindex)
+		ifindex_t ifindex)
 {
   struct listnode *node;
   struct isis_nexthop6 *nh6;

+ 2 - 2
isisd/isis_route.h

@@ -28,7 +28,7 @@
 #ifdef HAVE_IPV6
 struct isis_nexthop6
 {
-  unsigned int ifindex;
+  ifindex_t ifindex;
   struct in6_addr ip6;
   struct in6_addr router_address6;
   unsigned int lock;
@@ -37,7 +37,7 @@ struct isis_nexthop6
 
 struct isis_nexthop
 {
-  unsigned int ifindex;
+  ifindex_t ifindex;
   struct in_addr ip;
   struct in_addr router_address;
   unsigned int lock;

+ 4 - 4
isisd/isis_zebra.c

@@ -329,7 +329,7 @@ isis_zebra_route_add_ipv6 (struct prefix *prefix,
 {
   struct zapi_ipv6 api;
   struct in6_addr **nexthop_list;
-  unsigned int *ifindex_list;
+  ifindex_t *ifindex_list;
   struct isis_nexthop6 *nexthop6;
   int i, size;
   struct listnode *node;
@@ -365,7 +365,7 @@ isis_zebra_route_add_ipv6 (struct prefix *prefix,
 
   /* allocate memory for ifindex_list */
   size = sizeof (unsigned int) * listcount (route_info->nexthops6);
-  ifindex_list = (unsigned int *) XMALLOC (MTYPE_ISIS_TMP, size);
+  ifindex_list = (ifindex_t *) XMALLOC (MTYPE_ISIS_TMP, size);
   if (!ifindex_list)
     {
       zlog_err ("isis_zebra_add_route_ipv6: out of memory!");
@@ -415,7 +415,7 @@ isis_zebra_route_del_ipv6 (struct prefix *prefix,
 {
   struct zapi_ipv6 api;
   struct in6_addr **nexthop_list;
-  unsigned int *ifindex_list;
+  ifindex_t *ifindex_list;
   struct isis_nexthop6 *nexthop6;
   int i, size;
   struct listnode *node;
@@ -445,7 +445,7 @@ isis_zebra_route_del_ipv6 (struct prefix *prefix,
 
   /* allocate memory for ifindex_list */
   size = sizeof (unsigned int) * listcount (route_info->nexthops6);
-  ifindex_list = (unsigned int *) XMALLOC (MTYPE_ISIS_TMP, size);
+  ifindex_list = (ifindex_t *) XMALLOC (MTYPE_ISIS_TMP, size);
   if (!ifindex_list)
     {
       zlog_err ("isis_zebra_route_del_ipv6: out of memory!");

+ 13 - 13
lib/if.c

@@ -189,41 +189,41 @@ if_add_hook (int type, int (*func)(struct interface *ifp))
 
 /* Interface existance check by index. */
 struct interface *
-if_lookup_by_index_vrf (unsigned int index, vrf_id_t vrf_id)
+if_lookup_by_index_vrf (ifindex_t ifindex, vrf_id_t vrf_id)
 {
   struct listnode *node;
   struct interface *ifp;
 
   for (ALL_LIST_ELEMENTS_RO (vrf_iflist (vrf_id), node, ifp))
     {
-      if (ifp->ifindex == index)
+      if (ifp->ifindex == ifindex)
 	return ifp;
     }
   return NULL;
 }
 
 struct interface *
-if_lookup_by_index (unsigned int index)
+if_lookup_by_index (ifindex_t ifindex)
 {
-  return if_lookup_by_index_vrf (index, VRF_DEFAULT);
+  return if_lookup_by_index_vrf (ifindex, VRF_DEFAULT);
 }
 
 const char *
-ifindex2ifname_vrf (unsigned int index, vrf_id_t vrf_id)
+ifindex2ifname_vrf (ifindex_t ifindex, vrf_id_t vrf_id)
 {
   struct interface *ifp;
 
-  return ((ifp = if_lookup_by_index_vrf (index, vrf_id)) != NULL) ?
+  return ((ifp = if_lookup_by_index_vrf (ifindex, vrf_id)) != NULL) ?
   	 ifp->name : "unknown";
 }
 
 const char *
-ifindex2ifname (unsigned int index)
+ifindex2ifname (ifindex_t ifindex)
 {
-  return ifindex2ifname_vrf (index, VRF_DEFAULT);
+  return ifindex2ifname_vrf (ifindex, VRF_DEFAULT);
 }
 
-unsigned int
+ifindex_t
 ifname2ifindex_vrf (const char *name, vrf_id_t vrf_id)
 {
   struct interface *ifp;
@@ -232,7 +232,7 @@ ifname2ifindex_vrf (const char *name, vrf_id_t vrf_id)
                                                    : IFINDEX_INTERNAL;
 }
 
-unsigned int
+ifindex_t
 ifname2ifindex (const char *name)
 {
   return ifname2ifindex_vrf (name, VRF_DEFAULT);
@@ -928,7 +928,7 @@ connected_add_by_prefix (struct interface *ifp, struct prefix *p,
 }
 
 #ifndef HAVE_IF_NAMETOINDEX
-unsigned int
+ifindex_t
 if_nametoindex (const char *name)
 {
   struct interface *ifp;
@@ -940,7 +940,7 @@ if_nametoindex (const char *name)
 
 #ifndef HAVE_IF_INDEXTONAME
 char *
-if_indextoname (unsigned int ifindex, char *name)
+if_indextoname (ifindex_t ifindex, char *name)
 {
   struct interface *ifp;
 
@@ -1005,7 +1005,7 @@ ifaddr_ipv4_delete (struct in_addr *ifaddr, struct interface *ifp)
 
 /* Lookup interface by interface's IP address or interface index. */
 static struct interface *
-ifaddr_ipv4_lookup (struct in_addr *addr, unsigned int ifindex)
+ifaddr_ipv4_lookup (struct in_addr *addr, ifindex_t ifindex)
 {
   struct prefix_ipv4 p;
   struct route_node *rn;

+ 12 - 10
lib/if.h

@@ -21,6 +21,7 @@ Boston, MA 02111-1307, USA.  */
 #ifndef _ZEBRA_IF_H
 #define _ZEBRA_IF_H
 
+#include "zebra.h"
 #include "linklist.h"
 
 /* Interface link-layer type, if known. Derived from:
@@ -96,6 +97,8 @@ enum zebra_link_type {
 #define INTERFACE_NAMSIZ      20
 #define INTERFACE_HWADDR_MAX  20
 
+typedef signed int ifindex_t;
+
 #ifdef HAVE_PROC_NET_DEV
 struct if_stats
 {
@@ -142,7 +145,7 @@ struct interface
 
   /* Interface index (should be IFINDEX_INTERNAL for non-kernel or
      deleted interfaces). */
-  unsigned int ifindex;
+  ifindex_t ifindex;
 #define IFINDEX_INTERNAL	0
 
   /* Zebra internal interface status */
@@ -294,15 +297,14 @@ struct connected
 /* Prototypes. */
 extern int if_cmp_func (struct interface *, struct interface *);
 extern struct interface *if_create (const char *name, int namelen);
-extern struct interface *if_lookup_by_index (unsigned int);
+extern struct interface *if_lookup_by_index (ifindex_t);
 extern struct interface *if_lookup_exact_address (struct in_addr);
 extern struct interface *if_lookup_address (struct in_addr);
 extern struct interface *if_lookup_prefix (struct prefix *prefix);
 
 extern struct interface *if_create_vrf (const char *name, int namelen,
                                 vrf_id_t vrf_id);
-extern struct interface *if_lookup_by_index_vrf (unsigned int,
-                                vrf_id_t vrf_id);
+extern struct interface *if_lookup_by_index_vrf (ifindex_t, vrf_id_t vrf_id);
 extern struct interface *if_lookup_exact_address_vrf (struct in_addr,
                                 vrf_id_t vrf_id);
 extern struct interface *if_lookup_address_vrf (struct in_addr,
@@ -359,14 +361,14 @@ extern const char *if_link_type_str (enum zebra_link_type);
 /* Please use ifindex2ifname instead of if_indextoname where possible;
    ifindex2ifname uses internal interface info, whereas if_indextoname must
    make a system call. */
-extern const char *ifindex2ifname (unsigned int);
-extern const char *ifindex2ifname_vrf (unsigned int, vrf_id_t vrf_id);
+extern const char *ifindex2ifname (ifindex_t);
+extern const char *ifindex2ifname_vrf (ifindex_t, vrf_id_t vrf_id);
 
 /* Please use ifname2ifindex instead of if_nametoindex where possible;
    ifname2ifindex uses internal interface info, whereas if_nametoindex must
    make a system call. */
-extern unsigned int ifname2ifindex(const char *ifname);
-extern unsigned int ifname2ifindex_vrf(const char *ifname, vrf_id_t vrf_id);
+extern ifindex_t ifname2ifindex(const char *ifname);
+extern ifindex_t ifname2ifindex_vrf(const char *ifname, vrf_id_t vrf_id);
 
 /* Connected address functions. */
 extern struct connected *connected_new (void);
@@ -381,10 +383,10 @@ extern struct connected  *connected_lookup_address (struct interface *,
                                              struct in_addr);
 
 #ifndef HAVE_IF_NAMETOINDEX
-extern unsigned int if_nametoindex (const char *);
+extern ifindex_t if_nametoindex (const char *);
 #endif
 #ifndef HAVE_IF_INDEXTONAME
-extern char *if_indextoname (unsigned int, char *);
+extern char *if_indextoname (ifindex_t, char *);
 #endif
 
 /* Exported variables. */

+ 8 - 9
lib/sockopt.c

@@ -220,7 +220,7 @@ int
 setsockopt_ipv4_multicast(int sock,
 			int optname, 
 			unsigned int mcast_addr,
-			unsigned int ifindex)
+			ifindex_t ifindex)
 {
 #ifdef HAVE_RFC3678
   struct group_req gr;
@@ -318,8 +318,7 @@ setsockopt_ipv4_multicast(int sock,
  * Set IP_MULTICAST_IF socket option in an OS-dependent manner.
  */
 int
-setsockopt_ipv4_multicast_if(int sock,
-			unsigned int ifindex)
+setsockopt_ipv4_multicast_if(int sock, ifindex_t ifindex)
 {
 
 #ifdef HAVE_STRUCT_IP_MREQN_IMR_IFINDEX
@@ -345,7 +344,7 @@ setsockopt_ipv4_multicast_if(int sock,
 }
   
 static int
-setsockopt_ipv4_ifindex (int sock, int val)
+setsockopt_ipv4_ifindex (int sock, ifindex_t val)
 {
   int ret;
 
@@ -381,7 +380,7 @@ setsockopt_ipv4_tos(int sock, int tos)
 
 
 int
-setsockopt_ifindex (int af, int sock, int val)
+setsockopt_ifindex (int af, int sock, ifindex_t val)
 {
   int ret = -1;
   
@@ -408,11 +407,11 @@ setsockopt_ifindex (int af, int sock, int val)
  * Returns the interface index (small integer >= 1) if it can be
  * determined, or else 0.
  */
-static int
+static ifindex_t
 getsockopt_ipv4_ifindex (struct msghdr *msgh)
 {
   /* XXX: initialize to zero?  (Always overwritten, so just cosmetic.) */
-  int ifindex = -1;
+  ifindex_t ifindex = -1;
 
 #if defined(IP_PKTINFO)
 /* Linux pktinfo based ifindex retrieval */
@@ -432,7 +431,7 @@ getsockopt_ipv4_ifindex (struct msghdr *msgh)
   struct sockaddr_dl *sdl;
 #else
   /* SUNOS_5 uses an integer with the index. */
-  int *ifindex_p;
+  ifindex_t *ifindex_p;
 #endif /* SUNOS_5 */
 
 #ifndef SUNOS_5
@@ -473,7 +472,7 @@ getsockopt_ipv4_ifindex (struct msghdr *msgh)
 }
 
 /* return ifindex, 0 if none found */
-int
+ifindex_t
 getsockopt_ifindex (int af, struct msghdr *msgh)
 {
   switch (af)

+ 4 - 5
lib/sockopt.h

@@ -83,16 +83,15 @@ extern int setsockopt_ipv6_tclass (int, int);
   (((af) == AF_INET) : SOPT_SIZE_CMSG_IFINDEX_IPV4() \
                     ? SOPT_SIZE_CMSG_PKTINFO_IPV6())
 
-extern int setsockopt_ipv4_multicast_if(int sock,
-			             unsigned int ifindex);
+extern int setsockopt_ipv4_multicast_if(int sock, ifindex_t ifindex);
 extern int setsockopt_ipv4_multicast(int sock, int optname,
                                      unsigned int mcast_addr,
-			             unsigned int ifindex);
+			             ifindex_t ifindex);
 extern int setsockopt_ipv4_tos(int sock, int tos);
 
 /* Ask for, and get, ifindex, by whatever method is supported. */
-extern int setsockopt_ifindex (int, int, int);
-extern int getsockopt_ifindex (int, struct msghdr *);
+extern int setsockopt_ifindex (int, int, ifindex_t);
+extern ifindex_t getsockopt_ifindex (int, struct msghdr *);
 
 /* swab the fields in iph between the host order and system order expected 
  * for IP_HDRINCL.

+ 1 - 1
lib/sockunion.c

@@ -291,7 +291,7 @@ sockunion_log (const union sockunion *su, char *buf, size_t len)
    1 : connect is in progress */
 enum connect_result
 sockunion_connect (int fd, const union sockunion *peersu, unsigned short port,
-		   unsigned int ifindex)
+		   ifindex_t ifindex)
 {
   int ret;
   int val;

+ 3 - 1
lib/sockunion.h

@@ -23,6 +23,8 @@
 #ifndef _ZEBRA_SOCKUNION_H
 #define _ZEBRA_SOCKUNION_H
 
+#include "if.h"
+
 #if 0
 union sockunion {
   struct sockinet {
@@ -109,7 +111,7 @@ extern int sockunion_socket (const union sockunion *su);
 extern const char *inet_sutop (const union sockunion *su, char *str);
 extern enum connect_result sockunion_connect (int fd, const union sockunion *su,
                                               unsigned short port,
-                                              unsigned int);
+                                              ifindex_t);
 extern union sockunion *sockunion_getsockname (int);
 extern union sockunion *sockunion_getpeername (int);
 extern union sockunion *sockunion_dup (const union sockunion *);

+ 1 - 1
lib/zclient.c

@@ -811,7 +811,7 @@ memconstant(const void *s, int c, size_t n)
 struct connected *
 zebra_interface_address_read (int type, struct stream *s, vrf_id_t vrf_id)
 {
-  unsigned int ifindex;
+  ifindex_t ifindex;
   struct interface *ifp;
   struct connected *ifc;
   struct prefix p, d;

+ 2 - 2
lib/zclient.h

@@ -126,7 +126,7 @@ struct zapi_ipv4
   struct in_addr **nexthop;
 
   u_char ifindex_num;
-  unsigned int *ifindex;
+  ifindex_t *ifindex;
 
   u_char distance;
 
@@ -201,7 +201,7 @@ struct zapi_ipv6
   struct in6_addr **nexthop;
 
   u_char ifindex_num;
-  unsigned int *ifindex;
+  ifindex_t *ifindex;
 
   u_char distance;
 

+ 3 - 2
ospf6d/ospf6_asbr.c

@@ -411,7 +411,7 @@ ospf6_asbr_redistribute_unset (int type)
 }
 
 void
-ospf6_asbr_redistribute_add (int type, int ifindex, struct prefix *prefix,
+ospf6_asbr_redistribute_add (int type, ifindex_t ifindex, struct prefix *prefix,
                              u_int nexthop_num, struct in6_addr *nexthop)
 {
   int ret;
@@ -557,7 +557,8 @@ ospf6_asbr_redistribute_add (int type, int ifindex, struct prefix *prefix,
 }
 
 void
-ospf6_asbr_redistribute_remove (int type, int ifindex, struct prefix *prefix)
+ospf6_asbr_redistribute_remove (int type, ifindex_t ifindex,
+                                struct prefix *prefix)
 {
   struct ospf6_route *match;
   struct ospf6_external_info *info = NULL;

+ 3 - 3
ospf6d/ospf6_asbr.h

@@ -49,7 +49,7 @@ struct ospf6_external_info
   struct in6_addr forwarding;
   /* u_int32_t tag; */
 
-  unsigned int ifindex;
+  ifindex_t ifindex;
 };
 
 /* AS-External-LSA */
@@ -79,11 +79,11 @@ extern void ospf6_asbr_lsentry_add (struct ospf6_route *asbr_entry);
 extern void ospf6_asbr_lsentry_remove (struct ospf6_route *asbr_entry);
 
 extern int ospf6_asbr_is_asbr (struct ospf6 *o);
-extern void ospf6_asbr_redistribute_add (int type, int ifindex,
+extern void ospf6_asbr_redistribute_add (int type, ifindex_t ifindex,
                                          struct prefix *prefix,
                                          u_int nexthop_num,
                                          struct in6_addr *nexthop);
-extern void ospf6_asbr_redistribute_remove (int type, int ifindex,
+extern void ospf6_asbr_redistribute_remove (int type, ifindex_t ifindex,
                                             struct prefix *prefix);
 
 extern int ospf6_redistribute_config_write (struct vty *vty);

+ 1 - 1
ospf6d/ospf6_interface.c

@@ -59,7 +59,7 @@ const char *ospf6_interface_state_str[] =
 };
 
 struct ospf6_interface *
-ospf6_interface_lookup_by_ifindex (int ifindex)
+ospf6_interface_lookup_by_ifindex (ifindex_t ifindex)
 {
   struct ospf6_interface *oi;
   struct interface *ifp;

+ 1 - 1
ospf6d/ospf6_message.c

@@ -1515,7 +1515,7 @@ ospf6_receive (struct thread *thread)
   unsigned int len;
   char srcname[64], dstname[64];
   struct in6_addr src, dst;
-  unsigned int ifindex;
+  ifindex_t ifindex;
   struct iovec iovector[2];
   struct ospf6_interface *oi;
   struct ospf6_header *oh;

+ 1 - 1
ospf6d/ospf6_neighbor.h

@@ -53,7 +53,7 @@ struct ospf6_neighbor
   u_int32_t router_id;
 
   /* Neighbor Interface ID */
-  u_int32_t ifindex;
+  ifindex_t ifindex;
 
   /* Router Priority of this neighbor */
   u_char priority;

+ 3 - 3
ospf6d/ospf6_network.c

@@ -113,7 +113,7 @@ ospf6_serv_sock (void)
 
 /* ospf6 set socket option */
 void
-ospf6_sso (u_int ifindex, struct in6_addr *group, int option)
+ospf6_sso (ifindex_t ifindex, struct in6_addr *group, int option)
 {
   struct ipv6_mreq mreq6;
   int ret;
@@ -150,7 +150,7 @@ iov_totallen (struct iovec *iov)
 
 int
 ospf6_sendmsg (struct in6_addr *src, struct in6_addr *dst,
-               unsigned int *ifindex, struct iovec *message)
+               ifindex_t *ifindex, struct iovec *message)
 {
   int retval;
   struct msghdr smsghdr;
@@ -208,7 +208,7 @@ ospf6_sendmsg (struct in6_addr *src, struct in6_addr *dst,
 
 int
 ospf6_recvmsg (struct in6_addr *src, struct in6_addr *dst,
-               unsigned int *ifindex, struct iovec *message)
+               ifindex_t *ifindex, struct iovec *message)
 {
   int retval;
   struct msghdr rmsghdr;

+ 3 - 3
ospf6d/ospf6_network.h

@@ -29,12 +29,12 @@ extern struct in6_addr allspfrouters6;
 extern struct in6_addr alldrouters6;
 
 extern int ospf6_serv_sock (void);
-extern void ospf6_sso (u_int ifindex, struct in6_addr *group, int option);
+extern void ospf6_sso (ifindex_t ifindex, struct in6_addr *group, int option);
 
 extern int ospf6_sendmsg (struct in6_addr *, struct in6_addr *,
-                          unsigned int *, struct iovec *);
+                          ifindex_t *, struct iovec *);
 extern int ospf6_recvmsg (struct in6_addr *, struct in6_addr *,
-                          unsigned int *, struct iovec *);
+                          ifindex_t *, struct iovec *);
 
 #endif /* OSPF6_NETWORK_H */
 

+ 1 - 1
ospf6d/ospf6_route.h

@@ -41,7 +41,7 @@ extern unsigned char conf_debug_ospf6_route;
 struct ospf6_nexthop
 {
   /* Interface index */
-  unsigned int ifindex;
+  ifindex_t ifindex;
 
   /* IP address, if any */
   struct in6_addr address;

+ 6 - 6
ospf6d/ospf6_snmp.c

@@ -623,7 +623,7 @@ ospfv3WwLsdbEntry (struct variable *v, oid *name, size_t *length,
                      int exact, size_t *var_len, WriteMethod **write_method)
 {
   struct ospf6_lsa *lsa = NULL;
-  u_int32_t ifindex, area_id, id, instid, adv_router;
+  ifindex_t ifindex, area_id, id, instid, adv_router;
   u_int16_t type;
   int len;
   oid *offset;
@@ -835,7 +835,8 @@ static u_char *
 ospfv3IfEntry (struct variable *v, oid *name, size_t *length,
 		int exact, size_t *var_len, WriteMethod **write_method)
 {
-  unsigned int ifindex, instid;
+  ifindex_t ifindex = 0;
+  unsigned int instid = 0;
   struct ospf6_interface *oi = NULL;
   struct ospf6_lsa *lsa = NULL;
   struct interface      *iif;
@@ -849,8 +850,6 @@ ospfv3IfEntry (struct variable *v, oid *name, size_t *length,
       == MATCH_FAILED)
     return NULL;
 
-  ifindex = instid = 0;
-
   /* Check OSPFv3 instance. */
   if (ospf6 == NULL)
     return NULL;
@@ -988,7 +987,8 @@ static u_char *
 ospfv3NbrEntry (struct variable *v, oid *name, size_t *length,
 		int exact, size_t *var_len, WriteMethod **write_method)
 {
-  unsigned int ifindex, instid, rtrid;
+  ifindex_t ifindex = 0;
+  unsigned int instid, rtrid;
   struct ospf6_interface *oi = NULL;
   struct ospf6_neighbor  *on = NULL;
   struct interface      *iif;
@@ -1001,7 +1001,7 @@ ospfv3NbrEntry (struct variable *v, oid *name, size_t *length,
       == MATCH_FAILED)
     return NULL;
 
-  ifindex = instid = rtrid = 0;
+  instid = rtrid = 0;
 
   /* Check OSPFv3 instance. */
   if (ospf6 == NULL)

+ 6 - 2
ospf6d/ospf6_spf.c

@@ -225,7 +225,8 @@ static void
 ospf6_nexthop_calc (struct ospf6_vertex *w, struct ospf6_vertex *v,
                     caddr_t lsdesc)
 {
-  int i, ifindex;
+  int i;
+  ifindex_t ifindex;
   struct ospf6_interface *oi;
   u_int16_t type;
   u_int32_t adv_router;
@@ -235,7 +236,10 @@ ospf6_nexthop_calc (struct ospf6_vertex *w, struct ospf6_vertex *v,
 
   assert (VERTEX_IS_TYPE (ROUTER, w));
   ifindex = (VERTEX_IS_TYPE (NETWORK, v) ? v->nexthop[0].ifindex :
-             ROUTER_LSDESC_GET_IFID (lsdesc));
+             /* v is the local router & the interface_id is a local ifindex */
+             (ifindex_t) ROUTER_LSDESC_GET_IFID (lsdesc));
+  assert (ifindex >= 0);
+  
   oi = ospf6_interface_lookup_by_ifindex (ifindex);
   if (oi == NULL)
     {

+ 1 - 1
ospf6d/ospf6_zebra.c

@@ -368,7 +368,7 @@ ospf6_zebra_route_update (int type, struct ospf6_route *request)
   char buf[64];
   int nhcount;
   struct in6_addr **nexthops;
-  unsigned int *ifindexes;
+  ifindex_t *ifindexes;
   int i, ret = 0;
   struct prefix_ipv6 *dest;
 

+ 1 - 1
ospfd/ospf_asbr.c

@@ -135,7 +135,7 @@ ospf_route_map_set_compare (struct route_map_set_values *values1,
 /* Add an External info for AS-external-LSA. */
 struct external_info *
 ospf_external_info_add (u_char type, struct prefix_ipv4 p,
-			unsigned int ifindex, struct in_addr nexthop)
+			ifindex_t ifindex, struct in_addr nexthop)
 {
   struct external_info *new;
   struct route_node *rn;

+ 2 - 2
ospfd/ospf_asbr.h

@@ -39,7 +39,7 @@ struct external_info
   struct prefix_ipv4 p;
 
   /* Interface index. */
-  unsigned int ifindex;
+  ifindex_t ifindex;
 
   /* Nexthop address. */
   struct in_addr nexthop;
@@ -61,7 +61,7 @@ extern int ospf_route_map_set_compare (struct route_map_set_values *,
 				struct route_map_set_values *);
 extern struct external_info *ospf_external_info_add (u_char, 
                                               struct prefix_ipv4,
-					      unsigned int, 
+					      ifindex_t, 
 					      struct in_addr);
 extern void ospf_external_info_delete (u_char, struct prefix_ipv4);
 extern struct external_info *ospf_external_info_lookup (u_char, 

+ 1 - 1
ospfd/ospf_lsa.c

@@ -2206,7 +2206,7 @@ ospf_nssa_lsa_flush (struct ospf *ospf, struct prefix_ipv4 *p)
 void
 ospf_external_lsa_flush (struct ospf *ospf,
 			 u_char type, struct prefix_ipv4 *p,
-			 unsigned int ifindex /*, struct in_addr nexthop */)
+			 ifindex_t ifindex /*, struct in_addr nexthop */)
 {
   struct ospf_lsa *lsa;
 

+ 1 - 1
ospfd/ospf_lsa.h

@@ -283,7 +283,7 @@ extern struct ospf_lsa *ospf_lsa_install (struct ospf *,
 
 extern void ospf_nssa_lsa_flush (struct ospf *ospf, struct prefix_ipv4 *p);
 extern void ospf_external_lsa_flush (struct ospf *, u_char, struct prefix_ipv4 *,
-			      unsigned int /* , struct in_addr nexthop */);
+			             ifindex_t /* , struct in_addr nexthop */);
 
 extern struct in_addr ospf_get_ip_from_ifp (struct ospf_interface *);
 

+ 5 - 7
ospfd/ospf_network.c

@@ -48,7 +48,7 @@ extern struct zebra_privs_t ospfd_privs;
 /* Join to the OSPF ALL SPF ROUTERS multicast group. */
 int
 ospf_if_add_allspfrouters (struct ospf *top, struct prefix *p,
-			   unsigned int ifindex)
+			   ifindex_t ifindex)
 {
   int ret;
   
@@ -69,7 +69,7 @@ ospf_if_add_allspfrouters (struct ospf *top, struct prefix *p,
 
 int
 ospf_if_drop_allspfrouters (struct ospf *top, struct prefix *p,
-			    unsigned int ifindex)
+			    ifindex_t ifindex)
 {
   int ret;
 
@@ -89,8 +89,7 @@ ospf_if_drop_allspfrouters (struct ospf *top, struct prefix *p,
 
 /* Join to the OSPF ALL Designated ROUTERS multicast group. */
 int
-ospf_if_add_alldrouters (struct ospf *top, struct prefix *p, unsigned int
-			 ifindex)
+ospf_if_add_alldrouters (struct ospf *top, struct prefix *p, ifindex_t ifindex)
 {
   int ret;
 
@@ -110,8 +109,7 @@ ospf_if_add_alldrouters (struct ospf *top, struct prefix *p, unsigned int
 }
 
 int
-ospf_if_drop_alldrouters (struct ospf *top, struct prefix *p, unsigned int
-			  ifindex)
+ospf_if_drop_alldrouters (struct ospf *top, struct prefix *p, ifindex_t ifindex)
 {
   int ret;
 
@@ -130,7 +128,7 @@ ospf_if_drop_alldrouters (struct ospf *top, struct prefix *p, unsigned int
 }
 
 int
-ospf_if_ipmulticast (struct ospf *top, struct prefix *p, unsigned int ifindex)
+ospf_if_ipmulticast (struct ospf *top, struct prefix *p, ifindex_t ifindex)
 {
   u_char val;
   int ret, len;

+ 5 - 5
ospfd/ospf_network.h

@@ -25,14 +25,14 @@
 
 /* Prototypes. */
 extern int ospf_if_add_allspfrouters (struct ospf *, struct prefix *,
-				      unsigned int);
+				      ifindex_t);
 extern int ospf_if_drop_allspfrouters (struct ospf *, struct prefix *,
-				       unsigned int);
+				       ifindex_t);
 extern int ospf_if_add_alldrouters (struct ospf *, struct prefix *,
-				    unsigned int);
+				    ifindex_t);
 extern int ospf_if_drop_alldrouters (struct ospf *, struct prefix *,
-				     unsigned int);
-extern int ospf_if_ipmulticast (struct ospf *, struct prefix *, unsigned int);
+				     ifindex_t);
+extern int ospf_if_ipmulticast (struct ospf *, struct prefix *, ifindex_t);
 extern int ospf_sock_init (void);
 extern void ospf_adjust_sndbuflen (struct ospf *, unsigned int);
 

+ 1 - 1
ospfd/ospf_packet.c

@@ -2125,7 +2125,7 @@ ospf_recv_packet (int fd, struct interface **ifp, struct stream *ibuf)
   int ret;
   struct ip *iph;
   u_int16_t ip_len;
-  unsigned int ifindex = 0;
+  ifindex_t ifindex = 0;
   struct iovec iov;
   /* Header and data both require alignment. */
   char buff [CMSG_SPACE(SOPT_SIZE_CMSG_IFINDEX_IPV4())];

+ 1 - 1
ospfd/ospf_route.h

@@ -39,7 +39,7 @@ struct ospf_path
 {
   struct in_addr nexthop;
   struct in_addr adv_router;
-  unsigned int ifindex;
+  ifindex_t ifindex;
 };
 
 /* Below is the structure linked to every

+ 15 - 15
ospfd/ospf_snmp.c

@@ -1413,7 +1413,7 @@ struct list *ospf_snmp_iflist;
 struct ospf_snmp_if
 {
   struct in_addr addr;
-  unsigned int ifindex;
+  ifindex_t ifindex;
   struct interface *ifp;
 };
 
@@ -1455,7 +1455,7 @@ ospf_snmp_if_update (struct interface *ifp)
   struct prefix *p;
   struct ospf_snmp_if *osif;
   struct in_addr *addr;
-  unsigned int ifindex;
+  ifindex_t ifindex;
 
   ospf_snmp_if_delete (ifp);
 
@@ -1530,7 +1530,7 @@ ospf_snmp_is_if_have_addr (struct interface *ifp)
 }
 
 static struct ospf_interface *
-ospf_snmp_if_lookup (struct in_addr *ifaddr, unsigned int *ifindex)
+ospf_snmp_if_lookup (struct in_addr *ifaddr, ifindex_t *ifindex)
 {
   struct listnode *node;
   struct ospf_snmp_if *osif;
@@ -1554,8 +1554,8 @@ ospf_snmp_if_lookup (struct in_addr *ifaddr, unsigned int *ifindex)
 }
 
 static struct ospf_interface *
-ospf_snmp_if_lookup_next (struct in_addr *ifaddr, unsigned int *ifindex,
-			  int ifaddr_next, int ifindex_next)
+ospf_snmp_if_lookup_next (struct in_addr *ifaddr, ifindex_t *ifindex,
+			  int ifaddr_next, ifindex_t ifindex_next)
 {
   struct ospf_snmp_if *osif;
   struct listnode *nn;
@@ -1638,11 +1638,11 @@ ospf_snmp_iftype (struct interface *ifp)
 
 static struct ospf_interface *
 ospfIfLookup (struct variable *v, oid *name, size_t *length,
-	      struct in_addr *ifaddr, unsigned int *ifindex, int exact)
+	      struct in_addr *ifaddr, ifindex_t *ifindex, int exact)
 {
   unsigned int len;
   int ifaddr_next = 0;
-  int ifindex_next = 0;
+  ifindex_t ifindex_next = 0;
   struct ospf_interface *oi;
   oid *offset;
 
@@ -1694,7 +1694,7 @@ static u_char *
 ospfIfEntry (struct variable *v, oid *name, size_t *length, int exact,
 	     size_t *var_len, WriteMethod **write_method)
 {
-  unsigned int ifindex;
+  ifindex_t ifindex;
   struct in_addr ifaddr;
   struct ospf_interface *oi;
   struct ospf *ospf;
@@ -1802,11 +1802,11 @@ ospfIfEntry (struct variable *v, oid *name, size_t *length, int exact,
 
 static struct ospf_interface *
 ospfIfMetricLookup (struct variable *v, oid *name, size_t *length,
-		    struct in_addr *ifaddr, unsigned int *ifindex, int exact)
+		    struct in_addr *ifaddr, ifindex_t *ifindex, int exact)
 {
   unsigned int len;
   int ifaddr_next = 0;
-  int ifindex_next = 0;
+  ifindex_t ifindex_next = 0;
   struct ospf_interface *oi;
   oid *offset;
   int metric;
@@ -1866,7 +1866,7 @@ ospfIfMetricEntry (struct variable *v, oid *name, size_t *length, int exact,
 		   size_t *var_len, WriteMethod **write_method)
 {
   /* Currently we support metric 1 only. */
-  unsigned int ifindex;
+  ifindex_t ifindex;
   struct in_addr ifaddr;
   struct ospf_interface *oi;
   struct ospf *ospf;
@@ -2133,7 +2133,7 @@ ospfVirtIfEntry (struct variable *v, oid *name, size_t *length, int exact,
 
 static struct ospf_neighbor *
 ospf_snmp_nbr_lookup (struct ospf *ospf, struct in_addr *nbr_addr,
-		      unsigned int *ifindex)
+		      ifindex_t *ifindex)
 {
   struct listnode *node, *nnode;
   struct ospf_interface *oi;
@@ -2161,7 +2161,7 @@ ospf_snmp_nbr_lookup (struct ospf *ospf, struct in_addr *nbr_addr,
 }
 
 static struct ospf_neighbor *
-ospf_snmp_nbr_lookup_next (struct in_addr *nbr_addr, unsigned int *ifindex,
+ospf_snmp_nbr_lookup_next (struct in_addr *nbr_addr, ifindex_t *ifindex,
 			   int first)
 {
   struct listnode *nn;
@@ -2208,7 +2208,7 @@ ospf_snmp_nbr_lookup_next (struct in_addr *nbr_addr, unsigned int *ifindex,
 
 static struct ospf_neighbor *
 ospfNbrLookup (struct variable *v, oid *name, size_t *length,
-	       struct in_addr *nbr_addr, unsigned int *ifindex, int exact)
+	       struct in_addr *nbr_addr, ifindex_t *ifindex, int exact)
 {
   unsigned int len;
   int first;
@@ -2303,7 +2303,7 @@ ospfNbrEntry (struct variable *v, oid *name, size_t *length, int exact,
 	      size_t *var_len, WriteMethod **write_method)
 {
   struct in_addr nbr_addr;
-  unsigned int ifindex;
+  ifindex_t ifindex;
   struct ospf_neighbor *nbr;
   struct ospf_interface *oi;
 

+ 2 - 2
pimd/pim_iface.c

@@ -759,7 +759,7 @@ struct interface *pim_if_find_by_vif_index(int vif_index)
 /*
   pim_if_add_vif() uses ifindex as vif_index
  */
-int pim_if_find_vifindex_by_ifindex(int ifindex)
+int pim_if_find_vifindex_by_ifindex(ifindex_t ifindex)
 {
   return ifindex;
 }
@@ -910,7 +910,7 @@ static struct igmp_join *igmp_join_find(struct list *join_list,
 }
 
 static int igmp_join_sock(const char *ifname,
-			  int ifindex,
+			  ifindex_t ifindex,
 			  struct in_addr group_addr,
 			  struct in_addr source_addr)
 {

+ 2 - 2
pimd/pim_iface.h

@@ -122,8 +122,8 @@ int pim_if_del_vif(struct interface *ifp);
 void pim_if_add_vif_all(void);
 void pim_if_del_vif_all(void);
 
-struct interface *pim_if_find_by_vif_index(int vif_index);
-int pim_if_find_vifindex_by_ifindex(int ifindex);
+struct interface *pim_if_find_by_vif_index(ifindex_t vif_index);
+int pim_if_find_vifindex_by_ifindex(ifindex_t ifindex);
 
 int pim_if_lan_delay_enabled(struct interface *ifp);
 uint16_t pim_if_effective_propagation_delay_msec(struct interface *ifp);

+ 3 - 2
pimd/pim_igmp.c

@@ -47,7 +47,8 @@ static void group_timer_off(struct igmp_group *group);
 static struct igmp_group *find_group_by_addr(struct igmp_sock *igmp,
 					     struct in_addr group_addr);
 
-static int igmp_sock_open(struct in_addr ifaddr, int ifindex, uint32_t pim_options)
+static int igmp_sock_open(struct in_addr ifaddr, ifindex_t ifindex, 
+                          uint32_t pim_options)
 {
   int fd;
   int join = 0;
@@ -952,7 +953,7 @@ static int pim_igmp_read(struct thread *t)
   socklen_t tolen = sizeof(to);
   uint8_t buf[PIM_IGMP_BUFSIZE_READ];
   int len;
-  int ifindex = -1;
+  ifindex_t ifindex = -1;
   int result = -1; /* defaults to bad */
 
   zassert(t);

+ 2 - 1
pimd/pim_igmp_join.c

@@ -26,6 +26,7 @@
 #include <sys/socket.h>
 #include <string.h>
 
+#include "zebra.h"
 #include "pim_igmp_join.h"
 
 #ifndef SOL_IP
@@ -42,7 +43,7 @@ struct group_source_req
 };
 #endif
 
-int pim_igmp_join_source(int fd, int ifindex,
+int pim_igmp_join_source(int fd, ifindex_t ifindex,
 			 struct in_addr group_addr,
 			 struct in_addr source_addr)
 {

+ 2 - 1
pimd/pim_igmp_join.h

@@ -24,8 +24,9 @@
 #define PIM_IGMP_JOIN_H
 
 #include <netinet/in.h>
+#include "if.h"
 
-int pim_igmp_join_source(int fd, int ifindex,
+int pim_igmp_join_source(int fd, ifindex_t ifindex,
 			 struct in_addr group_addr,
 			 struct in_addr source_addr);
 

+ 2 - 2
pimd/pim_pim.c

@@ -269,7 +269,7 @@ static int pim_sock_read(struct thread *t)
   socklen_t tolen = sizeof(to);
   uint8_t buf[PIM_PIM_BUFSIZE_READ];
   int len;
-  int ifindex = -1;
+  ifindex_t ifindex = -1;
   int result = -1; /* defaults to bad */
 
   zassert(t);
@@ -376,7 +376,7 @@ static void pim_sock_read_on(struct interface *ifp)
 		 pim_ifp->pim_sock_fd);
 }
 
-static int pim_sock_open(struct in_addr ifaddr, int ifindex)
+static int pim_sock_open(struct in_addr ifaddr, ifindex_t ifindex)
 {
   int fd;
 

+ 3 - 3
pimd/pim_sock.c

@@ -180,7 +180,7 @@ int pim_socket_mcast(int protocol, struct in_addr ifaddr, int loop)
 }
 
 int pim_socket_join(int fd, struct in_addr group,
-		    struct in_addr ifaddr, int ifindex)
+		    struct in_addr ifaddr, ifindex_t ifindex)
 {
   int ret;
 
@@ -228,7 +228,7 @@ int pim_socket_join(int fd, struct in_addr group,
   return ret;
 }
 
-int pim_socket_join_source(int fd, int ifindex,
+int pim_socket_join_source(int fd, ifindex_t ifindex,
 			   struct in_addr group_addr,
 			   struct in_addr source_addr,
 			   const char *ifname)
@@ -252,7 +252,7 @@ int pim_socket_join_source(int fd, int ifindex,
 int pim_socket_recvfromto(int fd, uint8_t *buf, size_t len,
 			  struct sockaddr_in *from, socklen_t *fromlen,
 			  struct sockaddr_in *to, socklen_t *tolen,
-			  int *ifindex)
+			  ifindex_t *ifindex)
 {
   struct msghdr msgh;
   struct cmsghdr *cmsg;

+ 3 - 3
pimd/pim_sock.h

@@ -40,15 +40,15 @@
 int pim_socket_raw(int protocol);
 int pim_socket_mcast(int protocol, struct in_addr ifaddr, int loop);
 int pim_socket_join(int fd, struct in_addr group,
-		    struct in_addr ifaddr, int ifindex);
-int pim_socket_join_source(int fd, int ifindex,
+		    struct in_addr ifaddr, ifindex_t ifindex);
+int pim_socket_join_source(int fd, ifindex_t ifindex,
 			   struct in_addr group_addr,
 			   struct in_addr source_addr,
 			   const char *ifname);
 int pim_socket_recvfromto(int fd, uint8_t *buf, size_t len,
 			  struct sockaddr_in *from, socklen_t *fromlen,
 			  struct sockaddr_in *to, socklen_t *tolen,
-			  int *ifindex);
+			  ifindex_t *ifindex);
 
 int pim_socket_mcastloop_get(int fd);
 

+ 1 - 1
pimd/pim_ssmpingd.c

@@ -250,7 +250,7 @@ static int ssmpingd_read_msg(struct ssmpingd_sock *ss)
   struct sockaddr_in to;
   socklen_t fromlen = sizeof(from);
   socklen_t tolen = sizeof(to);
-  int ifindex = -1;
+  ifindex_t ifindex = -1;
   uint8_t buf[1000];
   int len;
 

+ 4 - 4
pimd/pim_zebra.c

@@ -524,7 +524,7 @@ static int redist_read_ipv4_route(int command, struct zclient *zclient,
 {
   struct stream *s;
   struct zapi_ipv4 api;
-  unsigned long ifindex;
+  ifindex_t ifindex;
   struct in_addr nexthop;
   struct prefix_ipv4 p;
   int min_len = 4;
@@ -604,7 +604,7 @@ static int redist_read_ipv4_route(int command, struct zclient *zclient,
     if (PIM_DEBUG_ZEBRA) {
       char buf[2][INET_ADDRSTRLEN];
       zlog_debug("%s: add %s %s/%d "
-		 "nexthop %s ifindex %ld metric%s %u distance%s %u",
+		 "nexthop %s ifindex %d metric%s %u distance%s %u",
 		 __PRETTY_FUNCTION__,
 		 zebra_route_string(api.type),
 		 inet_ntop(AF_INET, &p.prefix, buf[0], sizeof(buf[0])),
@@ -621,7 +621,7 @@ static int redist_read_ipv4_route(int command, struct zclient *zclient,
     if (PIM_DEBUG_ZEBRA) {
       char buf[2][INET_ADDRSTRLEN];
       zlog_debug("%s: delete %s %s/%d "
-		 "nexthop %s ifindex %ld metric%s %u distance%s %u",
+		 "nexthop %s ifindex %d metric%s %u distance%s %u",
 		 __PRETTY_FUNCTION__,
 		 zebra_route_string(api.type),
 		 inet_ntop(AF_INET, &p.prefix, buf[0], sizeof(buf[0])),
@@ -737,7 +737,7 @@ static int fib_lookup_if_vif_index(struct in_addr addr)
   struct pim_zlookup_nexthop nexthop_tab[PIM_NEXTHOP_IFINDEX_TAB_SIZE];
   int num_ifindex;
   int vif_index;
-  int first_ifindex;
+  ifindex_t first_ifindex;
 
   num_ifindex = zclient_lookup_nexthop(qpim_zclient_lookup, nexthop_tab,
 				       PIM_NEXTHOP_IFINDEX_TAB_SIZE, addr,

+ 1 - 1
pimd/pim_zlookup.h

@@ -31,7 +31,7 @@
 
 struct pim_zlookup_nexthop {
   struct in_addr nexthop_addr;
-  int            ifindex;
+  ifindex_t      ifindex;
   uint32_t       route_metric;
   uint8_t        protocol_distance;
 };

+ 2 - 2
pimd/test_igmpv3_join.c

@@ -37,7 +37,7 @@ const char *prog_name = 0;
 static int iface_solve_index(const char *ifname)
 {
   struct if_nameindex *ini;
-  int ifindex = -1;
+  ifindex_t ifindex = -1;
   int i;
 
   if (!ifname)
@@ -77,7 +77,7 @@ int main(int argc, const char *argv[])
   const char *ifname;
   const char *group;
   const char *source;
-  int ifindex;
+  ifindex_t ifindex;
   int result;
   int fd;
 

+ 2 - 2
ripd/rip_interface.c

@@ -74,7 +74,7 @@ static int
 ipv4_multicast_join (int sock, 
 		     struct in_addr group, 
 		     struct in_addr ifa,
-		     unsigned int ifindex)
+		     ifindex_t ifindex)
 {
   int ret;
 
@@ -95,7 +95,7 @@ static int
 ipv4_multicast_leave (int sock, 
 		      struct in_addr group, 
 		      struct in_addr ifa,
-		      unsigned int ifindex)
+		      ifindex_t ifindex)
 {
   int ret;
 

+ 4 - 4
ripd/ripd.c

@@ -1577,7 +1577,7 @@ rip_send_packet (u_char * buf, int size, struct sockaddr_in *to,
 /* Add redistributed route to RIP table. */
 void
 rip_redistribute_add (int type, int sub_type, struct prefix_ipv4 *p, 
-		      unsigned int ifindex, struct in_addr *nexthop,
+		      ifindex_t ifindex, struct in_addr *nexthop,
                       unsigned int metric, unsigned char distance)
 {
   int ret;
@@ -1651,7 +1651,7 @@ rip_redistribute_add (int type, int sub_type, struct prefix_ipv4 *p,
 /* Delete redistributed route from RIP table. */
 void
 rip_redistribute_delete (int type, int sub_type, struct prefix_ipv4 *p, 
-			   unsigned int ifindex)
+			 ifindex_t ifindex)
 {
   int ret;
   struct route_node *rp;
@@ -1793,7 +1793,7 @@ setsockopt_pktinfo (int sock)
 /* Read RIP packet by recvmsg function. */
 int
 rip_recvmsg (int sock, u_char *buf, int size, struct sockaddr_in *from,
-	     int *ifindex)
+	     ifindex_t *ifindex)
 {
   int ret;
   struct msghdr msg;
@@ -1834,7 +1834,7 @@ rip_read_new (struct thread *t)
   int sock;
   char buf[RIP_PACKET_MAXSIZ];
   struct sockaddr_in from;
-  unsigned int ifindex;
+  ifindex_t ifindex;
   
   /* Fetch socket then register myself. */
   sock = THREAD_FD (t);

+ 4 - 4
ripd/ripd.h

@@ -198,7 +198,7 @@ struct rip_info
   struct in_addr from;
 
   /* Which interface does this route come from. */
-  unsigned int ifindex;
+  ifindex_t ifindex;
 
   /* Metric of this route. */
   u_int32_t metric;
@@ -224,7 +224,7 @@ struct rip_info
   u_char metric_set;
   u_int32_t metric_out;
   u_short tag_out;
-  unsigned int ifindex_out;
+  ifindex_t ifindex_out;
 
   struct route_node *rp;
 
@@ -400,9 +400,9 @@ extern int rip_request_send (struct sockaddr_in *, struct interface *, u_char,
 extern int rip_neighbor_lookup (struct sockaddr_in *);
 
 extern int rip_redistribute_check (int);
-extern void rip_redistribute_add (int, int, struct prefix_ipv4 *, unsigned int, 
+extern void rip_redistribute_add (int, int, struct prefix_ipv4 *, ifindex_t, 
 			   struct in_addr *, unsigned int, unsigned char);
-extern void rip_redistribute_delete (int, int, struct prefix_ipv4 *, unsigned int);
+extern void rip_redistribute_delete (int, int, struct prefix_ipv4 *, ifindex_t);
 extern void rip_redistribute_withdraw (int);
 extern void rip_zebra_ipv4_add (struct route_node *);
 extern void rip_zebra_ipv4_delete (struct route_node *);

+ 1 - 1
ripngd/ripng_zebra.c

@@ -42,7 +42,7 @@ static void
 ripng_zebra_ipv6_send (struct route_node *rp, u_char cmd)
 {
   static struct in6_addr **nexthops = NULL;
-  static unsigned int *ifindexes = NULL;
+  static ifindex_t *ifindexes = NULL;
   static unsigned int nexthops_len = 0;
 
   struct list *list = (struct list *)rp->info;

+ 4 - 4
ripngd/ripngd.c

@@ -229,7 +229,7 @@ ripng_send_packet (caddr_t buf, int bufsize, struct sockaddr_in6 *to,
 /* Receive UDP RIPng packet from socket. */
 static int
 ripng_recv_packet (int sock, u_char *buf, int bufsize,
-		   struct sockaddr_in6 *from, unsigned int *ifindex, 
+		   struct sockaddr_in6 *from, ifindex_t *ifindex, 
 		   int *hoplimit)
 {
   int ret;
@@ -971,7 +971,7 @@ ripng_route_process (struct rte *rte, struct sockaddr_in6 *from,
 /* Add redistributed route to RIPng table. */
 void
 ripng_redistribute_add (int type, int sub_type, struct prefix_ipv6 *p, 
-			unsigned int ifindex, struct in6_addr *nexthop)
+			ifindex_t ifindex, struct in6_addr *nexthop)
 {
   struct route_node *rp;
   struct ripng_info *rinfo = NULL, newinfo;
@@ -1041,7 +1041,7 @@ ripng_redistribute_add (int type, int sub_type, struct prefix_ipv6 *p,
 /* Delete redistributed route to RIPng table. */
 void
 ripng_redistribute_delete (int type, int sub_type, struct prefix_ipv6 *p, 
-			   unsigned int ifindex)
+			   ifindex_t ifindex)
 {
   struct route_node *rp;
   struct ripng_info *rinfo;
@@ -1359,7 +1359,7 @@ ripng_read (struct thread *thread)
   int sock;
   struct sockaddr_in6 from;
   struct ripng_packet *packet;
-  unsigned int ifindex = 0;
+  ifindex_t ifindex = 0;
   struct interface *ifp;
   int hoplimit = -1;
 

+ 3 - 3
ripngd/ripngd.h

@@ -176,7 +176,7 @@ struct ripng_info
   struct in6_addr from;
 
   /* Which interface does this route come from. */
-  unsigned int ifindex;		
+  ifindex_t ifindex;		
 
   /* Metric of this route.  */
   u_char metric;		
@@ -384,9 +384,9 @@ extern void ripng_info_free (struct ripng_info *rinfo);
 extern void ripng_event (enum ripng_event, int);
 extern int ripng_request (struct interface *ifp);
 extern void ripng_redistribute_add (int, int, struct prefix_ipv6 *,
-                                    unsigned int, struct in6_addr *);
+                                    ifindex_t, struct in6_addr *);
 extern void ripng_redistribute_delete (int, int, struct prefix_ipv6 *,
-                                       unsigned int);
+                                       ifindex_t);
 extern void ripng_redistribute_withdraw (int type);
 
 extern void ripng_distribute_update_interface (struct interface *);

+ 1 - 1
zebra/kernel_socket.c

@@ -1020,7 +1020,7 @@ rtm_read (struct rt_msghdr *rtm)
       if (rtm->rtm_type != RTM_GET && rtm->rtm_pid == pid)
         return;
       struct prefix_ipv6 p;
-      unsigned int ifindex = 0;
+      ifindex_t ifindex = 0;
 
       p.family = AF_INET6;
       p.prefix = dest.sin6.sin6_addr;

+ 7 - 7
zebra/rib.h

@@ -228,7 +228,7 @@ struct nexthop
 
   /* Interface index. */
   char *ifname;
-  unsigned int ifindex;
+  ifindex_t ifindex;
   
   enum nexthop_types_t type;
 
@@ -425,7 +425,7 @@ extern void multicast_mode_ipv4_set (enum multicast_mode mode);
 extern enum multicast_mode multicast_mode_ipv4_get (void);
 
 extern const char *nexthop_type_to_str (enum nexthop_types_t nh_type);
-extern struct nexthop *nexthop_ifindex_add (struct rib *, unsigned int);
+extern struct nexthop *nexthop_ifindex_add (struct rib *, ifindex_t);
 extern struct nexthop *nexthop_ifname_add (struct rib *, char *);
 extern struct nexthop *nexthop_blackhole_add (struct rib *);
 extern struct nexthop *nexthop_ipv4_add (struct rib *, struct in_addr *,
@@ -433,7 +433,7 @@ extern struct nexthop *nexthop_ipv4_add (struct rib *, struct in_addr *,
 extern struct nexthop *nexthop_ipv4_ifindex_add (struct rib *,
                                                  struct in_addr *,
                                                  struct in_addr *,
-                                                 unsigned int);
+                                                 ifindex_t);
 extern int nexthop_has_fib_child(struct nexthop *);
 extern void rib_lookup_and_dump (struct prefix_ipv4 *);
 extern void rib_lookup_and_pushup (struct prefix_ipv4 *);
@@ -459,13 +459,13 @@ extern struct route_table *zebra_vrf_static_table (afi_t, safi_t, vrf_id_t);
  * also implicitly withdraw equal prefix of same type. */
 extern int rib_add_ipv4 (int type, int flags, struct prefix_ipv4 *p, 
 			 struct in_addr *gate, struct in_addr *src,
-			 unsigned int ifindex, vrf_id_t vrf_id, int table_id,
+			 ifindex_t ifindex, vrf_id_t vrf_id, int table_id,
 			 u_int32_t, u_int32_t, u_char, safi_t);
 
 extern int rib_add_ipv4_multipath (struct prefix_ipv4 *, struct rib *, safi_t);
 
 extern int rib_delete_ipv4 (int type, int flags, struct prefix_ipv4 *p,
-		            struct in_addr *gate, unsigned int ifindex, 
+		            struct in_addr *gate, ifindex_t ifindex, 
 		            vrf_id_t, safi_t safi);
 
 extern struct rib *rib_match_ipv4_safi (struct in_addr addr, safi_t safi,
@@ -495,13 +495,13 @@ static_delete_ipv4_safi (safi_t safi, struct prefix *p, struct in_addr *gate,
 
 extern int
 rib_add_ipv6 (int type, int flags, struct prefix_ipv6 *p,
-	      struct in6_addr *gate, unsigned int ifindex, vrf_id_t vrf_id,
+	      struct in6_addr *gate, ifindex_t ifindex, vrf_id_t vrf_id,
 	      int table_id, u_int32_t metric, u_int32_t mtu,
 	      u_char distance, safi_t safi);
 
 extern int
 rib_delete_ipv6 (int type, int flags, struct prefix_ipv6 *p,
-		 struct in6_addr *gate, unsigned int ifindex, vrf_id_t vrf_id, safi_t safi);
+		 struct in6_addr *gate, ifindex_t ifindex, vrf_id_t vrf_id, safi_t safi);
 
 extern struct rib *rib_lookup_ipv6 (struct in6_addr *, vrf_id_t);
 

+ 1 - 1
zebra/rt_netlink.c

@@ -69,7 +69,7 @@ extern u_int32_t nl_rcvbufsize;
 /* Note: on netlink systems, there should be a 1-to-1 mapping between interface
    names and ifindex values. */
 static void
-set_ifindex(struct interface *ifp, unsigned int ifi_index)
+set_ifindex(struct interface *ifp, ifindex_t ifi_index)
 {
   struct interface *oifp;
 

+ 2 - 2
zebra/rt_socket.c

@@ -76,7 +76,7 @@ kernel_rtm_ipv4 (int cmd, struct prefix *p, struct rib *rib, int family)
   struct nexthop *nexthop, *tnexthop;
   int recursing;
   int nexthop_num = 0;
-  unsigned int ifindex = 0;
+  ifindex_t ifindex = 0;
   int gate = 0;
   int error;
   char prefix_buf[PREFIX_STRLEN];
@@ -252,7 +252,7 @@ kernel_rtm_ipv6 (int cmd, struct prefix *p, struct rib *rib, int family)
   struct nexthop *nexthop, *tnexthop;
   int recursing;
   int nexthop_num = 0;
-  unsigned int ifindex = 0;
+  ifindex_t ifindex = 0;
   int gate = 0;
   int error;
 

+ 3 - 3
zebra/rtadv.c

@@ -70,7 +70,7 @@ static int if_leave_all_router (int, struct interface *);
 
 static int
 rtadv_recv_packet (int sock, u_char *buf, int buflen,
-		   struct sockaddr_in6 *from, unsigned int *ifindex,
+		   struct sockaddr_in6 *from, ifindex_t *ifindex,
 		   int *hoplimit)
 {
   int ret;
@@ -408,7 +408,7 @@ rtadv_process_advert (void)
 }
 
 static void
-rtadv_process_packet (u_char *buf, unsigned int len, unsigned int ifindex,
+rtadv_process_packet (u_char *buf, unsigned int len, ifindex_t ifindex,
     int hoplimit, vrf_id_t vrf_id)
 {
   struct icmp6_hdr *icmph;
@@ -472,7 +472,7 @@ rtadv_read (struct thread *thread)
   int len;
   u_char buf[RTADV_MSG_SIZE];
   struct sockaddr_in6 from;
-  unsigned int ifindex = 0;
+  ifindex_t ifindex = 0;
   int hoplimit = -1;
   struct zebra_vrf *zvrf = THREAD_ARG (thread);
 

+ 1 - 1
zebra/test_main.c

@@ -105,7 +105,7 @@ usage (char *progname, int status)
   exit (status);
 }
 
-static unsigned int test_ifindex = 0;
+static ifindex_t test_ifindex = 0;
 
 /* testrib commands */
 DEFUN (test_interface_state,

+ 12 - 9
zebra/zebra_rib.c

@@ -198,7 +198,7 @@ nexthops_free (struct nexthop *nexthop)
 }
 
 struct nexthop *
-nexthop_ifindex_add (struct rib *rib, unsigned int ifindex)
+nexthop_ifindex_add (struct rib *rib, ifindex_t ifindex)
 {
   struct nexthop *nexthop;
 
@@ -243,7 +243,7 @@ nexthop_ipv4_add (struct rib *rib, struct in_addr *ipv4, struct in_addr *src)
 
 struct nexthop *
 nexthop_ipv4_ifindex_add (struct rib *rib, struct in_addr *ipv4, 
-                          struct in_addr *src, unsigned int ifindex)
+                          struct in_addr *src, ifindex_t ifindex)
 {
   struct nexthop *nexthop;
 
@@ -291,7 +291,7 @@ nexthop_ipv6_ifname_add (struct rib *rib, struct in6_addr *ipv6,
 
 static struct nexthop *
 nexthop_ipv6_ifindex_add (struct rib *rib, struct in6_addr *ipv6,
-			  unsigned int ifindex)
+			  ifindex_t ifindex)
 {
   struct nexthop *nexthop;
 
@@ -1074,8 +1074,9 @@ static int
 nexthop_active_update (struct route_node *rn, struct rib *rib, int set)
 {
   struct nexthop *nexthop;
-  unsigned int prev_active, prev_index, new_active;
-
+  unsigned int prev_active, new_active;
+  ifindex_t prev_index;
+  
   rib->nexthop_active_num = 0;
   UNSET_FLAG (rib->status, RIB_ENTRY_CHANGED);
 
@@ -1736,7 +1737,7 @@ rib_delnode (struct route_node *rn, struct rib *rib)
 int
 rib_add_ipv4 (int type, int flags, struct prefix_ipv4 *p, 
 	      struct in_addr *gate, struct in_addr *src,
-	      unsigned int ifindex, vrf_id_t vrf_id, int table_id,
+	      ifindex_t ifindex, vrf_id_t vrf_id, int table_id,
 	      u_int32_t metric, u_int32_t mtu, u_char distance, safi_t safi)
 {
   struct rib *rib;
@@ -2076,7 +2077,8 @@ rib_add_ipv4_multipath (struct prefix_ipv4 *p, struct rib *rib, safi_t safi)
 /* XXX factor with rib_delete_ipv6 */
 int
 rib_delete_ipv4 (int type, int flags, struct prefix_ipv4 *p,
-		 struct in_addr *gate, unsigned int ifindex, vrf_id_t vrf_id, safi_t safi)
+		 struct in_addr *gate, ifindex_t ifindex, 
+		 vrf_id_t vrf_id, safi_t safi)
 {
   struct route_table *table;
   struct route_node *rn;
@@ -2558,7 +2560,7 @@ static_delete_ipv4_safi (safi_t safi, struct prefix *p, struct in_addr *gate,
 
 int
 rib_add_ipv6 (int type, int flags, struct prefix_ipv6 *p,
-	      struct in6_addr *gate, unsigned int ifindex,
+	      struct in6_addr *gate, ifindex_t ifindex,
 	      vrf_id_t vrf_id, int table_id,
 	      u_int32_t metric, u_int32_t mtu, u_char distance, safi_t safi)
 {
@@ -2666,7 +2668,8 @@ rib_add_ipv6 (int type, int flags, struct prefix_ipv6 *p,
 /* XXX factor with rib_delete_ipv6 */
 int
 rib_delete_ipv6 (int type, int flags, struct prefix_ipv6 *p,
-		 struct in6_addr *gate, unsigned int ifindex, vrf_id_t vrf_id, safi_t safi)
+		 struct in6_addr *gate, ifindex_t ifindex,
+		 vrf_id_t vrf_id, safi_t safi)
 {
   struct route_table *table;
   struct route_node *rn;

+ 1 - 1
zebra/zebra_routemap.c

@@ -134,7 +134,7 @@ route_match_interface (void *rule, struct prefix *prefix,
   struct nexthop_vrfid *nh_vrf;
   struct nexthop *nexthop;
   char *ifname = rule;
-  unsigned int ifindex;
+  ifindex_t ifindex;
 
   if (type == RMAP_ZEBRA)
     {

+ 1 - 1
zebra/zserv.c

@@ -827,7 +827,7 @@ zread_ipv4_add (struct zserv *client, u_short length, vrf_id_t vrf_id)
   u_char nexthop_num;
   u_char nexthop_type;
   struct stream *s;
-  unsigned int ifindex;
+  ifindex_t ifindex;
   u_char ifname_len;
   safi_t safi;