|
@@ -15,6 +15,7 @@
|
|
|
#include <linux/mutex.h>
|
|
|
#include <linux/notifier.h>
|
|
|
#include <linux/netdevice.h>
|
|
|
+#include <linux/etherdevice.h>
|
|
|
#include <linux/if_bridge.h>
|
|
|
#include <linux/list.h>
|
|
|
#include <linux/workqueue.h>
|
|
@@ -891,10 +892,10 @@ int switchdev_port_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
|
|
|
{
|
|
|
struct switchdev_obj_port_fdb fdb = {
|
|
|
.obj.id = SWITCHDEV_OBJ_ID_PORT_FDB,
|
|
|
- .addr = addr,
|
|
|
.vid = vid,
|
|
|
};
|
|
|
|
|
|
+ ether_addr_copy(fdb.addr, addr);
|
|
|
return switchdev_port_obj_add(dev, &fdb.obj);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(switchdev_port_fdb_add);
|
|
@@ -916,10 +917,10 @@ int switchdev_port_fdb_del(struct ndmsg *ndm, struct nlattr *tb[],
|
|
|
{
|
|
|
struct switchdev_obj_port_fdb fdb = {
|
|
|
.obj.id = SWITCHDEV_OBJ_ID_PORT_FDB,
|
|
|
- .addr = addr,
|
|
|
.vid = vid,
|
|
|
};
|
|
|
|
|
|
+ ether_addr_copy(fdb.addr, addr);
|
|
|
return switchdev_port_obj_del(dev, &fdb.obj);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(switchdev_port_fdb_del);
|
|
@@ -1081,7 +1082,6 @@ int switchdev_fib_ipv4_add(u32 dst, int dst_len, struct fib_info *fi,
|
|
|
.obj.id = SWITCHDEV_OBJ_ID_IPV4_FIB,
|
|
|
.dst = dst,
|
|
|
.dst_len = dst_len,
|
|
|
- .fi = fi,
|
|
|
.tos = tos,
|
|
|
.type = type,
|
|
|
.nlflags = nlflags,
|
|
@@ -1090,6 +1090,8 @@ int switchdev_fib_ipv4_add(u32 dst, int dst_len, struct fib_info *fi,
|
|
|
struct net_device *dev;
|
|
|
int err = 0;
|
|
|
|
|
|
+ memcpy(&ipv4_fib.fi, fi, sizeof(ipv4_fib.fi));
|
|
|
+
|
|
|
/* Don't offload route if using custom ip rules or if
|
|
|
* IPv4 FIB offloading has been disabled completely.
|
|
|
*/
|
|
@@ -1133,7 +1135,6 @@ int switchdev_fib_ipv4_del(u32 dst, int dst_len, struct fib_info *fi,
|
|
|
.obj.id = SWITCHDEV_OBJ_ID_IPV4_FIB,
|
|
|
.dst = dst,
|
|
|
.dst_len = dst_len,
|
|
|
- .fi = fi,
|
|
|
.tos = tos,
|
|
|
.type = type,
|
|
|
.nlflags = 0,
|
|
@@ -1142,6 +1143,8 @@ int switchdev_fib_ipv4_del(u32 dst, int dst_len, struct fib_info *fi,
|
|
|
struct net_device *dev;
|
|
|
int err = 0;
|
|
|
|
|
|
+ memcpy(&ipv4_fib.fi, fi, sizeof(ipv4_fib.fi));
|
|
|
+
|
|
|
if (!(fi->fib_flags & RTNH_F_OFFLOAD))
|
|
|
return 0;
|
|
|
|