aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Poulain <loic.poulain@linaro.org>2021-06-21 09:04:03 +0200
committerLoic Poulain <loic.poulain@linaro.org>2021-06-21 09:04:03 +0200
commit6308d49790f10615bd33a38d56bc7f101646558f (patch)
treed77ab2c1f9800fca378c524bb85c69080726f8b0
parentadc2e56ebe6377f5c032d96aee0feac30a640453 (diff)
rmnet: internal registeringwwan_rmnet
Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
-rw-r--r--drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c52
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)
{