From 349dba3bcbe2bc447c7b0999427df6c748e35c09 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Tue, 24 Jan 2012 10:38:04 -0800 Subject: [PATCH] mac-learning: Increase MAC learning timeout to 300 seconds. When Cisco (and other?) routers are configured in high-availability modes, they use two different MAC addresses. The router uses MAC 1 only for ARP replies. The router uses MAC 2 for forwarding IP packets to end hosts. When a MAC learning switch is attached to the router, therefore, it will only learn the location of MAC 1 from ARP replies. If the end host's ARP cache refresh timer is longer than the switch's MAC learning timeout, then packets to the router will be flooded from the MAC learning timeout until the next ARP reply. This commit fixes the problem by increasing the MAC learning timeout from 60 seconds to 300 seconds. According to research by Sanjay Sane, this is always sufficient, even with operating systems that use ARP timeouts longer than 300 seconds (such as FreeBSD and Mac OS, which have 1200 seconds ARP timeouts) because the routers that cause this problem send unsolicited ARP replies every 180 seconds. This issue arises in any situation where traffic between two hosts flows only in one direction. The explanation above describes only one special case. NICS-11. Signed-off-by: Ben Pfaff --- lib/mac-learning.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mac-learning.h b/lib/mac-learning.h index 0263e4987..4bcf221dc 100644 --- a/lib/mac-learning.h +++ b/lib/mac-learning.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks. + * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,7 +27,7 @@ #define MAC_MAX 2048 /* Time, in seconds, before expiring a mac_entry due to inactivity. */ -#define MAC_ENTRY_IDLE_TIME 60 +#define MAC_ENTRY_IDLE_TIME 300 /* Time, in seconds, to lock an entry updated by a gratuitous ARP to avoid * relearning based on a reflection from a bond slave. */ -- 2.43.0