diff -ruN iptraf-2.7.0-old/src/dirs.h iptraf-2.7.0-new/src/dirs.h
--- iptraf-2.7.0-old/src/dirs.h	2001-05-03 12:44:11.000000000 +0200
+++ iptraf-2.7.0-new/src/dirs.h	2005-10-04 21:51:26.000000000 +0200
@@ -148,11 +148,10 @@
 #define PORTFILE	get_path(T_WORKDIR, "ports.dat")
 
 /*
- * The Ethernet and FDDI host description files
+ * The Ethernet host description files
  */
  
 #define ETHFILE		get_path(T_WORKDIR, "ethernet.desc")
-#define FDDIFILE	get_path(T_WORKDIR, "fddi.desc")
 
 /*
  * The rvnamed program file
diff -ruN iptraf-2.7.0-old/src/hostmon.c iptraf-2.7.0-new/src/hostmon.c
--- iptraf-2.7.0-old/src/hostmon.c	2002-04-16 04:15:25.000000000 +0200
+++ iptraf-2.7.0-new/src/hostmon.c	2005-10-04 21:52:02.000000000 +0200
@@ -30,7 +30,6 @@
 #include <netinet/in.h>
 #include <linux/if_packet.h>
 #include <linux/if_ether.h>
-#include <linux/if_fddi.h>
 #include <linux/if_tr.h>
 #include <net/if_arp.h>
 #include <stdlib.h>
@@ -294,8 +293,6 @@
 	    wprintw(table->tabwin, "Ethernet");
 	else if (entry->un.desc.linktype == LINK_PLIP)
 	    wprintw(table->tabwin, "PLIP");
-	else if (entry->un.desc.linktype == LINK_FDDI)
-	    wprintw(table->tabwin, "FDDI");
 
 	wprintw(table->tabwin, " HW addr: %s", entry->un.desc.ascaddr);
 
@@ -771,7 +768,6 @@
 
     initethtab(&table, options->actmode);
     loaddesclist(&elist, LINK_ETHERNET, WITHETCETHERS);
-    loaddesclist(&flist, LINK_FDDI, WITHETCETHERS);
     
     if (logging) {
         if (strcmp(current_logfile, "") == 0)
@@ -854,7 +850,7 @@
 	    }
 	    linktype = getlinktype(fromaddr.sll_hatype, ifname, -1, NULL);
 
-	    if ((linktype == LINK_ETHERNET) || (linktype == LINK_FDDI)
+	    if ((linktype == LINK_ETHERNET)
 		|| (linktype == LINK_PLIP) || (linktype == LINK_TR)) {
 		if (fromaddr.sll_protocol == htons(ETH_P_IP))
 		    is_ip = 1;
@@ -871,12 +867,6 @@
 		    memcpy(scratch_daddr, ((struct ethhdr *) buf)->h_dest,
 			   ETH_ALEN);
 		    list = &elist;
-		} else if (linktype == LINK_FDDI) {
-		    memcpy(scratch_saddr, ((struct fddihdr *) buf)->saddr,
-			   FDDI_K_ALEN);
-		    memcpy(scratch_daddr, ((struct fddihdr *) buf)->daddr,
-			   FDDI_K_ALEN);
-		    list = &flist;
 		} else if (linktype == LINK_TR) {
 		    memcpy(scratch_saddr, ((struct trh_hdr *) buf)->saddr,
 		           TR_ALEN);
diff -ruN iptraf-2.7.0-old/src/ifaces.c iptraf-2.7.0-new/src/ifaces.c
--- iptraf-2.7.0-old/src/ifaces.c	2002-05-08 11:43:27.000000000 +0200
+++ iptraf-2.7.0-new/src/ifaces.c	2005-10-04 21:54:00.000000000 +0200
@@ -37,9 +37,9 @@
 extern int daemonized;
 
 char ifaces[][6] =
-    { "lo", "eth", "sl", "ppp", "ippp", "plip", "fddi", "isdn", "dvb",
+    { "lo", "eth", "sl", "ppp", "ippp", "plip", "isdn", "dvb",
       "pvc", "hdlc", "ipsec", "sbni", "tr", "wvlan", "wlan", "sm2", "sm3",
-      "pent", "lec" };
+      "pent", "lec", "vlan" };
 
 char *ltrim(char *buf)
 {
diff -ruN iptraf-2.7.0-old/src/landesc.c iptraf-2.7.0-new/src/landesc.c
--- iptraf-2.7.0-old/src/landesc.c	2001-11-27 11:23:32.000000000 +0100
+++ iptraf-2.7.0-new/src/landesc.c	2005-10-04 21:57:33.000000000 +0200
@@ -82,8 +82,6 @@
 
     if (linktype == LINK_ETHERNET)
 	fd = fopen(ETHFILE, "r");
-    else if (linktype == LINK_FDDI)
-	fd = fopen(FDDIFILE, "r");
 
     if (fd == NULL) {
 	return;
@@ -204,8 +202,6 @@
 
     if (linktype == LINK_ETHERNET)
 	fd = fopen(ETHFILE, "w");
-    else if (linktype == LINK_FDDI)
-	fd = fopen(FDDIFILE, "w");
 
     if (fd < 0) {
 	etherr();
diff -ruN iptraf-2.7.0-old/src/links.h iptraf-2.7.0-new/src/links.h
--- iptraf-2.7.0-old/src/links.h	2001-12-18 03:45:16.000000000 +0100
+++ iptraf-2.7.0-new/src/links.h	2005-10-04 21:57:17.000000000 +0200
@@ -5,7 +5,6 @@
 #define LINK_LOOPBACK		5
 #define LINK_ISDN_RAWIP		6
 #define LINK_ISDN_CISCOHDLC	7
-#define LINK_FDDI		8
 #define LINK_FRAD		9
 #define LINK_DLCI		10
 #define LINK_TR			11
diff -ruN iptraf-2.7.0-old/src/log.c iptraf-2.7.0-new/src/log.c
--- iptraf-2.7.0-old/src/log.c	2002-04-22 05:59:15.000000000 +0200
+++ iptraf-2.7.0-new/src/log.c	2005-10-04 21:57:51.000000000 +0200
@@ -465,8 +465,6 @@
 			ptmp->un.desc.ascaddr);
 	    else if (ptmp->un.desc.linktype == LINK_PLIP)
 		fprintf(fd, "\nPLIP address: %s", ptmp->un.desc.ascaddr);
-	    else if (ptmp->un.desc.linktype == LINK_FDDI)
-		fprintf(fd, "\nFDDI address: %s", ptmp->un.desc.ascaddr);
 
 	    if (ptmp->un.desc.withdesc)
 		fprintf(fd, " (%s)", ptmp->un.desc.desc);
diff -ruN iptraf-2.7.0-old/src/options.c iptraf-2.7.0-new/src/options.c
--- iptraf-2.7.0-old/src/options.c	2001-12-28 10:39:15.000000000 +0100
+++ iptraf-2.7.0-new/src/options.c	2005-10-04 21:58:15.000000000 +0200
@@ -67,8 +67,6 @@
     tx_additem(menu, NULL, NULL);
     tx_additem(menu, " ^E^thernet/PLIP host descriptions...",
 	    "Manages descriptions for Ethernet and PLIP addresses");
-    tx_additem(menu, " ^F^DDI/Token Ring host descriptions...",
-	    "Manages descriptions for FDDI and FDDI addresses");
     tx_additem(menu, NULL, NULL);
     tx_additem(menu, " E^x^it configuration", "Returns to main menu");
 }
@@ -366,9 +364,6 @@
 	case 14:
 	    ethdescmgr(LINK_ETHERNET);
 	    break;
-	case 15:
-	    ethdescmgr(LINK_FDDI);
-	    break;
 	}
 
 	indicatesetting(row, options, statwin);
diff -ruN iptraf-2.7.0-old/src/othptab.c iptraf-2.7.0-new/src/othptab.c
--- iptraf-2.7.0-old/src/othptab.c	2001-12-28 03:23:59.000000000 +0100
+++ iptraf-2.7.0-new/src/othptab.c	2005-10-04 21:58:33.000000000 +0200
@@ -19,7 +19,6 @@
 #include <asm/types.h>
 #include <linux/if_ether.h>
 #include <linux/if_tr.h>
-#include <linux/if_fddi.h>
 #include <winops.h>
 #include "arphdr.h"
 #include "options.h"
@@ -139,11 +138,6 @@
 			new_entry->smacaddr);
 	    convmacaddr(((struct ethhdr *) packet)->h_dest,
 			new_entry->dmacaddr);
-	} else if (linkproto == LINK_FDDI) {
-	    convmacaddr(((struct fddihdr *) packet)->saddr,
-			new_entry->smacaddr);
-	    convmacaddr(((struct fddihdr *) packet)->daddr,
-			new_entry->dmacaddr);
         } else if (linkproto == LINK_TR) {
             convmacaddr(((struct trh_hdr *) packet)->saddr,
                         new_entry->smacaddr);
@@ -373,8 +367,7 @@
 	strcat(msgstring, scratchpad);
 
 	if ((entry->linkproto == LINK_ETHERNET) ||
-	    (entry->linkproto == LINK_PLIP) ||
-	    (entry->linkproto == LINK_FDDI)) {
+	    (entry->linkproto == LINK_PLIP)) {
 	    sprintf(scratchpad, " from %s to %s on %s",
 		    entry->smacaddr, entry->dmacaddr, entry->iface);
 
diff -ruN iptraf-2.7.0-old/src/packet.c iptraf-2.7.0-new/src/packet.c
--- iptraf-2.7.0-old/src/packet.c	2002-05-08 11:44:08.000000000 +0200
+++ iptraf-2.7.0-new/src/packet.c	2005-10-04 21:59:12.000000000 +0200
@@ -35,7 +35,6 @@
 #include <sys/ioctl.h>
 #include <linux/if_packet.h>
 #include <linux/if_ether.h>
-#include <linux/if_fddi.h>
 #include <linux/if_tr.h>
 #include <linux/isdn.h>
 #include <linux/sockios.h>
@@ -80,10 +79,10 @@
     case ARPHRD_ETHER:
 	if (strncmp(ifname, "eth", 3) == 0)
 	    result = LINK_ETHERNET;
+	else if (strncmp(ifname, "vlan", 4) == 0)
+	    result = LINK_ETHERNET;
 	else if (strncmp(ifname, "plip", 4) == 0)
 	    result = LINK_PLIP;
-	else if (strncmp(ifname, "fddi", 4) == 0)    /* For some Ethernet- */
-	    result = LINK_ETHERNET;                  /* emulated FDDI ifaces */
 	else if (strncmp(ifname, "dvb", 3) == 0)
 	    result = LINK_ETHERNET;
 	else if (strncmp(ifname, "sbni", 4) == 0)
@@ -127,9 +126,6 @@
     case ARPHRD_PPP:
 	result = LINK_PPP;
 	break;
-    case ARPHRD_FDDI:
-	result = LINK_FDDI;
-	break;
     case ARPHRD_IEEE802:
     case ARPHRD_IEEE802_TR:
         result = LINK_TR;
@@ -179,19 +175,6 @@
 	*packet = tpacket + 4;
 	*readlen -= 4;
 	break;
-    case LINK_FDDI:
-	*packet = tpacket + sizeof(struct fddihdr);
-	*readlen -= sizeof(struct fddihdr);
-
-	/*
-	 * Move IP data into an aligned buffer.  96 bytes should be sufficient
-	 * for IP and TCP headers with reasonable numbers of options and some
-	 * data.
-	 */
-
-	memmove(aligned_buf, *packet, min(SNAPSHOT_LEN, *readlen));
-	*packet = aligned_buf;
-	break;
     case LINK_TR:
         /*
          * Token Ring patch supplied by Tomas Dvorak 
diff -ruN iptraf-2.7.0-old/src/promisc.c iptraf-2.7.0-new/src/promisc.c
--- iptraf-2.7.0-old/src/promisc.c	2002-01-16 02:51:03.000000000 +0100
+++ iptraf-2.7.0-new/src/promisc.c	2005-10-04 22:05:25.000000000 +0200
@@ -81,7 +81,7 @@
 	     */
 
 	    if ((strncmp(buf, "eth", 3) == 0) ||
-		(strncmp(buf, "fddi", 4) == 0) ||
+	    (strncmp(buf, "vlan", 4) == 0) ||
   	        (strncmp(ptmp->params.ifname, "wvlan", 4) == 0) ||
 	        (strncmp(ptmp->params.ifname, "lec", 3) == 0) ||
 	        (accept_unsupported_interfaces)) {
@@ -194,7 +194,7 @@
 
     while (ptmp != NULL) {
 	if (((strncmp(ptmp->params.ifname, "eth", 3) == 0) ||
-	     (strncmp(ptmp->params.ifname, "fddi", 4) == 0) ||
+	     (strncmp(ptmp->params.ifname, "vlan", 4) == 0) ||
 	     (strncmp(ptmp->params.ifname, "wvlan", 4) == 0) ||
 	     (strncmp(ptmp->params.ifname, "lec", 3) == 0)) &&
 	     (ptmp->params.state_valid)) {
diff -ruN iptraf-2.7.0-old/src/promisc.~c iptraf-2.7.0-new/src/promisc.~c
--- iptraf-2.7.0-old/src/promisc.~c	1970-01-01 01:00:00.000000000 +0100
+++ iptraf-2.7.0-new/src/promisc.~c	2005-10-04 22:00:02.000000000 +0200
@@ -0,0 +1,238 @@
+/***
+
+promisc.c	- handles the promiscuous mode flag for the Ethernet/FDDI
+		  interfaces
+		  
+Written by Gerard Paul Java
+Copyright (c) Gerard Paul Java 1997, 1998
+
+This module contains functions that manage the promiscuous states of
+the interfaces.
+
+This software is open source; 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 of the License, or
+(at your option) any later version.
+
+This program is distributed WITHOUT ANY WARRANTY; without even the
+implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+See the GNU General Public License in the included COPYING file for
+details.
+
+***/
+
+#include <curses.h>
+#include <panel.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <netinet/in.h>
+#include <net/if.h>
+#include <linux/if_ether.h>
+#include "ifstats.h"
+#include "ifaces.h"
+#include "error.h"
+#include "promisc.h"
+#include "dirs.h"
+
+#define PROMISC_MSG_MAX 80
+
+extern int daemonized;
+extern int accept_unsupported_interfaces;
+
+void init_promisc_list(struct promisc_states **list)
+{
+    FILE *fd;
+    int ifd;
+    char buf[8];
+    struct promisc_states *ptmp;
+    struct promisc_states *tail = NULL;
+    struct ifreq ifr;
+    int istat;
+    char err_msg[80];
+
+    ifd = socket(PF_INET, SOCK_DGRAM, 0);
+
+    *list = NULL;
+    fd = open_procnetdev();
+
+    do {
+	get_next_iface(fd, buf);
+
+	if (strcmp(buf, "") != 0) {
+	    ptmp = malloc(sizeof(struct promisc_states));
+	    strcpy(ptmp->params.ifname, buf);
+
+	    if (*list == NULL) {
+		*list = ptmp;
+	    } else
+		tail->next_entry = ptmp;
+
+	    tail = ptmp;
+	    ptmp->next_entry = NULL;
+
+	    /*
+	     * Retrieve and save interface flags
+	     */
+
+	    if ((strncmp(buf, "eth", 3) == 0) ||
+	    (strncmp(buf, "vlan", 4) == 0) ||
+		(strncmp(buf, "fddi", 4) == 0) ||
+  	        (strncmp(ptmp->params.ifname, "wvlan", 4) == 0) ||
+	        (strncmp(ptmp->params.ifname, "lec", 3) == 0) ||
+	        (accept_unsupported_interfaces)) {
+		strcpy(ifr.ifr_name, buf);
+
+		istat = ioctl(ifd, SIOCGIFFLAGS, &ifr);
+
+		if (istat < 0) {
+		    sprintf(err_msg,
+			    "Unable to obtain interface parameters for %s",
+			    buf);
+		    write_error(err_msg, daemonized);
+		    ptmp->params.state_valid = 0;
+		} else {
+		    ptmp->params.saved_state = ifr.ifr_flags;
+		    ptmp->params.state_valid = 1;
+		}
+	    }
+	}
+    } while (strcmp(buf, "") != 0);
+}
+
+/*
+ * Save interfaces and their states to a temporary file.  Used only by the
+ * first IPTraf instance.  Needed in case there are subsequent, simultaneous 
+ * instances of IPTraf, which may still need promiscuous mode even after
+ * the first instance exits.  These subsequent instances will need to restore
+ * the promiscuous state from this file.
+ */
+
+void save_promisc_list(struct promisc_states *list)
+{
+    int fd;
+    struct promisc_states *ptmp = list;
+
+    fd = open(PROMISCLISTFILE, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
+
+    if (fd < 0) {
+	write_error("Unable to save interface flags", daemonized);
+	return;
+    }
+
+    while (ptmp != NULL) {
+	write(fd, &(ptmp->params), sizeof(struct promisc_params));
+	ptmp = ptmp->next_entry;
+    }
+
+    close(fd);
+}
+
+/*
+ * Load promiscuous states into list
+ */
+
+void load_promisc_list(struct promisc_states **list)
+{
+    int fd;
+    struct promisc_states *ptmp = NULL;
+    struct promisc_states *tail = NULL;
+    int br;
+
+    fd = open(PROMISCLISTFILE, O_RDONLY);
+
+    if (fd < 0) {
+	write_error("Unable to retrieve saved interface flags",
+		    daemonized);
+	*list = NULL;
+	return;
+    }
+
+    do {
+	ptmp = malloc(sizeof(struct promisc_states));
+	br = read(fd, &(ptmp->params), sizeof(struct promisc_params));
+
+	if (br > 0) {
+	    if (tail != NULL)
+		tail->next_entry = ptmp;
+	    else
+		*list = ptmp;
+
+	    ptmp->next_entry = NULL;
+	    tail = ptmp;
+	} else
+	    free(ptmp);
+    } while (br > 0);
+
+    close(fd);
+}
+
+/*
+ * Set/restore interface promiscuous mode.
+ */
+
+void srpromisc(int mode, struct promisc_states *list)
+{
+    int fd;
+    struct ifreq ifr;
+    struct promisc_states *ptmp;
+    int istat;
+    char fullmsg[PROMISC_MSG_MAX];
+
+    ptmp = list;
+
+    fd = socket(PF_INET, SOCK_DGRAM, 0);
+
+    if (fd < 0) {
+	write_error("Unable to open socket for flag change", daemonized);
+	return;
+    }
+
+    while (ptmp != NULL) {
+	if (((strncmp(ptmp->params.ifname, "eth", 3) == 0) ||
+	     (strncmp(ptmp->params.ifname, "vlan", 4) == 0) ||
+	     (strncmp(ptmp->params.ifname, "wvlan", 4) == 0) ||
+	     (strncmp(ptmp->params.ifname, "lec", 3) == 0)) &&
+	     (ptmp->params.state_valid)) {
+
+	    strcpy(ifr.ifr_name, ptmp->params.ifname);
+
+	    if (mode)
+		ifr.ifr_flags = ptmp->params.saved_state | IFF_PROMISC;
+	    else
+		ifr.ifr_flags = ptmp->params.saved_state;
+
+	    istat = ioctl(fd, SIOCSIFFLAGS, &ifr);
+
+	    if (istat < 0) {
+		sprintf(fullmsg, "Promisc change failed for %s",
+			ptmp->params.ifname);
+		write_error(fullmsg, daemonized);
+	    }
+	}
+	ptmp = ptmp->next_entry;
+    }
+
+    close(fd);
+}
+
+void destroy_promisc_list(struct promisc_states **list)
+{
+    struct promisc_states *ptmp = *list;
+    struct promisc_states *ctmp;
+
+    if (ptmp != NULL)
+	ctmp = ptmp->next_entry;
+
+    while (ptmp != NULL) {
+	free(ptmp);
+	ptmp = ctmp;
+	if (ctmp != NULL)
+	    ctmp = ctmp->next_entry;
+    }
+}
diff -ruN iptraf-2.7.0-old/src/rvnamed.c iptraf-2.7.0-new/src/rvnamed.c
--- iptraf-2.7.0-old/src/rvnamed.c	2002-05-02 03:37:34.000000000 +0200
+++ iptraf-2.7.0-new/src/rvnamed.c	2005-10-04 22:02:47.000000000 +0200
@@ -48,7 +48,6 @@
 #include <signal.h>
 #include <sys/wait.h>
 #include "rvnamed.h"
-#include "dirs.h"
 
 #define NUM_CACHE_ENTRIES 2048
 #define TIME_TARGET_MAX 30
diff -ruN iptraf-2.7.0-old/src/rvnamed.h iptraf-2.7.0-new/src/rvnamed.h
--- iptraf-2.7.0-old/src/rvnamed.h	2002-05-02 03:36:30.000000000 +0200
+++ iptraf-2.7.0-new/src/rvnamed.h	2005-10-04 22:03:29.000000000 +0200
@@ -1,9 +1,10 @@
 #include <netinet/in.h>
 #include <arpa/inet.h>
+#include "dirs.h"
 
-#define CHILDSOCKNAME "/dev/rvndcldcomsk"
-#define PARENTSOCKNAME "/dev/rvndpntcomsk"
-#define IPTSOCKNAME "/dev/rvndiptcomsk"
+#define CHILDSOCKNAME  LOCKDIR "/rvndcldcomsk"
+#define PARENTSOCKNAME  LOCKDIR "/rvndpntcomsk"
+#define IPTSOCKNAME  LOCKDIR "/rvndiptcomsk"
 
 #define SOCKET_PREFIX	"isock"
 
diff -ruN iptraf-2.7.0-old/src/tcptable.c iptraf-2.7.0-new/src/tcptable.c
--- iptraf-2.7.0-old/src/tcptable.c	2002-05-08 03:36:27.000000000 +0200
+++ iptraf-2.7.0-new/src/tcptable.c	2005-10-03 19:25:55.000000000 +0200
@@ -598,9 +598,6 @@
     	if ((linkproto == LINK_ETHERNET) || (linkproto == LINK_PLIP)) {
 	    convmacaddr(((struct ethhdr *) packet)->h_source,
 			newmacaddr);
-	} else if (linkproto == LINK_FDDI) {
-	    convmacaddr(((struct fddihdr *) packet)->saddr,
-			newmacaddr);
         } else if (linkproto == LINK_TR) {
             convmacaddr(((struct trh_hdr *) packet)->saddr, newmacaddr);
         }
diff -ruN iptraf-2.7.0-old/src/tcptable.h iptraf-2.7.0-new/src/tcptable.h
--- iptraf-2.7.0-old/src/tcptable.h	2001-12-28 03:16:39.000000000 +0100
+++ iptraf-2.7.0-new/src/tcptable.h	2005-10-03 19:26:01.000000000 +0200
@@ -22,7 +22,6 @@
 #include <asm/types.h>
 #include <linux/if_packet.h>
 #include <linux/if_ether.h>
-#include <linux/if_fddi.h>
 #include <linux/if_tr.h>
 #include <net/if.h>
 #include <netinet/ip.h>