Commit 32d098bb authored by Yevhen Orlov's avatar Yevhen Orlov Committed by Jakub Kicinski

net: marvell: prestera: Refactor router functions

* Reverse xmas tree variables order
* User friendly messages on error paths
* Refactor __prestera_inetaddr_event to use early return
Signed-off-by: default avatarYevhen Orlov <yevhen.orlov@plvision.eu>
Link: https://lore.kernel.org/r/20220111011051.4941-1-yevhen.orlov@plvision.euSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 6a1ba875
...@@ -1831,8 +1831,8 @@ static int prestera_iface_to_msg(struct prestera_iface *iface, ...@@ -1831,8 +1831,8 @@ static int prestera_iface_to_msg(struct prestera_iface *iface,
int prestera_hw_rif_create(struct prestera_switch *sw, int prestera_hw_rif_create(struct prestera_switch *sw,
struct prestera_iface *iif, u8 *mac, u16 *rif_id) struct prestera_iface *iif, u8 *mac, u16 *rif_id)
{ {
struct prestera_msg_rif_req req;
struct prestera_msg_rif_resp resp; struct prestera_msg_rif_resp resp;
struct prestera_msg_rif_req req;
int err; int err;
memcpy(req.mac, mac, ETH_ALEN); memcpy(req.mac, mac, ETH_ALEN);
...@@ -1868,9 +1868,9 @@ int prestera_hw_rif_delete(struct prestera_switch *sw, u16 rif_id, ...@@ -1868,9 +1868,9 @@ int prestera_hw_rif_delete(struct prestera_switch *sw, u16 rif_id,
int prestera_hw_vr_create(struct prestera_switch *sw, u16 *vr_id) int prestera_hw_vr_create(struct prestera_switch *sw, u16 *vr_id)
{ {
int err;
struct prestera_msg_vr_resp resp; struct prestera_msg_vr_resp resp;
struct prestera_msg_vr_req req; struct prestera_msg_vr_req req;
int err;
err = prestera_cmd_ret(sw, PRESTERA_CMD_TYPE_ROUTER_VR_CREATE, err = prestera_cmd_ret(sw, PRESTERA_CMD_TYPE_ROUTER_VR_CREATE,
&req.cmd, sizeof(req), &resp.ret, sizeof(resp)); &req.cmd, sizeof(req), &resp.ret, sizeof(resp));
......
...@@ -25,10 +25,10 @@ static int __prestera_inetaddr_port_event(struct net_device *port_dev, ...@@ -25,10 +25,10 @@ static int __prestera_inetaddr_port_event(struct net_device *port_dev,
struct netlink_ext_ack *extack) struct netlink_ext_ack *extack)
{ {
struct prestera_port *port = netdev_priv(port_dev); struct prestera_port *port = netdev_priv(port_dev);
int err;
struct prestera_rif_entry *re;
struct prestera_rif_entry_key re_key = {}; struct prestera_rif_entry_key re_key = {};
struct prestera_rif_entry *re;
u32 kern_tb_id; u32 kern_tb_id;
int err;
err = prestera_is_valid_mac_addr(port, port_dev->dev_addr); err = prestera_is_valid_mac_addr(port, port_dev->dev_addr);
if (err) { if (err) {
...@@ -45,21 +45,21 @@ static int __prestera_inetaddr_port_event(struct net_device *port_dev, ...@@ -45,21 +45,21 @@ static int __prestera_inetaddr_port_event(struct net_device *port_dev,
switch (event) { switch (event) {
case NETDEV_UP: case NETDEV_UP:
if (re) { if (re) {
NL_SET_ERR_MSG_MOD(extack, "rif_entry already exist"); NL_SET_ERR_MSG_MOD(extack, "RIF already exist");
return -EEXIST; return -EEXIST;
} }
re = prestera_rif_entry_create(port->sw, &re_key, re = prestera_rif_entry_create(port->sw, &re_key,
prestera_fix_tb_id(kern_tb_id), prestera_fix_tb_id(kern_tb_id),
port_dev->dev_addr); port_dev->dev_addr);
if (!re) { if (!re) {
NL_SET_ERR_MSG_MOD(extack, "Can't create rif_entry"); NL_SET_ERR_MSG_MOD(extack, "Can't create RIF");
return -EINVAL; return -EINVAL;
} }
dev_hold(port_dev); dev_hold(port_dev);
break; break;
case NETDEV_DOWN: case NETDEV_DOWN:
if (!re) { if (!re) {
NL_SET_ERR_MSG_MOD(extack, "rif_entry not exist"); NL_SET_ERR_MSG_MOD(extack, "Can't find RIF");
return -EEXIST; return -EEXIST;
} }
prestera_rif_entry_destroy(port->sw, re); prestera_rif_entry_destroy(port->sw, re);
...@@ -75,11 +75,11 @@ static int __prestera_inetaddr_event(struct prestera_switch *sw, ...@@ -75,11 +75,11 @@ static int __prestera_inetaddr_event(struct prestera_switch *sw,
unsigned long event, unsigned long event,
struct netlink_ext_ack *extack) struct netlink_ext_ack *extack)
{ {
if (prestera_netdev_check(dev) && !netif_is_bridge_port(dev) && if (!prestera_netdev_check(dev) || netif_is_bridge_port(dev) ||
!netif_is_lag_port(dev) && !netif_is_ovs_port(dev)) netif_is_lag_port(dev) || netif_is_ovs_port(dev))
return __prestera_inetaddr_port_event(dev, event, extack);
return 0; return 0;
return __prestera_inetaddr_port_event(dev, event, extack);
} }
static int __prestera_inetaddr_cb(struct notifier_block *nb, static int __prestera_inetaddr_cb(struct notifier_block *nb,
...@@ -126,6 +126,8 @@ static int __prestera_inetaddr_valid_cb(struct notifier_block *nb, ...@@ -126,6 +126,8 @@ static int __prestera_inetaddr_valid_cb(struct notifier_block *nb,
goto out; goto out;
if (ipv4_is_multicast(ivi->ivi_addr)) { if (ipv4_is_multicast(ivi->ivi_addr)) {
NL_SET_ERR_MSG_MOD(ivi->extack,
"Multicast addr on RIF is not supported");
err = -EINVAL; err = -EINVAL;
goto out; goto out;
} }
......
...@@ -123,7 +123,7 @@ __prestera_rif_entry_key_copy(const struct prestera_rif_entry_key *in, ...@@ -123,7 +123,7 @@ __prestera_rif_entry_key_copy(const struct prestera_rif_entry_key *in,
out->iface.vlan_id = in->iface.vlan_id; out->iface.vlan_id = in->iface.vlan_id;
break; break;
default: default:
pr_err("Unsupported iface type"); WARN(1, "Unsupported iface type");
return -EINVAL; return -EINVAL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment