diff --git a/bgpd/bgp_table.c b/bgpd/bgp_table.c
index 5b8c6a4..91cab60 100644
--- a/bgpd/bgp_table.c
+++ b/bgpd/bgp_table.c
@@ -201,37 +201,10 @@
     }
 }
 
-/* Macro version of check_bit (). */
-#define CHECK_BIT(X,P) ((((u_char *)(X))[(P) / 8]) >> (7 - ((P) % 8)) & 1)
-
-/* Check bit of the prefix. */
-static int
-check_bit (u_char *prefix, u_char prefixlen)
-{
-  int offset;
-  int shift;
-  u_char *p = (u_char *)prefix;
-
-  assert (prefixlen <= 128);
-
-  offset = prefixlen / 8;
-  shift = 7 - (prefixlen % 8);
-  
-  return (p[offset] >> shift & 1);
-}
-
-/* Macro version of set_link (). */
-#define SET_LINK(X,Y) (X)->link[CHECK_BIT(&(Y)->prefix,(X)->prefixlen)] = (Y);\
-                      (Y)->parent = (X)
-
 static void
 set_link (struct bgp_node *node, struct bgp_node *new)
 {
-  int bit;
-    
-  bit = check_bit (&new->p.u.prefix, node->p.prefixlen);
-
-  assert (bit == 0 || bit == 1);
+  unsigned int bit = prefix_bit (&new->p.u.prefix, node->p.prefixlen);
 
   node->link[bit] = new;
   new->parent = node;
@@ -273,7 +246,7 @@
     {
       if (node->info)
 	matched = node;
-      node = node->link[check_bit(&p->u.prefix, node->p.prefixlen)];
+      node = node->link[prefix_bit(&p->u.prefix, node->p.prefixlen)];
     }
 
   /* If matched route found, return it. */
@@ -325,7 +298,7 @@
       if (node->p.prefixlen == p->prefixlen && node->info)
 	return bgp_lock_node (node);
 
-      node = node->link[check_bit(&p->u.prefix, node->p.prefixlen)];
+      node = node->link[prefix_bit(&p->u.prefix, node->p.prefixlen)];
     }
 
   return NULL;
@@ -350,7 +323,7 @@
 	  return node;
 	}
       match = node;
-      node = node->link[check_bit(&p->u.prefix, node->p.prefixlen)];
+      node = node->link[prefix_bit(&p->u.prefix, node->p.prefixlen)];
     }
 
   if (node == NULL)
diff --git a/lib/prefix.h b/lib/prefix.h
index 9cfc155..d370720 100644
--- a/lib/prefix.h
+++ b/lib/prefix.h
@@ -127,6 +127,16 @@
 /* Prefix's family member. */
 #define PREFIX_FAMILY(p)  ((p)->family)
 
+/* Check bit of the prefix. */
+static inline unsigned int
+prefix_bit (const u_char *prefix, const u_char prefixlen)
+{
+  unsigned int offset = prefixlen / 8;
+  unsigned int shift  = 7 - (prefixlen % 8);
+
+  return (prefix[offset] >> shift) & 1;
+}
+
 /* Prototypes. */
 extern int afi2family (int);
 extern int family2afi (int);
diff --git a/lib/table.c b/lib/table.c
index 06c6453..04df3af 100644
--- a/lib/table.c
+++ b/lib/table.c
@@ -165,37 +165,10 @@
     }
 }
 
-/* Macro version of check_bit (). */
-#define CHECK_BIT(X,P) ((((u_char *)(X))[(P) / 8]) >> (7 - ((P) % 8)) & 1)
-
-/* Check bit of the prefix. */
-static int
-check_bit (const u_char *prefix, u_char prefixlen)
-{
-  unsigned int offset;
-  unsigned int shift;
-  const u_char *p = prefix;
-
-  assert (prefixlen <= 128);
-
-  offset = prefixlen / 8;
-  shift = 7 - (prefixlen % 8);
-  
-  return (p[offset] >> shift & 1);
-}
-
-/* Macro version of set_link (). */
-#define SET_LINK(X,Y) do { (X)->link[CHECK_BIT(&(Y)->p.u.prefix,(X)->p.prefixlen)] = (Y);\
-                      (Y)->parent = (X); } while (0)
-
 static void
 set_link (struct route_node *node, struct route_node *new)
 {
-  int bit;
-    
-  bit = check_bit (&new->p.u.prefix, node->p.prefixlen);
-
-  assert (bit == 0 || bit == 1);
+  unsigned int bit = prefix_bit (&new->p.u.prefix, node->p.prefixlen);
 
   node->link[bit] = new;
   new->parent = node;
@@ -236,7 +209,7 @@
     {
       if (node->info)
 	matched = node;
-      node = node->link[check_bit(&p->u.prefix, node->p.prefixlen)];
+      node = node->link[prefix_bit(&p->u.prefix, node->p.prefixlen)];
     }
 
   /* If matched route found, return it. */
@@ -290,7 +263,7 @@
       if (node->p.prefixlen == p->prefixlen && node->info)
 	return route_lock_node (node);
 
-      node = node->link[check_bit(&p->u.prefix, node->p.prefixlen)];
+      node = node->link[prefix_bit(&p->u.prefix, node->p.prefixlen)];
     }
 
   return NULL;
@@ -315,7 +288,7 @@
 	  return node;
 	}
       match = node;
-      node = node->link[check_bit(&p->u.prefix, node->p.prefixlen)];
+      node = node->link[prefix_bit(&p->u.prefix, node->p.prefixlen)];
     }
 
   if (node == NULL)
diff --git a/ospf6d/ospf6_lsdb.c b/ospf6d/ospf6_lsdb.c
index ea387e3..d2e3e04 100644
--- a/ospf6d/ospf6_lsdb.c
+++ b/ospf6d/ospf6_lsdb.c
@@ -258,9 +258,6 @@
   return (struct ospf6_lsa *) node->info;
 }
 
-/* Macro version of check_bit (). */
-#define CHECK_BIT(X,P) ((((u_char *)(X))[(P) / 8]) >> (7 - ((P) % 8)) & 1)
-
 struct ospf6_lsa *
 ospf6_lsdb_lookup_next (u_int16_t type, u_int32_t id, u_int32_t adv_router,
                         struct ospf6_lsdb *lsdb)
@@ -291,7 +288,7 @@
          prefix_match (&node->p, p))
     {
       matched = node;
-      node = node->link[CHECK_BIT(&p->u.prefix, node->p.prefixlen)];
+      node = node->link[prefix_bit(&p->u.prefix, node->p.prefixlen)];
     }
 
   if (matched)
@@ -384,7 +381,7 @@
   /* Walk down tree. */
   while (node && node->p.prefixlen <= key.prefixlen &&
 	 prefix_match (&node->p, (struct prefix *) &key))
-    node = node->link[CHECK_BIT(&key.prefix, node->p.prefixlen)];
+    node = node->link[prefix_bit(&key.prefix, node->p.prefixlen)];
 
   if (node)
     route_lock_node (node);
@@ -438,7 +435,7 @@
   node = lsdb->table->top;
   while (node && node->p.prefixlen <= key.prefixlen &&
 	 prefix_match (&node->p, (struct prefix *) &key))
-    node = node->link[CHECK_BIT(&key.prefix, node->p.prefixlen)];
+    node = node->link[prefix_bit(&key.prefix, node->p.prefixlen)];
 
   if (node)
     route_lock_node (node);
diff --git a/ospf6d/ospf6_route.c b/ospf6d/ospf6_route.c
index 9832f57..1e1f4fb 100644
--- a/ospf6d/ospf6_route.c
+++ b/ospf6d/ospf6_route.c
@@ -706,9 +706,6 @@
   return next;
 }
 
-/* Macro version of check_bit (). */
-#define CHECK_BIT(X,P) ((((u_char *)(X))[(P) / 8]) >> (7 - ((P) % 8)) & 1)
-
 struct ospf6_route *
 ospf6_route_match_head (struct prefix *prefix,
                         struct ospf6_route_table *table)
@@ -720,7 +717,7 @@
   node = table->table->top;
   while (node && node->p.prefixlen < prefix->prefixlen &&
 	 prefix_match (&node->p, prefix))
-    node = node->link[CHECK_BIT(&prefix->u.prefix, node->p.prefixlen)];
+    node = node->link[prefix_bit(&prefix->u.prefix, node->p.prefixlen)];
 
   if (node)
     route_lock_node (node);
