Skip to content

Commit 23790ef

Browse files
Subash Abhinov Kasiviswanathandavem330
Subash Abhinov Kasiviswanathan
authored andcommitted
net: qualcomm: rmnet: Allow to configure flags for existing devices
Add an option to configure the mux id, aggregation and commad feature for existing rmnet devices. Implement the changelink netlink operation for this. Signed-off-by: Subash Abhinov Kasiviswanathan <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 6b8ecc2 commit 23790ef

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,45 @@ static int rmnet_rtnl_validate(struct nlattr *tb[], struct nlattr *data[],
320320
return 0;
321321
}
322322

323+
static int rmnet_changelink(struct net_device *dev, struct nlattr *tb[],
324+
struct nlattr *data[],
325+
struct netlink_ext_ack *extack)
326+
{
327+
struct rmnet_priv *priv = netdev_priv(dev);
328+
struct net_device *real_dev;
329+
struct rmnet_endpoint *ep;
330+
struct rmnet_port *port;
331+
u16 mux_id;
332+
333+
real_dev = __dev_get_by_index(dev_net(dev),
334+
nla_get_u32(tb[IFLA_LINK]));
335+
336+
if (!real_dev || !dev || !rmnet_is_real_dev_registered(real_dev))
337+
return -ENODEV;
338+
339+
port = rmnet_get_port_rtnl(real_dev);
340+
341+
if (data[IFLA_VLAN_ID]) {
342+
mux_id = nla_get_u16(data[IFLA_VLAN_ID]);
343+
ep = rmnet_get_endpoint(port, priv->mux_id);
344+
345+
hlist_del_init_rcu(&ep->hlnode);
346+
hlist_add_head_rcu(&ep->hlnode, &port->muxed_ep[mux_id]);
347+
348+
ep->mux_id = mux_id;
349+
priv->mux_id = mux_id;
350+
}
351+
352+
if (data[IFLA_VLAN_FLAGS]) {
353+
struct ifla_vlan_flags *flags;
354+
355+
flags = nla_data(data[IFLA_VLAN_FLAGS]);
356+
port->ingress_data_format = flags->flags & flags->mask;
357+
}
358+
359+
return 0;
360+
}
361+
323362
static size_t rmnet_get_size(const struct net_device *dev)
324363
{
325364
return nla_total_size(2) /* IFLA_VLAN_ID */ +
@@ -335,6 +374,7 @@ struct rtnl_link_ops rmnet_link_ops __read_mostly = {
335374
.newlink = rmnet_newlink,
336375
.dellink = rmnet_dellink,
337376
.get_size = rmnet_get_size,
377+
.changelink = rmnet_changelink,
338378
};
339379

340380
/* Needs either rcu_read_lock() or rtnl lock */

0 commit comments

Comments
 (0)