diff -urp bridge-utils-1.4/brctl/brctl_cmd.c bridge-utils-1.4-ipmode/brctl/brctl_cmd.c
--- bridge-utils-1.4/brctl/brctl_cmd.c	2008-01-08 18:20:35.000000000 +0200
+++ bridge-utils-1.4-ipmode/brctl/brctl_cmd.c	2010-07-13 10:27:06.000000000 +0300
@@ -302,6 +302,29 @@ static int br_cmd_stp(int argc, char *co
 	return err != 0;
 }
 
+static int br_cmd_ip_mode(int argc, char *const* 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(int argc, char *const* argv)
 {
 	struct bridge_info info;
@@ -331,6 +354,7 @@ static int show_bridge(const char *name,
 
 	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;
@@ -338,7 +362,7 @@ static int show_bridge(const char *name,
 
 static int br_cmd_show(int argc, char *const* 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;
 }
@@ -423,6 +447,8 @@ static const struct command commands[] =
 	  "<bridge>\t\tshow bridge stp info"},
 	{ 2, "stp", br_cmd_stp,
 	  "<bridge> {on|off}\tturn stp on/off" },
+	{ 2, "ipmode", br_cmd_ip_mode,
+	  "<bridge> {on|off}\tturn ipmode on/off" },
 };
 
 const struct command *command_lookup(const char *cmd)
diff -urp bridge-utils-1.4/brctl/brctl_disp.c bridge-utils-1.4-ipmode/brctl/brctl_disp.c
--- bridge-utils-1.4/brctl/brctl_disp.c	2008-01-08 18:20:35.000000000 +0200
+++ bridge-utils-1.4-ipmode/brctl/brctl_disp.c	2010-07-13 10:28:04.000000000 +0300
@@ -43,7 +43,7 @@ static int dump_interface(const char *b,
 	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 -urp bridge-utils-1.4/libbridge/libbridge.h bridge-utils-1.4-ipmode/libbridge/libbridge.h
--- bridge-utils-1.4/libbridge/libbridge.h	2008-01-08 18:20:35.000000000 +0200
+++ bridge-utils-1.4-ipmode/libbridge/libbridge.h	2010-07-13 10:31:30.000000000 +0300
@@ -49,6 +49,7 @@ struct bridge_info
 	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;
@@ -105,6 +106,7 @@ extern int br_set_bridge_forward_delay(c
 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 -urp bridge-utils-1.4/libbridge/libbridge_devif.c bridge-utils-1.4-ipmode/libbridge/libbridge_devif.c
--- bridge-utils-1.4/libbridge/libbridge_devif.c	2008-01-08 18:20:35.000000000 +0200
+++ bridge-utils-1.4-ipmode/libbridge/libbridge_devif.c	2010-07-13 10:34:25.000000000 +0300
@@ -132,6 +132,7 @@ static int old_get_bridge_info(const cha
 	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);
@@ -183,6 +184,7 @@ int br_get_bridge_info(const char *bridg
 
 	info->root_port = fetch_int(path, "root_port");
 	info->stp_enabled = fetch_int(path, "stp_state");
+	info->ip_mode = fetch_int(path, "ipmode");
 	info->topology_change = fetch_int(path, "topology_change");
 	info->topology_change_detected = fetch_int(path, "topology_change_detected");
 
@@ -330,6 +332,11 @@ int br_set_stp_state(const char *br, int
 	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, 
