diff --git a/bridge/fdb.c b/bridge/fdb.c
index ba4660b..4ca4861 100644
--- a/bridge/fdb.c
+++ b/bridge/fdb.c
@@ -9,7 +9,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
-#include <netdb.h>
 #include <time.h>
 #include <fcntl.h>
 #include <sys/socket.h>
@@ -30,7 +29,7 @@
 
 static void usage(void)
 {
-	fprintf(stderr, "Usage: bridge fdb { add | del } ADDR dev DEV {self|master} [ temp ] [ dst IPADDR] [port PORT] [vni VNI] [via DEV]\n");
+	fprintf(stderr, "Usage: bridge fdb { add | del } ADDR dev DEV {self|master} [ temp ] [ dst IPADDR]\n");
 	fprintf(stderr, "       bridge fdb {show} [ dev DEV ]\n");
 	exit(-1);
 }
@@ -108,23 +107,6 @@
 				    abuf, sizeof(abuf)));
 	}
 
-	if (tb[NDA_PORT])
-		fprintf(fp, "port %d ", rta_getattr_u32(tb[NDA_PORT]));
-	if (tb[NDA_VNI])
-		fprintf(fp, "vni %d ", rta_getattr_u32(tb[NDA_VNI]));
-	if (tb[NDA_IFINDEX]) {
-		unsigned int ifindex = rta_getattr_u32(tb[NDA_IFINDEX]);
-
-		if (ifindex) {
-			char ifname[IF_NAMESIZE];
-
-			if (if_indextoname(ifindex, ifname))
-				fprintf(fp, "via %s ", ifname);
-			else
-				fprintf(fp, "via ifindex %u ", ifindex);
-		}
-	}
-
 	if (show_stats && tb[NDA_CACHEINFO]) {
 		struct nda_cacheinfo *ci = RTA_DATA(tb[NDA_CACHEINFO]);
 		int hz = get_user_hz();
@@ -189,10 +171,6 @@
 	char abuf[ETH_ALEN];
 	int dst_ok = 0;
 	inet_prefix dst;
-	unsigned long port = 0;
-	unsigned long vni = ~0;
-	unsigned int via = 0;
-	char *endptr;
 
 	memset(&req, 0, sizeof(req));
 
@@ -212,29 +190,6 @@
 				duparg2("dst", *argv);
 			get_addr(&dst, *argv, preferred_family);
 			dst_ok = 1;
-		} else if (strcmp(*argv, "port") == 0) {
-
-			NEXT_ARG();
-			port = strtoul(*argv, &endptr, 0);
-			if (endptr && *endptr) {
-				struct servent *pse;
-
-				pse = getservbyname(*argv, "udp");
-				if (!pse)
-					invarg("invalid port\n", *argv);
-			} else if (port > 0xffff)
-				invarg("invalid port\n", *argv);
-		} else if (strcmp(*argv, "vni") == 0) {
-			NEXT_ARG();
-			vni = strtoul(*argv, &endptr, 0);
-			if ((endptr && *endptr) ||
-			    (vni >> 24) || vni == ULONG_MAX)
-				invarg("invalid VNI\n", *argv);
-		} else if (strcmp(*argv, "via") == 0) {
-			NEXT_ARG();
-			via = if_nametoindex(*argv);
-			if (via == 0)
-				invarg("invalid device\n", *argv);
 		} else if (strcmp(*argv, "self") == 0) {
 			req.ndm.ndm_flags |= NTF_SELF;
 		} else if (matches(*argv, "master") == 0) {
@@ -281,13 +236,6 @@
 	if (dst_ok)
 		addattr_l(&req.n, sizeof(req), NDA_DST, &dst.data, dst.bytelen);
 
-	if (port)
-		addattr32(&req.n, sizeof(req), NDA_PORT, port);
-	if (vni != ~0)
-		addattr32(&req.n, sizeof(req), NDA_VNI, vni);
-	if (via)
-		addattr32(&req.n, sizeof(req), NDA_IFINDEX, via);
-
 	req.ndm.ndm_ifindex = ll_name_to_index(d);
 	if (req.ndm.ndm_ifindex == 0) {
 		fprintf(stderr, "Cannot find device \"%s\"\n", d);
@@ -307,8 +255,6 @@
 	if (argc > 0) {
 		if (matches(*argv, "add") == 0)
 			return fdb_modify(RTM_NEWNEIGH, NLM_F_CREATE|NLM_F_EXCL, argc-1, argv+1);
-		if (matches(*argv, "append") == 0)
-			return fdb_modify(RTM_NEWNEIGH, NLM_F_CREATE|NLM_F_APPEND, argc-1, argv+1);
 		if (matches(*argv, "delete") == 0)
 			return fdb_modify(RTM_DELNEIGH, 0, argc-1, argv+1);
 		if (matches(*argv, "show") == 0 ||
