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 #include #include +#include #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);