Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 06 Dec 2010 17:48:36 +0600
From:      Eugene Grosbein <egrosbein@rdtc.ru>
To:        Jack Vogel <jfvogel@gmail.com>
Cc:        bzeeb-lists@lists.zabbadoz.net, freebsd-net <freebsd-net@freebsd.org>, Jack Vogel <jfvogel@gmail.com>, Mike Tancsa <mike@sentex.net>
Subject:   [patch] Bring link down when interface goes down
Message-ID:  <4CFCCD94.60100@rdtc.ru>
In-Reply-To: <AANLkTim_%2BYOvUgBAveciSoWUiGL46068ieHAEhYsU8kT@mail.gmail.com>
References:  <AANLkTimWVJhtu8LrZ_tn0Tdr-vs9PmPnW9SjebT7jnyM@mail.gmail.com>	<AANLkTik%2B4Ag1HYXDWJvn2fTx6M%2Bpa9o29-A8j6qVRhZ_@mail.gmail.com>	<AANLkTikwcRW%2BdqY=NTSbJsr3daEd-8usPo0Rw%2BhA_D-8@mail.gmail.com>	<AANLkTin3%2BbCaXoPxTQsvzmqgtpA1zSY8f17Qh-nqymPw@mail.gmail.com>	<201011270946271408828@yahoo.com.cn>	<AANLkTikG8RJQw%2Bh1SHZPs1cHGrM%2B3LfniZrdLqVoPVtr@mail.gmail.com>	<AANLkTi=YjG40%2BDj7471wyv3aeXGJgoL1GC33iNaypsrW@mail.gmail.com>	<AANLkTi=LgejYxRXnxLtkvB-Qfp2u%2BtySdriWHfGWPQjL@mail.gmail.com>	<20101128081617.GA90332@zibbi.meraka.csir.co.za>	<AANLkTinF1fovumkeXxWgaKi_bNiUCnqgWAtdaCaXELzO@mail.gmail.com>	<4CF73A2C.7000802@rdtc.ru> <4CF89EE7.8020807@rdtc.ru>	<AANLkTi=6N3Rz57YVNF1ZiDGEexnEXWr6oNPz9F=c2GpA@mail.gmail.com>	<4CF93A77.30804@rdtc.ru> <4CF9470F.4020709@sentex.net>	<4CF947D4.10504@rdtc.ru>	<AANLkTin7hfqqwkudNHhrsyS_O7_-PCXffAWT1N85i31f@mail.gmail.com>	<4CFA0435.7020100@rdtc.ru> <AANLkTim_%2BYOvUgBAveciSoWUiGL46068ieHAEhYsU8kT@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 04.12.2010 15:08, Jack Vogel wrote:
> This isn't some simple 'go change this line or parameter',
> there were some problematic issues that my Linux coworkers
> faced, I have to go look into it before I even decide...
> 
> so...patience friend.

For igb(4) the change seems pretty short. At least, it works
for my 82576-based dual-port copper card.

--- if_igb.h.orig	2010-12-06 12:27:54.000000000 +0600
+++ if_igb.h	2010-12-06 12:29:47.000000000 +0600
@@ -450,6 +450,8 @@
 #endif
 
 	void 			*stats;
+	/* Bring link down when interface goes down */
+	int		down_disables_link;
 };
 
 /* ******************************************************************************
--- if_igb.c.orig	2010-11-30 11:14:42.000000000 +0600
+++ if_igb.c	2010-12-06 12:37:10.000000000 +0600
@@ -432,6 +432,13 @@
 	    OID_AUTO, "enable_aim", CTLTYPE_INT|CTLFLAG_RW,
 	    &igb_enable_aim, 1, "Interrupt Moderation");
 
+	adapter->down_disables_link = 0;
+	SYSCTL_ADD_INT(device_get_sysctl_ctx(dev),
+	    SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
+	    OID_AUTO, "down_disables_link", CTLTYPE_INT|CTLFLAG_RW,
+	    &adapter->down_disables_link, adapter->down_disables_link,
+	    "Bring link down when interface goes down");
+
 	callout_init_mtx(&adapter->timer, &adapter->core_mtx, 0);
 
 	/* Determine hardware and mac info */
@@ -2070,6 +2077,13 @@
 
 	e1000_led_off(&adapter->hw);
 	e1000_cleanup_led(&adapter->hw);
+
+	if(adapter->down_disables_link) {
+		e1000_power_down_phy(&adapter->hw);
+		igb_handle_link(adapter, 0);
+		/* Reset the phy next time init gets called */
+		adapter->hw.phy.reset_disable = FALSE;
+	}
 }
 
 

However, similar patch applied to em(4) does not work
for my on-board 82574L-based cards: e1000_power_down_phy()
thanslates to e1000_power_down_phy_copper_82571() that does nothing
because mac->ops.check_mng_mode(hw) returns true value
and, therefore, e1000_power_down_phy_copper(hw) is not even called.

Still trying to find a way...

Eugene Grosbein



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4CFCCD94.60100>