diff --git a/zebra/Makefile.am b/zebra/Makefile.am
index 4a76317..8e3c99b 100644
--- a/zebra/Makefile.am
+++ b/zebra/Makefile.am
@@ -12,11 +12,10 @@
 rt_method = @RT_METHOD@
 rtread_method = @RTREAD_METHOD@
 kernel_method = @KERNEL_METHOD@
-other_method = @OTHER_METHOD@
 ioctl_method = @IOCTL_METHOD@
 
 otherobj = $(ioctl_method) $(ipforward) $(if_method) \
-	$(rt_method) $(rtread_method) $(kernel_method) $(other_method)
+	$(rt_method) $(rtread_method) $(kernel_method)
 
 if HAVE_NETLINK
 othersrc = zebra_fpm_netlink.c
@@ -51,10 +50,10 @@
 zebra_DEPENDENCIES = $(otherobj)
 
 EXTRA_DIST = if_ioctl.c if_ioctl_solaris.c if_netlink.c \
-        if_sysctl.c ipforward_aix.c ipforward_ews.c ipforward_proc.c \
+        if_sysctl.c ipforward_proc.c \
 	ipforward_solaris.c ipforward_sysctl.c rt_ioctl.c rt_netlink.c \
 	rt_socket.c rtread_netlink.c rtread_sysctl.c \
-	rtread_getmsg.c kernel_socket.c kernel_netlink.c mtu_kvm.c \
+	rtread_getmsg.c kernel_socket.c kernel_netlink.c \
 	ioctl.c ioctl_solaris.c \
 	GNOME-SMI GNOME-PRODUCT-ZEBRA-MIB
 
diff --git a/zebra/interface.h b/zebra/interface.h
index 7a05348..2f3b7b9 100644
--- a/zebra/interface.h
+++ b/zebra/interface.h
@@ -236,8 +236,4 @@
 extern int ifaddr_proc_ipv6 (void);
 #endif /* HAVE_PROC_NET_IF_INET6 */
 
-#ifdef BSDI
-extern int if_kvm_get_mtu (struct interface *);
-#endif /* BSDI */
-
 #endif /* _ZEBRA_INTERFACE_H */
diff --git a/zebra/ipforward_aix.c b/zebra/ipforward_aix.c
deleted file mode 100644
index c79e7f1..0000000
--- a/zebra/ipforward_aix.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * ipforward value get function for aix.
- * Copyright (C) 1997 Kunihiro Ishiguro
- *
- * This file is part of GNU Zebra.
- *
- * GNU Zebra is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2, or (at your option) any
- * later version.
- *
- * GNU Zebra is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Zebra; see the file COPYING.  If not, write to the Free
- * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.  
- */
-
-#include <zebra.h>
-
-int
-ipforward ()
-{
-  int fd, ret;
-  int af = AF_INET;
-  char netopt[] = "ipforwarding";
-  struct optreq oq;
-
-  fd = socket(af, SOCK_DGRAM, 0);
-  if (fd < 0) {
-    /* need logging here */
-    return -1;
-  }
-
-  strcpy (oq.name, netopt);
-  oq.getnext = 0;
-
-  ret = ioctl (fd, SIOCGNETOPT, (caddr_t)&oq);
-  close(fd);
-
-  if (ret < 0) {
-    /* need logging here */
-    return -1;
-  }
-
-  ret = atoi (oq.data);
-  return ret;
-}
-
-int
-ipforward_on ()
-{
-  ;
-}
-
-int
-ipforward_off ()
-{
-  ;
-}
diff --git a/zebra/ipforward_ews.c b/zebra/ipforward_ews.c
deleted file mode 100644
index c872000..0000000
--- a/zebra/ipforward_ews.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Ipforward value get function for NEC EWS.
- * Copyright (C) 1997 Kunihiro Ishiguro
- *
- * This file is part of GNU Zebra.
- *
- * GNU Zebra is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2, or (at your option) any
- * later version.
- *
- * GNU Zebra is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Zebra; see the file COPYING.  If not, write to the Free
- * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.  
- */
-
-#include <zebra.h>
-
-int
-ipforward ()
-{
-  int fd;
-  char buf[BUFSIZ];
-  struct mioc_rksym rks;
-
-  fd = open ("/dev/kmem", O_RDWR);
-  if (fd < 0) {
-    /* need logging here */
-    return -1;
-  }
-
-  rks.mirk_symname = "ipforwarding";
-  rks.mirk_buf = buf;
-  rks.mirk_buflen = sizeof (int);
-
-  if (ioctl (fd, MIOC_READKSYM, &rks) < 0) {
-    /* need logging here */
-    return -1;
-  }
-  close (fd);
-  return *(int *)buf;
-}
-
-int
-ipforward_on ()
-{
-  ;
-}
-
-int
-ipforward_off ()
-{
-  ;
-}
diff --git a/zebra/ipforward_sysctl.c b/zebra/ipforward_sysctl.c
index 185aee3..8824418 100644
--- a/zebra/ipforward_sysctl.c
+++ b/zebra/ipforward_sysctl.c
@@ -106,7 +106,7 @@
 {
   CTL_NET,
   PF_INET6,
-#if defined(KAME) || (defined(__bsdi__) && _BSDI_VERSION >= 199802 ) || defined(NRL)
+#if defined(KAME) || defined(NRL)
   IPPROTO_IPV6,
   IPV6CTL_FORWARDING
 #else /* NOT KAME */
diff --git a/zebra/mtu_kvm.c b/zebra/mtu_kvm.c
deleted file mode 100644
index d37bb9b..0000000
--- a/zebra/mtu_kvm.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/* MTU get using kvm_read.
- * Copyright (C) 1999 Kunihiro Ishiguro
- *
- * This file is part of GNU Zebra.
- *
- * GNU Zebra is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2, or (at your option) any
- * later version.
- *
- * GNU Zebra is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Zebra; see the file COPYING.  If not, write to the Free
- * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.  
- */
-
-#include <zebra.h>
-
-#include <kvm.h>
-#include <limits.h>
-#include <fcntl.h>
-
-#include "if.h"
-
-/* get interface MTU to use kvm_read */
-void
-if_kvm_get_mtu (struct interface *ifp)
-{
-  kvm_t *kvmd;
-  struct ifnet ifnet;
-  unsigned long ifnetaddr;
-  int len;
- 
-  char ifname[IFNAMSIZ];
-  char tname[INTERFACE_NAMSIZ + 1];
-  char buf[_POSIX2_LINE_MAX];
- 
-  struct nlist nl[] = 
-  {
-    {"_ifnet"},
-    {""}
-  };
-
-  ifp->mtu6 = ifp->mtu = -1;
-  
-  kvmd = kvm_openfiles (NULL, NULL, NULL, O_RDONLY, buf);
-
-  if (kvmd == NULL) 
-    return ;
-  
-  kvm_nlist(kvmd, nl);
- 
-  ifnetaddr = nl[0].n_value;
- 
-  if (kvm_read(kvmd, ifnetaddr, (char *)&ifnetaddr, sizeof ifnetaddr) < 0) 
-    {
-      kvm_close (kvmd);
-      return ;
-    }
- 
-  while(ifnetaddr != 0) 
-    {
-      if (kvm_read (kvmd, ifnetaddr, (char *)&ifnet, sizeof ifnet) < 0) 
-	{
-	  kvm_close (kvmd);
-	  return ;
-	}
-
-      if (kvm_read (kvmd, (u_long)ifnet.if_name, ifname, IFNAMSIZ) < 0) 
-	{
-	  kvm_close (kvmd);
-	  return ;
-	}
-
-      len = snprintf (tname, INTERFACE_NAMSIZ + 1, 
-		      "%s%d", ifname, ifnet.if_unit);
-
-      if (strncmp (tname, ifp->name, len) == 0)
-	break;
-
-      ifnetaddr = (u_long)ifnet.if_next;
-    }
-
-  kvm_close (kvmd);
-
-  if (ifnetaddr == 0) 
-    {
-      return ;
-    }
-
-  ifp->mtu6 = ifp->mtu = ifnet.if_mtu;
-}
