From owner-freebsd-net Fri Feb 9 15:51:12 2001 Delivered-To: freebsd-net@freebsd.org Received: from orthanc.ab.ca (207-167-15-66.dsl.worldgate.ca [207.167.15.66]) by hub.freebsd.org (Postfix) with ESMTP id BC81237B6B4; Fri, 9 Feb 2001 15:50:49 -0800 (PST) Received: from orthanc.ab.ca (localhost [127.0.0.1]) by orthanc.ab.ca (8.11.1/8.11.1) with ESMTP id f19NnHi02402; Fri, 9 Feb 2001 16:49:17 -0700 (MST) (envelope-from lyndon@orthanc.ab.ca) Message-Id: <200102092349.f19NnHi02402@orthanc.ab.ca> To: Chris Dillon Cc: Alex Pilosov , Dan Nelson , Bill Paul , hackers@FreeBSD.ORG, net@FreeBSD.ORG Subject: Re: call for testers: port aggregation netgraph module In-reply-to: Your message of "Fri, 09 Feb 2001 16:47:27 CST." Date: Fri, 09 Feb 2001 16:49:17 -0700 From: Lyndon Nerenberg Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org >>>>> "Chris" == Chris Dillon writes: >> Its not real trunking. Your incoming traffic will still come on >> a single link, only outbound traffic will be shared. (Or at >> least that's how I think compaq stuff will work). Chris> Yes, I think that is how it works. I'd guess that this Chris> doesn't matter in most cases since most servers are Chris> transmitting much more data than they are receiving. For the Cisco scheme, let n equal the number of network interfaces in the bundle. For each packet sent from the bundled host (i.e. the host with bundled interfaces) mask off all but the bottom log2(n) bits and use the result to select the interface to use. E.g.: u_int if_cnt = 4; /* we have four interfaces */ u_int64_t mac; /* the mac address we're sending to */ struct iftab if[n]; /* list of interface entries */ u_int64_t mask = ~0 & (n-1); /* mask for iftab index */ if[mac & mask]->send(data); (Thus if_cnt must be a power of 2.) At zero state, something ARPs for the hosts address. The calculation above determines which interface the response goes out on, and therefore determines which of the MAC addresses the requester sees for the host. The switches can (and usually do) have some smarts in them as well. They know which interfaces are part of the bundle for the host, allowing them to maximize the flow of traffic _to_ the host by redirecting packets to lightly used interfaces. (The bundled host doesn't care which interface the packets arrives on.) This is also necessary to work around interface failure. So assuming a 100 Mb/s switched network fabric and four interfaces on the bundled host, the bundled host can sustain up to 100 Mb/s full-duplex with each of four seperate remote hosts concurrently (400 Mb/s aggregate). It won't let you sustain 400 Mb/s to _one_ remote host (even if the remote also has four bundled interfaces). This works quite well for NFS servers if you have a lot of clients. And it's usually cheaper than putting in gigabit ethernet on the switch and server. (Plus you get redundency from the multiple interfaces.) --lyndon To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message