Re: [PATCH net] bridge: notify user space after fdb update

2014-06-01 Thread David Miller
From: Jon Maxwell 
Date: Thu, 29 May 2014 17:27:16 +1000

> There has been a number incidents recently where customers running KVM have
> reported that VM hosts on different Hypervisors are unreachable. Based on
> pcap traces we found that the bridge was broadcasting the ARP request out
> onto the network. However some NICs have an inbuilt switch which on occasions
> were broadcasting the VMs ARP request back through the physical NIC on the
> Hypervisor. This resulted in the bridge changing ports and incorrectly 
> learning
> that the VMs mac address was external. As a result the ARP reply was directed
> back onto the external network and VM never updated it's ARP cache. This patch
> will notify the bridge command, after a fdb has been updated to identify such
> port toggling.
> 
> Signed-off-by: Jon Maxwell 

Applied, thanks.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH net] bridge: notify user space after fdb update

2014-06-01 Thread David Miller
From: Jon Maxwell jmaxwel...@gmail.com
Date: Thu, 29 May 2014 17:27:16 +1000

 There has been a number incidents recently where customers running KVM have
 reported that VM hosts on different Hypervisors are unreachable. Based on
 pcap traces we found that the bridge was broadcasting the ARP request out
 onto the network. However some NICs have an inbuilt switch which on occasions
 were broadcasting the VMs ARP request back through the physical NIC on the
 Hypervisor. This resulted in the bridge changing ports and incorrectly 
 learning
 that the VMs mac address was external. As a result the ARP reply was directed
 back onto the external network and VM never updated it's ARP cache. This patch
 will notify the bridge command, after a fdb has been updated to identify such
 port toggling.
 
 Signed-off-by: Jon Maxwell jmaxwel...@gmail.com

Applied, thanks.
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH net] bridge: notify user space after fdb update

2014-05-30 Thread Stephen Hemminger
On Thu, 29 May 2014 17:27:16 +1000
Jon Maxwell  wrote:

> There has been a number incidents recently where customers running KVM have
> reported that VM hosts on different Hypervisors are unreachable. Based on
> pcap traces we found that the bridge was broadcasting the ARP request out
> onto the network. However some NICs have an inbuilt switch which on occasions
> were broadcasting the VMs ARP request back through the physical NIC on the
> Hypervisor. This resulted in the bridge changing ports and incorrectly 
> learning
> that the VMs mac address was external. As a result the ARP reply was directed
> back onto the external network and VM never updated it's ARP cache. This patch
> will notify the bridge command, after a fdb has been updated to identify such
> port toggling.
> 
> Signed-off-by: Jon Maxwell 

Acked-by: Stephen Hemminger 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH net] bridge: notify user space after fdb update

2014-05-30 Thread Stephen Hemminger
On Thu, 29 May 2014 17:27:16 +1000
Jon Maxwell jmaxwel...@gmail.com wrote:

 There has been a number incidents recently where customers running KVM have
 reported that VM hosts on different Hypervisors are unreachable. Based on
 pcap traces we found that the bridge was broadcasting the ARP request out
 onto the network. However some NICs have an inbuilt switch which on occasions
 were broadcasting the VMs ARP request back through the physical NIC on the
 Hypervisor. This resulted in the bridge changing ports and incorrectly 
 learning
 that the VMs mac address was external. As a result the ARP reply was directed
 back onto the external network and VM never updated it's ARP cache. This patch
 will notify the bridge command, after a fdb has been updated to identify such
 port toggling.
 
 Signed-off-by: Jon Maxwell jmaxwel...@gmail.com

Acked-by: Stephen Hemminger step...@networkplumber.org
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH net] bridge: notify user space after fdb update

2014-05-29 Thread Toshiaki Makita
(2014/05/29 16:27), Jon Maxwell wrote:
> There has been a number incidents recently where customers running KVM have
> reported that VM hosts on different Hypervisors are unreachable. Based on
> pcap traces we found that the bridge was broadcasting the ARP request out
> onto the network. However some NICs have an inbuilt switch which on occasions
> were broadcasting the VMs ARP request back through the physical NIC on the
> Hypervisor. This resulted in the bridge changing ports and incorrectly 
> learning
> that the VMs mac address was external. As a result the ARP reply was directed
> back onto the external network and VM never updated it's ARP cache. This patch
> will notify the bridge command, after a fdb has been updated to identify such
> port toggling.
> 
> Signed-off-by: Jon Maxwell 

Acked-by: Toshiaki Makita 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH net] bridge: notify user space after fdb update

2014-05-29 Thread Jiri Pirko
Thu, May 29, 2014 at 09:27:16AM CEST, jmaxwel...@gmail.com wrote:
>There has been a number incidents recently where customers running KVM have
>reported that VM hosts on different Hypervisors are unreachable. Based on
>pcap traces we found that the bridge was broadcasting the ARP request out
>onto the network. However some NICs have an inbuilt switch which on occasions
>were broadcasting the VMs ARP request back through the physical NIC on the
>Hypervisor. This resulted in the bridge changing ports and incorrectly learning
>that the VMs mac address was external. As a result the ARP reply was directed
>back onto the external network and VM never updated it's ARP cache. This patch
>will notify the bridge command, after a fdb has been updated to identify such
>port toggling.
>
>Signed-off-by: Jon Maxwell 

Reviewed-by: Jiri Pirko 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH net] bridge: notify user space after fdb update

2014-05-29 Thread Jon Maxwell
There has been a number incidents recently where customers running KVM have
reported that VM hosts on different Hypervisors are unreachable. Based on
pcap traces we found that the bridge was broadcasting the ARP request out
onto the network. However some NICs have an inbuilt switch which on occasions
were broadcasting the VMs ARP request back through the physical NIC on the
Hypervisor. This resulted in the bridge changing ports and incorrectly learning
that the VMs mac address was external. As a result the ARP reply was directed
back onto the external network and VM never updated it's ARP cache. This patch
will notify the bridge command, after a fdb has been updated to identify such
port toggling.

Signed-off-by: Jon Maxwell 
---
 net/bridge/br_fdb.c | 8 +++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
index 9203d5a..474d36f 100644
--- a/net/bridge/br_fdb.c
+++ b/net/bridge/br_fdb.c
@@ -487,6 +487,7 @@ void br_fdb_update(struct net_bridge *br, struct 
net_bridge_port *source,
 {
struct hlist_head *head = >hash[br_mac_hash(addr, vid)];
struct net_bridge_fdb_entry *fdb;
+   bool fdb_modified = false;
 
/* some users want to always flood. */
if (hold_time(br) == 0)
@@ -507,10 +508,15 @@ void br_fdb_update(struct net_bridge *br, struct 
net_bridge_port *source,
source->dev->name);
} else {
/* fastpath: update of existing entry */
-   fdb->dst = source;
+   if (unlikely(source != fdb->dst)) {
+   fdb->dst = source;
+   fdb_modified = true;
+   }
fdb->updated = jiffies;
if (unlikely(added_by_user))
fdb->added_by_user = 1;
+   if (unlikely(fdb_modified))
+   fdb_notify(br, fdb, RTM_NEWNEIGH);
}
} else {
spin_lock(>hash_lock);
-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH net] bridge: notify user space after fdb update

2014-05-29 Thread Jon Maxwell
There has been a number incidents recently where customers running KVM have
reported that VM hosts on different Hypervisors are unreachable. Based on
pcap traces we found that the bridge was broadcasting the ARP request out
onto the network. However some NICs have an inbuilt switch which on occasions
were broadcasting the VMs ARP request back through the physical NIC on the
Hypervisor. This resulted in the bridge changing ports and incorrectly learning
that the VMs mac address was external. As a result the ARP reply was directed
back onto the external network and VM never updated it's ARP cache. This patch
will notify the bridge command, after a fdb has been updated to identify such
port toggling.

Signed-off-by: Jon Maxwell jmaxwel...@gmail.com
---
 net/bridge/br_fdb.c | 8 +++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
index 9203d5a..474d36f 100644
--- a/net/bridge/br_fdb.c
+++ b/net/bridge/br_fdb.c
@@ -487,6 +487,7 @@ void br_fdb_update(struct net_bridge *br, struct 
net_bridge_port *source,
 {
struct hlist_head *head = br-hash[br_mac_hash(addr, vid)];
struct net_bridge_fdb_entry *fdb;
+   bool fdb_modified = false;
 
/* some users want to always flood. */
if (hold_time(br) == 0)
@@ -507,10 +508,15 @@ void br_fdb_update(struct net_bridge *br, struct 
net_bridge_port *source,
source-dev-name);
} else {
/* fastpath: update of existing entry */
-   fdb-dst = source;
+   if (unlikely(source != fdb-dst)) {
+   fdb-dst = source;
+   fdb_modified = true;
+   }
fdb-updated = jiffies;
if (unlikely(added_by_user))
fdb-added_by_user = 1;
+   if (unlikely(fdb_modified))
+   fdb_notify(br, fdb, RTM_NEWNEIGH);
}
} else {
spin_lock(br-hash_lock);
-- 
1.8.3.1

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH net] bridge: notify user space after fdb update

2014-05-29 Thread Jiri Pirko
Thu, May 29, 2014 at 09:27:16AM CEST, jmaxwel...@gmail.com wrote:
There has been a number incidents recently where customers running KVM have
reported that VM hosts on different Hypervisors are unreachable. Based on
pcap traces we found that the bridge was broadcasting the ARP request out
onto the network. However some NICs have an inbuilt switch which on occasions
were broadcasting the VMs ARP request back through the physical NIC on the
Hypervisor. This resulted in the bridge changing ports and incorrectly learning
that the VMs mac address was external. As a result the ARP reply was directed
back onto the external network and VM never updated it's ARP cache. This patch
will notify the bridge command, after a fdb has been updated to identify such
port toggling.

Signed-off-by: Jon Maxwell jmaxwel...@gmail.com

Reviewed-by: Jiri Pirko j...@resnulli.us

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH net] bridge: notify user space after fdb update

2014-05-29 Thread Toshiaki Makita
(2014/05/29 16:27), Jon Maxwell wrote:
 There has been a number incidents recently where customers running KVM have
 reported that VM hosts on different Hypervisors are unreachable. Based on
 pcap traces we found that the bridge was broadcasting the ARP request out
 onto the network. However some NICs have an inbuilt switch which on occasions
 were broadcasting the VMs ARP request back through the physical NIC on the
 Hypervisor. This resulted in the bridge changing ports and incorrectly 
 learning
 that the VMs mac address was external. As a result the ARP reply was directed
 back onto the external network and VM never updated it's ARP cache. This patch
 will notify the bridge command, after a fdb has been updated to identify such
 port toggling.
 
 Signed-off-by: Jon Maxwell jmaxwel...@gmail.com

Acked-by: Toshiaki Makita makita.toshi...@lab.ntt.co.jp
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH net] bridge: notify user space after fdb update

2014-05-28 Thread Vlad Yasevich
On 05/27/2014 06:45 PM, Jon Maxwell wrote:
> There has been a number incidents recently where customers running KVM have
> reported that VM hosts on different Hypervisors are unreachable. Based on
> pcap traces we found that the bridge was broadcasting the ARP request out
> onto the network. However some NICs have an inbuilt switch which on occasions
> were broadcasting the VMs ARP request back through the physical NIC on the
> Hypervisor. This resulted in the bridge changing ports and incorrectly 
> learning
> that the VMs mac address was external. As a result the ARP reply was directed
> back onto the external network and VM never updated it's ARP cache. This patch
> will notify the bridge command, after a fdb has been updated to identify such
> port toggling.
> 
> Signed-off-by: Jon Maxwell 
> ---
>  net/bridge/br_fdb.c | 8 +++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
> index 9203d5a..f3ee2da 100644
> --- a/net/bridge/br_fdb.c
> +++ b/net/bridge/br_fdb.c
> @@ -487,6 +487,7 @@ void br_fdb_update(struct net_bridge *br, struct 
> net_bridge_port *source,
>  {
>   struct hlist_head *head = >hash[br_mac_hash(addr, vid)];
>   struct net_bridge_fdb_entry *fdb;
> + bool fdb_modified = 0;
>  
>   /* some users want to always flood. */
>   if (hold_time(br) == 0)
> @@ -507,10 +508,15 @@ void br_fdb_update(struct net_bridge *br, struct 
> net_bridge_port *source,
>   source->dev->name);
>   } else {
>   /* fastpath: update of existing entry */
> - fdb->dst = source;
> + if (unlikely(source != fdb->dst)) {
> + fdb->dst = source;
> + fdb_modified = 1;
> + }

This looks over-indented.

-vlad

>   fdb->updated = jiffies;
>   if (unlikely(added_by_user))
>   fdb->added_by_user = 1;
> + if (unlikely(fdb_modified))
> + fdb_notify(br, fdb, RTM_NEWNEIGH);
>   }
>   } else {
>   spin_lock(>hash_lock);
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH net] bridge: notify user space after fdb update

2014-05-28 Thread Sergei Shtylyov

Hello.

On 05/28/2014 02:45 AM, Jon Maxwell wrote:


There has been a number incidents recently where customers running KVM have
reported that VM hosts on different Hypervisors are unreachable. Based on
pcap traces we found that the bridge was broadcasting the ARP request out
onto the network. However some NICs have an inbuilt switch which on occasions
were broadcasting the VMs ARP request back through the physical NIC on the
Hypervisor. This resulted in the bridge changing ports and incorrectly learning
that the VMs mac address was external. As a result the ARP reply was directed
back onto the external network and VM never updated it's ARP cache. This patch
will notify the bridge command, after a fdb has been updated to identify such
port toggling.



Signed-off-by: Jon Maxwell 
---
  net/bridge/br_fdb.c | 8 +++-
  1 file changed, 7 insertions(+), 1 deletion(-)



diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
index 9203d5a..f3ee2da 100644
--- a/net/bridge/br_fdb.c
+++ b/net/bridge/br_fdb.c
@@ -487,6 +487,7 @@ void br_fdb_update(struct net_bridge *br, struct 
net_bridge_port *source,
  {
struct hlist_head *head = >hash[br_mac_hash(addr, vid)];
struct net_bridge_fdb_entry *fdb;
+   bool fdb_modified = 0;


   s/0/false/.



/* some users want to always flood. */
if (hold_time(br) == 0)
@@ -507,10 +508,15 @@ void br_fdb_update(struct net_bridge *br, struct 
net_bridge_port *source,
source->dev->name);
} else {
/* fastpath: update of existing entry */
-   fdb->dst = source;
+   if (unlikely(source != fdb->dst)) {
+   fdb->dst = source;
+   fdb_modified = 1;


  s/1/true/.


+   }
fdb->updated = jiffies;
if (unlikely(added_by_user))
fdb->added_by_user = 1;
+   if (unlikely(fdb_modified))
+   fdb_notify(br, fdb, RTM_NEWNEIGH);
}
} else {
spin_lock(>hash_lock);


WBR, Sergei


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH net] bridge: notify user space after fdb update

2014-05-28 Thread Sergei Shtylyov

Hello.

On 05/28/2014 02:45 AM, Jon Maxwell wrote:


There has been a number incidents recently where customers running KVM have
reported that VM hosts on different Hypervisors are unreachable. Based on
pcap traces we found that the bridge was broadcasting the ARP request out
onto the network. However some NICs have an inbuilt switch which on occasions
were broadcasting the VMs ARP request back through the physical NIC on the
Hypervisor. This resulted in the bridge changing ports and incorrectly learning
that the VMs mac address was external. As a result the ARP reply was directed
back onto the external network and VM never updated it's ARP cache. This patch
will notify the bridge command, after a fdb has been updated to identify such
port toggling.



Signed-off-by: Jon Maxwell jmaxwel...@gmail.com
---
  net/bridge/br_fdb.c | 8 +++-
  1 file changed, 7 insertions(+), 1 deletion(-)



diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
index 9203d5a..f3ee2da 100644
--- a/net/bridge/br_fdb.c
+++ b/net/bridge/br_fdb.c
@@ -487,6 +487,7 @@ void br_fdb_update(struct net_bridge *br, struct 
net_bridge_port *source,
  {
struct hlist_head *head = br-hash[br_mac_hash(addr, vid)];
struct net_bridge_fdb_entry *fdb;
+   bool fdb_modified = 0;


   s/0/false/.



/* some users want to always flood. */
if (hold_time(br) == 0)
@@ -507,10 +508,15 @@ void br_fdb_update(struct net_bridge *br, struct 
net_bridge_port *source,
source-dev-name);
} else {
/* fastpath: update of existing entry */
-   fdb-dst = source;
+   if (unlikely(source != fdb-dst)) {
+   fdb-dst = source;
+   fdb_modified = 1;


  s/1/true/.


+   }
fdb-updated = jiffies;
if (unlikely(added_by_user))
fdb-added_by_user = 1;
+   if (unlikely(fdb_modified))
+   fdb_notify(br, fdb, RTM_NEWNEIGH);
}
} else {
spin_lock(br-hash_lock);


WBR, Sergei


--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH net] bridge: notify user space after fdb update

2014-05-28 Thread Vlad Yasevich
On 05/27/2014 06:45 PM, Jon Maxwell wrote:
 There has been a number incidents recently where customers running KVM have
 reported that VM hosts on different Hypervisors are unreachable. Based on
 pcap traces we found that the bridge was broadcasting the ARP request out
 onto the network. However some NICs have an inbuilt switch which on occasions
 were broadcasting the VMs ARP request back through the physical NIC on the
 Hypervisor. This resulted in the bridge changing ports and incorrectly 
 learning
 that the VMs mac address was external. As a result the ARP reply was directed
 back onto the external network and VM never updated it's ARP cache. This patch
 will notify the bridge command, after a fdb has been updated to identify such
 port toggling.
 
 Signed-off-by: Jon Maxwell jmaxwel...@gmail.com
 ---
  net/bridge/br_fdb.c | 8 +++-
  1 file changed, 7 insertions(+), 1 deletion(-)
 
 diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
 index 9203d5a..f3ee2da 100644
 --- a/net/bridge/br_fdb.c
 +++ b/net/bridge/br_fdb.c
 @@ -487,6 +487,7 @@ void br_fdb_update(struct net_bridge *br, struct 
 net_bridge_port *source,
  {
   struct hlist_head *head = br-hash[br_mac_hash(addr, vid)];
   struct net_bridge_fdb_entry *fdb;
 + bool fdb_modified = 0;
  
   /* some users want to always flood. */
   if (hold_time(br) == 0)
 @@ -507,10 +508,15 @@ void br_fdb_update(struct net_bridge *br, struct 
 net_bridge_port *source,
   source-dev-name);
   } else {
   /* fastpath: update of existing entry */
 - fdb-dst = source;
 + if (unlikely(source != fdb-dst)) {
 + fdb-dst = source;
 + fdb_modified = 1;
 + }

This looks over-indented.

-vlad

   fdb-updated = jiffies;
   if (unlikely(added_by_user))
   fdb-added_by_user = 1;
 + if (unlikely(fdb_modified))
 + fdb_notify(br, fdb, RTM_NEWNEIGH);
   }
   } else {
   spin_lock(br-hash_lock);
 

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH net] bridge: notify user space after fdb update

2014-05-27 Thread Jon Maxwell
There has been a number incidents recently where customers running KVM have
reported that VM hosts on different Hypervisors are unreachable. Based on
pcap traces we found that the bridge was broadcasting the ARP request out
onto the network. However some NICs have an inbuilt switch which on occasions
were broadcasting the VMs ARP request back through the physical NIC on the
Hypervisor. This resulted in the bridge changing ports and incorrectly learning
that the VMs mac address was external. As a result the ARP reply was directed
back onto the external network and VM never updated it's ARP cache. This patch
will notify the bridge command, after a fdb has been updated to identify such
port toggling.

Signed-off-by: Jon Maxwell 
---
 net/bridge/br_fdb.c | 8 +++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
index 9203d5a..f3ee2da 100644
--- a/net/bridge/br_fdb.c
+++ b/net/bridge/br_fdb.c
@@ -487,6 +487,7 @@ void br_fdb_update(struct net_bridge *br, struct 
net_bridge_port *source,
 {
struct hlist_head *head = >hash[br_mac_hash(addr, vid)];
struct net_bridge_fdb_entry *fdb;
+   bool fdb_modified = 0;
 
/* some users want to always flood. */
if (hold_time(br) == 0)
@@ -507,10 +508,15 @@ void br_fdb_update(struct net_bridge *br, struct 
net_bridge_port *source,
source->dev->name);
} else {
/* fastpath: update of existing entry */
-   fdb->dst = source;
+   if (unlikely(source != fdb->dst)) {
+   fdb->dst = source;
+   fdb_modified = 1;
+   }
fdb->updated = jiffies;
if (unlikely(added_by_user))
fdb->added_by_user = 1;
+   if (unlikely(fdb_modified))
+   fdb_notify(br, fdb, RTM_NEWNEIGH);
}
} else {
spin_lock(>hash_lock);
-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH net] bridge: notify user space after fdb update

2014-05-27 Thread Jon Maxwell
There has been a number incidents recently where customers running KVM have
reported that VM hosts on different Hypervisors are unreachable. Based on
pcap traces we found that the bridge was broadcasting the ARP request out
onto the network. However some NICs have an inbuilt switch which on occasions
were broadcasting the VMs ARP request back through the physical NIC on the
Hypervisor. This resulted in the bridge changing ports and incorrectly learning
that the VMs mac address was external. As a result the ARP reply was directed
back onto the external network and VM never updated it's ARP cache. This patch
will notify the bridge command, after a fdb has been updated to identify such
port toggling.

Signed-off-by: Jon Maxwell jmaxwel...@gmail.com
---
 net/bridge/br_fdb.c | 8 +++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
index 9203d5a..f3ee2da 100644
--- a/net/bridge/br_fdb.c
+++ b/net/bridge/br_fdb.c
@@ -487,6 +487,7 @@ void br_fdb_update(struct net_bridge *br, struct 
net_bridge_port *source,
 {
struct hlist_head *head = br-hash[br_mac_hash(addr, vid)];
struct net_bridge_fdb_entry *fdb;
+   bool fdb_modified = 0;
 
/* some users want to always flood. */
if (hold_time(br) == 0)
@@ -507,10 +508,15 @@ void br_fdb_update(struct net_bridge *br, struct 
net_bridge_port *source,
source-dev-name);
} else {
/* fastpath: update of existing entry */
-   fdb-dst = source;
+   if (unlikely(source != fdb-dst)) {
+   fdb-dst = source;
+   fdb_modified = 1;
+   }
fdb-updated = jiffies;
if (unlikely(added_by_user))
fdb-added_by_user = 1;
+   if (unlikely(fdb_modified))
+   fdb_notify(br, fdb, RTM_NEWNEIGH);
}
} else {
spin_lock(br-hash_lock);
-- 
1.8.3.1

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/