diff -pNur veth-1.0/veth/vethd.c veth-1.0/veth/vethd.c
--- veth-1.0/veth/vethd.c	2008-11-14 10:59:50.000000000 +0100
+++ veth-1.0/veth/vethd.c	2008-11-24 11:24:45.000000000 +0100
@@ -29,6 +29,7 @@
 #include <linux/if_ether.h>
 #include <linux/if_packet.h>
 #include <linux/if_tun.h>
+#include <net/ethernet.h>
 
 #define max(a,b) ((a)>(b) ? (a):(b))
 
@@ -223,6 +224,7 @@ int main(int argc, char **argv)
 
 	int vfd, nfd, leidos, opc, foreground = 0;
 	fd_set fds;
+	struct ether_header const* const ether_hdr = (struct ether_header const *)buffer;
 
 	set_locale();
 	show_copyright();
@@ -356,7 +358,11 @@ int main(int argc, char **argv)
 				perror("Error reading from ethernet interface");
 				return 2;
 			}
-			write(vfd, buffer, leidos);
+			/* drop multicast and ppp session */
+			if (!(ether_hdr->ether_dhost[0] == 0x01)
+			   && (ether_hdr->ether_type != htons(ETH_P_PPP_SES))) {
+				write(vfd, buffer, leidos);
+			}
 		}
 		FD_ZERO(&fds);
 		FD_SET(nfd, &fds);