diff options
author | Loic Poulain <loic.poulain@linaro.org> | 2021-06-21 09:04:03 +0200 |
---|---|---|
committer | Loic Poulain <loic.poulain@linaro.org> | 2021-06-21 09:04:03 +0200 |
commit | 6308d49790f10615bd33a38d56bc7f101646558f (patch) | |
tree | d77ab2c1f9800fca378c524bb85c69080726f8b0 | |
parent | adc2e56ebe6377f5c032d96aee0feac30a640453 (diff) |
rmnet: internal registeringwwan_rmnet
Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
-rw-r--r-- | drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c | 52 |
1 files changed, 35 insertions, 17 deletions
diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c index 27b1663c476e7..e55260f734aea 100644 --- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c +++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c @@ -112,28 +112,13 @@ static void rmnet_unregister_bridge(struct rmnet_port *port) rmnet_unregister_real_device(bridge_dev); } -static int rmnet_newlink(struct net *src_net, struct net_device *dev, - struct nlattr *tb[], struct nlattr *data[], - struct netlink_ext_ack *extack) +static int __rmnet_newlink(struct net_device *dev, struct net_device *real_dev, + u16 mux_id, u32 data_format, struct netlink_ext_ack *extack) { - u32 data_format = RMNET_FLAGS_INGRESS_DEAGGREGATION; - struct net_device *real_dev; int mode = RMNET_EPMODE_VND; struct rmnet_endpoint *ep; struct rmnet_port *port; int err = 0; - u16 mux_id; - - if (!tb[IFLA_LINK]) { - NL_SET_ERR_MSG_MOD(extack, "link not specified"); - return -EINVAL; - } - - real_dev = __dev_get_by_index(src_net, nla_get_u32(tb[IFLA_LINK])); - if (!real_dev) { - NL_SET_ERR_MSG_MOD(extack, "link does not exist"); - return -ENODEV; - } ep = kzalloc(sizeof(*ep), GFP_KERNEL); if (!ep) @@ -181,6 +166,38 @@ err0: kfree(ep); return err; } +EXPORT_SYMBOL_GPL(__rmnet_newlink); + +static int rmnet_newlink(struct net *src_net, struct net_device *dev, + struct nlattr *tb[], struct nlattr *data[], + struct netlink_ext_ack *extack) +{ + u32 data_format = RMNET_FLAGS_INGRESS_DEAGGREGATION; + struct net_device *real_dev; + u16 mux_id; + + if (!tb[IFLA_LINK]) { + NL_SET_ERR_MSG_MOD(extack, "link not specified"); + return -EINVAL; + } + + real_dev = __dev_get_by_index(src_net, nla_get_u32(tb[IFLA_LINK])); + if (!real_dev) { + NL_SET_ERR_MSG_MOD(extack, "link does not exist"); + return -ENODEV; + } + + mux_id = nla_get_u16(data[IFLA_RMNET_MUX_ID]); + + if (data[IFLA_RMNET_FLAGS]) { + struct ifla_rmnet_flags *flags; + + flags = nla_data(data[IFLA_RMNET_FLAGS]); + data_format = flags->flags & flags->mask; + } + + return __rmnet_newlink(dev, real_dev, u16 mux_id, data_format, extack); +} static void rmnet_dellink(struct net_device *dev, struct list_head *head) { @@ -213,6 +230,7 @@ static void rmnet_dellink(struct net_device *dev, struct list_head *head) rmnet_unregister_real_device(real_dev); unregister_netdevice_queue(dev, head); } +EXPORT_SYMBOL_GPL(rmnet_dellink); static void rmnet_force_unassociate_device(struct net_device *real_dev) { |