From nobody@FreeBSD.org  Fri Jun 22 20:47:54 2007
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52])
	by hub.freebsd.org (Postfix) with ESMTP id 390F116A400
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 22 Jun 2007 20:47:54 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [69.147.83.33])
	by mx1.freebsd.org (Postfix) with ESMTP id 2D12013C46A
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 22 Jun 2007 20:47:54 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.13.1/8.13.1) with ESMTP id l5MKlrKf074679
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 22 Jun 2007 20:47:53 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.13.1/8.13.1/Submit) id l5MKlrCE074678;
	Fri, 22 Jun 2007 20:47:53 GMT
	(envelope-from nobody)
Message-Id: <200706222047.l5MKlrCE074678@www.freebsd.org>
Date: Fri, 22 Jun 2007 20:47:53 GMT
From: Greg Jones <gjones@centwire.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: carp stuck in init when using a lagg interface
X-Send-Pr-Version: www-3.0

>Number:         113956
>Category:       kern
>Synopsis:       [carp] [lagg] carp stuck in init when using a lagg interface
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    thompsa
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Jun 22 20:50:03 GMT 2007
>Closed-Date:    Thu Nov 29 19:11:31 UTC 2007
>Last-Modified:  Thu Nov 29 19:11:31 UTC 2007
>Originator:     Greg Jones
>Release:        FreeBSD 7.0-CURRENT i386
>Organization:
Centennial Wireless
>Environment:
FreeBSD  7.0-CURRENT FreeBSD 7.0-CURRENT #2: Thu Jun 21 15:37:24 EDT 2007     root@:/usr/obj/usr/src/sys/GENERIC  i386
>Description:
Carp works fine on a physical interface.  Lagg is also tested and working
in failover and roundrobin modes.  But carp when it needs to use the lagg
interface will never go beyound the init stage, and no advertisements are
ever sent on the lagg interface.  The kernel is GENERIC, with the exception
of device carp being added.
>How-To-Repeat:
#setup lagg interface
ifconfig lagg0 create
ifconfig bge0 up
ifconfig bge1 up
ifconfig lagg0 laggproto roundrobin laggport bge0 laggport bge1 192.168.1.200 netmask 255.255.255.0
#add carp
ifconfig carp0 create
ifconfig carp0 up vhid 1 advskew 10 pass thepassword 192.168.1.230 netmask 255.255.255.0
>Fix:


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->thompsa 
Responsible-Changed-By: kmacy 
Responsible-Changed-When: Thu Nov 15 22:52:37 UTC 2007 
Responsible-Changed-Why:  

Andrew is the maintainer for if_lagg. Andrew if it turns out to be a 
carp issue please re-assign to gleb. Thanks. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=113956 

From: Andrew Thompson <thompsa@FreeBSD.org>
To: bug-followup@FreeBSD.org, gjones@centwire.com
Cc:  
Subject: Re: kern/113956: [carp] [lagg] carp stuck in init when using a
	lagg interface
Date: Fri, 23 Nov 2007 00:23:27 +1300

 --CE+1k2dSO48ffgeK
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 Hi,
 
 Can you please test this patch.
 
 
 cheers,
 Andrew
 
 --CE+1k2dSO48ffgeK
 Content-Type: text/x-diff; charset=us-ascii
 Content-Disposition: attachment; filename="lagg_linkstate.diff"
 
 Index: if_lagg.c
 ===================================================================
 RCS file: /home/ncvs/src/sys/net/if_lagg.c,v
 retrieving revision 1.21
 diff -u -p -r1.21 if_lagg.c
 --- if_lagg.c	20 Oct 2007 02:43:23 -0000	1.21
 +++ if_lagg.c	22 Nov 2007 11:19:52 -0000
 @@ -88,6 +88,7 @@ static void	lagg_port_setlladdr(void *, 
  static int	lagg_port_create(struct lagg_softc *, struct ifnet *);
  static int	lagg_port_destroy(struct lagg_port *, int);
  static struct mbuf *lagg_input(struct ifnet *, struct mbuf *);
 +static void	lagg_linkstate(struct lagg_softc *);
  static void	lagg_port_state(struct ifnet *, int);
  static int	lagg_port_ioctl(struct ifnet *, u_long, caddr_t);
  static int	lagg_port_output(struct ifnet *, struct mbuf *,
 @@ -491,6 +492,7 @@ lagg_port_create(struct lagg_softc *sc, 
  
  	/* Update lagg capabilities */
  	lagg_capabilities(sc);
 +	lagg_linkstate(sc);
  
  	/* Add multicast addresses and interface flags to this port */
  	lagg_ether_cmdmulti(lp, 1);
 @@ -596,6 +598,7 @@ lagg_port_destroy(struct lagg_port *lp, 
  
  	/* Update lagg capabilities */
  	lagg_capabilities(sc);
 +	lagg_linkstate(sc);
  
  	return (0);
  }
 @@ -1188,6 +1191,23 @@ lagg_media_status(struct ifnet *ifp, str
  }
  
  static void
 +lagg_linkstate(struct lagg_softc *sc)
 +{
 +	struct lagg_port *lp;
 +	int new_link = LINK_STATE_DOWN;
 +
 +	/* Check to see if at least one of our links is up */
 +	SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
 +		if (lp->lp_link_state == LINK_STATE_UP) {
 +			new_link = LINK_STATE_UP;
 +			break;
 +		}
 +	}
 +
 +	if_link_state_change(sc->sc_ifp, new_link);
 +}
 +
 +static void
  lagg_port_state(struct ifnet *ifp, int state)
  {
  	struct lagg_port *lp = (struct lagg_port *)ifp->if_lagg;
 @@ -1199,6 +1219,7 @@ lagg_port_state(struct ifnet *ifp, int s
  		return;
  
  	LAGG_WLOCK(sc);
 +	lagg_linkstate(sc);
  	if (sc->sc_linkstate != NULL)
  		(*sc->sc_linkstate)(lp);
  	LAGG_WUNLOCK(sc);
 
 --CE+1k2dSO48ffgeK--

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/113956: commit references a PR
Date: Sun, 25 Nov 2007 06:30:52 +0000 (UTC)

 thompsa     2007-11-25 06:30:46 UTC
 
   FreeBSD src repository
 
   Modified files:
     sys/net              if_lagg.c 
   Log:
   Have the lagg interface generate link up/down events, the interface is marked
   as up if at least one of its ports also has a link up. This fixes using
   carp+lagg together and any other system that relies on linkstate events.
   
   PR:             kern/113956
   MFC after:      3 days
   
   Revision  Changes    Path
   1.22      +20 -0     src/sys/net/if_lagg.c
 _______________________________________________
 cvs-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/cvs-all
 To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->closed 
State-Changed-By: thompsa 
State-Changed-When: Thu Nov 29 19:10:35 UTC 2007 
State-Changed-Why:  
Fixed in RELENG_7, RELENG_6, RELENG_6_3. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=113956 
>Unformatted:
