@@ -47,15 +47,23 @@ static int rmnet_unregister_real_device(struct net_device *real_dev)
47
47
return 0 ;
48
48
}
49
49
50
- static int rmnet_register_real_device (struct net_device * real_dev )
50
+ static int rmnet_register_real_device (struct net_device * real_dev ,
51
+ struct netlink_ext_ack * extack )
51
52
{
52
53
struct rmnet_port * port ;
53
54
int rc , entry ;
54
55
55
56
ASSERT_RTNL ();
56
57
57
- if (rmnet_is_real_dev_registered (real_dev ))
58
+ if (rmnet_is_real_dev_registered (real_dev )) {
59
+ port = rmnet_get_port_rtnl (real_dev );
60
+ if (port -> rmnet_mode != RMNET_EPMODE_VND ) {
61
+ NL_SET_ERR_MSG_MOD (extack , "bridge device already exists" );
62
+ return - EINVAL ;
63
+ }
64
+
58
65
return 0 ;
66
+ }
59
67
60
68
port = kzalloc (sizeof (* port ), GFP_ATOMIC );
61
69
if (!port )
@@ -134,7 +142,7 @@ static int rmnet_newlink(struct net *src_net, struct net_device *dev,
134
142
135
143
mux_id = nla_get_u16 (data [IFLA_RMNET_MUX_ID ]);
136
144
137
- err = rmnet_register_real_device (real_dev );
145
+ err = rmnet_register_real_device (real_dev , extack );
138
146
if (err )
139
147
goto err0 ;
140
148
@@ -416,13 +424,10 @@ int rmnet_add_bridge(struct net_device *rmnet_dev,
416
424
if (port -> nr_rmnet_devs > 1 )
417
425
return - EINVAL ;
418
426
419
- if (port -> rmnet_mode != RMNET_EPMODE_VND )
420
- return - EINVAL ;
421
-
422
427
if (rmnet_is_real_dev_registered (slave_dev ))
423
428
return - EBUSY ;
424
429
425
- err = rmnet_register_real_device (slave_dev );
430
+ err = rmnet_register_real_device (slave_dev , extack );
426
431
if (err )
427
432
return - EBUSY ;
428
433
0 commit comments