diff options
author | Elad Raz <eladr@mellanox.com> | 2016-01-10 21:06:22 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-01-10 16:50:20 -0500 |
commit | 4d41e12593a9a6c4aaf113d44c8c619067b2b0aa (patch) | |
tree | a7d6f84c3a6ded70c97309452dbf992c8995deb1 | |
parent | c9c99311b55d4765cae35c652cb637747cc637b7 (diff) | |
download | op-kernel-dev-4d41e12593a9a6c4aaf113d44c8c619067b2b0aa.zip op-kernel-dev-4d41e12593a9a6c4aaf113d44c8c619067b2b0aa.tar.gz |
switchdev: Adding MDB entry offload
Define HW multicast entry: MAC and VID.
Using a MAC address simplifies support for both IPV4 and IPv6.
Signed-off-by: Elad Raz <eladr@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | include/net/switchdev.h | 11 | ||||
-rw-r--r-- | net/switchdev/switchdev.c | 2 |
2 files changed, 13 insertions, 0 deletions
diff --git a/include/net/switchdev.h b/include/net/switchdev.h index 603ae2f..d451122 100644 --- a/include/net/switchdev.h +++ b/include/net/switchdev.h @@ -68,6 +68,7 @@ enum switchdev_obj_id { SWITCHDEV_OBJ_ID_PORT_VLAN, SWITCHDEV_OBJ_ID_IPV4_FIB, SWITCHDEV_OBJ_ID_PORT_FDB, + SWITCHDEV_OBJ_ID_PORT_MDB, }; struct switchdev_obj { @@ -113,6 +114,16 @@ struct switchdev_obj_port_fdb { #define SWITCHDEV_OBJ_PORT_FDB(obj) \ container_of(obj, struct switchdev_obj_port_fdb, obj) +/* SWITCHDEV_OBJ_ID_PORT_MDB */ +struct switchdev_obj_port_mdb { + struct switchdev_obj obj; + unsigned char addr[ETH_ALEN]; + u16 vid; +}; + +#define SWITCHDEV_OBJ_PORT_MDB(obj) \ + container_of(obj, struct switchdev_obj_port_mdb, obj) + void switchdev_trans_item_enqueue(struct switchdev_trans *trans, void *data, void (*destructor)(void const *), struct switchdev_trans_item *tritem); diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c index df790d3..ebc661d 100644 --- a/net/switchdev/switchdev.c +++ b/net/switchdev/switchdev.c @@ -345,6 +345,8 @@ static size_t switchdev_obj_size(const struct switchdev_obj *obj) return sizeof(struct switchdev_obj_ipv4_fib); case SWITCHDEV_OBJ_ID_PORT_FDB: return sizeof(struct switchdev_obj_port_fdb); + case SWITCHDEV_OBJ_ID_PORT_MDB: + return sizeof(struct switchdev_obj_port_mdb); default: BUG(); } |