diff -ur bridge-utils-1.0.4/brctl/brctl_cmd.c bridge-utils-1.0.4-ipmode/brctl/brctl_cmd.c
--- bridge-utils-1.0.4/brctl/brctl_cmd.c	2004-06-04 21:03:40.000000000 +0300
+++ bridge-utils-1.0.4-ipmode/brctl/brctl_cmd.c	2004-06-17 02:23:13.750171240 +0300
@@ -275,6 +275,29 @@
 	return err != 0;
 }
 
+static int br_cmd_ip_mode(char **argv)
+{
+	int ipmode, err;
+	char *a = argv[2]? : "";
+
+	if (!strcmp(a, "on") || !strcmp(a, "yes") 
+	    || !strcmp(a, "1"))
+		ipmode = 1;
+	else if (!strcmp(a, "off") || !strcmp(a, "no") 
+		 || !strcmp(a, "0"))
+		ipmode = 0;
+	else {
+		fprintf(stderr, "expect on/off for argument\n");
+		return 1;
+	}
+
+	err = br_set_bridge_ip_mode(argv[1], ipmode);
+	if (err)
+		fprintf(stderr, "set ipmode failed: %s\n", 
+			strerror(errno));
+	return err != 0;
+}
+
 static int br_cmd_showstp(char** argv)
 {
 	struct bridge_info info;
@@ -304,6 +327,7 @@
 
 	br_dump_bridge_id((unsigned char *)&info.bridge_id);
 	printf("\t%s\t\t", info.stp_enabled?"yes":"no");
+	printf("%s\t", info.ip_mode?"yes":"no");
 
 	br_dump_interface_list(name);
 	return 0;
@@ -311,7 +335,7 @@
 
 static int br_cmd_show(char** argv)
 {
-	printf("bridge name\tbridge id\t\tSTP enabled\tinterfaces\n");
+	printf("bridge name\tbridge id\t\tSTP enabled\tIP Mode\tinterfaces\n");
 	br_foreach_bridge(show_bridge, NULL);
 	return 0;
 }
@@ -396,6 +420,8 @@
 	  "<bridge>\t\tshow bridge stp info"},
 	{ 1, "stp", br_cmd_stp,
 	  "<bridge> <state>\tturn stp on/off" },
+	{ 1, "ipmode", br_cmd_ip_mode,
+	  "<bridge> <state>\tturn ipmode on/off" },
 };
 
 const struct command *command_lookup(const char *cmd)
diff -ur bridge-utils-1.0.4/brctl/brctl_disp.c bridge-utils-1.0.4-ipmode/brctl/brctl_disp.c
--- bridge-utils-1.0.4/brctl/brctl_disp.c	2004-06-08 18:57:46.000000000 +0300
+++ bridge-utils-1.0.4-ipmode/brctl/brctl_disp.c	2004-06-17 02:22:08.690061880 +0300
@@ -43,7 +43,7 @@
 	if (first) 
 		first = 0;
 	else
-		printf("\n\t\t\t\t\t\t\t");
+		printf("\n\t\t\t\t\t\t\t\t");
 
 	printf("%s", p);
 
diff -ur bridge-utils-1.0.4/brctl/brctld.c bridge-utils-1.0.4-ipmode/brctl/brctld.c
--- bridge-utils-1.0.4/brctl/brctld.c	2001-12-07 16:27:11.000000000 +0200
+++ bridge-utils-1.0.4-ipmode/brctl/brctld.c	2004-06-17 02:22:08.690061880 +0300
@@ -48,6 +48,7 @@
 "showmacs\t\t\t\tshow a list of mac addrs\n"
 "showstp\t\t\t\t\tshow bridge stp info\n"
 "stp\t\t\t<state>\t\tturn stp on/off\n"
+"ipmode\t\t\t<state>\t\tturn ipmode on/off\n"
 "quit\t\t\t\t\texit this session\n"
 "\n";
 
diff -ur bridge-utils-1.0.4/libbridge/libbridge.h bridge-utils-1.0.4-ipmode/libbridge/libbridge.h
--- bridge-utils-1.0.4/libbridge/libbridge.h	2004-06-08 18:57:49.000000000 +0300
+++ bridge-utils-1.0.4-ipmode/libbridge/libbridge.h	2004-06-17 02:22:08.691061728 +0300
@@ -43,6 +43,7 @@
 	unsigned char stp_enabled;
 	unsigned char topology_change;
 	unsigned char topology_change_detected;
+	unsigned char ip_mode;
 	struct timeval ageing_time;
 	struct timeval hello_timer_value;
 	struct timeval tcn_timer_value;
@@ -99,6 +100,7 @@
 extern int br_set_bridge_hello_time(const char *br, struct timeval *tv);
 extern int br_set_bridge_max_age(const char *br, struct timeval *tv);
 extern int br_set_ageing_time(const char *br, struct timeval *tv);
+extern int br_set_bridge_ip_mode(const char *br, int ipmode);
 extern int br_set_stp_state(const char *br, int stp_state);
 extern int br_set_bridge_priority(const char *br, int bridge_priority);
 extern int br_set_port_priority(const char *br, const char *p, 
diff -ur bridge-utils-1.0.4/libbridge/libbridge_devif.c bridge-utils-1.0.4-ipmode/libbridge/libbridge_devif.c
--- bridge-utils-1.0.4/libbridge/libbridge_devif.c	2004-06-08 18:57:49.000000000 +0300
+++ bridge-utils-1.0.4-ipmode/libbridge/libbridge_devif.c	2004-06-17 02:22:08.691061728 +0300
@@ -184,6 +184,7 @@
 	info->topology_change = i.topology_change;
 	info->topology_change_detected = i.topology_change_detected;
 	info->stp_enabled = i.stp_enabled;
+	info->ip_mode = i.ip_mode;
 	__jiffies_to_tv(&info->max_age, i.max_age);
 	__jiffies_to_tv(&info->hello_time, i.hello_time);
 	__jiffies_to_tv(&info->forward_delay, i.forward_delay);
@@ -234,6 +235,7 @@
 
 	info->root_port = fetch_int(sdir, "root_port");
 	info->stp_enabled = fetch_int(sdir, "stp_state");
+	info->ip_mode = fetch_int(sdir, "ipmode");
 	info->topology_change = fetch_int(sdir, "topology_change");
 	info->topology_change_detected = fetch_int(sdir, "topology_change_detected");
 	sysfs_close_directory(sdir);
@@ -390,6 +392,11 @@
 	return br_set(br, "stp_state", stp_state, BRCTL_SET_BRIDGE_STP_STATE);
 }
 
+int br_set_bridge_ip_mode(const char *br, int ipmode)
+{
+	return br_set(br, "ipmode", ipmode, BRCTL_SET_BRIDGE_IP_MODE);
+}
+
 int br_set_bridge_priority(const char *br, int bridge_priority)
 {
 	return br_set(br, "priority", bridge_priority, 
