|
@@ -301,6 +301,17 @@ int vlan_create ( struct net_device *trunk, unsigned int tag,
|
301
|
301
|
struct vlan_device *vlan;
|
302
|
302
|
int rc;
|
303
|
303
|
|
|
304
|
+ /* If VLAN already exists, just update the priority */
|
|
305
|
+ if ( ( netdev = vlan_find ( trunk, tag ) ) != NULL ) {
|
|
306
|
+ vlan = netdev->priv;
|
|
307
|
+ if ( priority != vlan->priority ) {
|
|
308
|
+ DBGC ( netdev, "VLAN %s priority changed from %d to "
|
|
309
|
+ "%d\n", netdev->name, vlan->priority, priority );
|
|
310
|
+ }
|
|
311
|
+ vlan->priority = priority;
|
|
312
|
+ return 0;
|
|
313
|
+ }
|
|
314
|
+
|
304
|
315
|
/* Sanity checks */
|
305
|
316
|
if ( trunk->ll_protocol->ll_addr_len != ETH_ALEN ) {
|
306
|
317
|
DBGC ( trunk, "VLAN %s cannot create VLAN for %s device\n",
|
|
@@ -320,11 +331,6 @@ int vlan_create ( struct net_device *trunk, unsigned int tag,
|
320
|
331
|
rc = -EINVAL;
|
321
|
332
|
goto err_sanity;
|
322
|
333
|
}
|
323
|
|
- if ( ( netdev = vlan_find ( trunk, tag ) ) != NULL ) {
|
324
|
|
- DBGC ( netdev, "VLAN %s already exists\n", netdev->name );
|
325
|
|
- rc = -EEXIST;
|
326
|
|
- goto err_sanity;
|
327
|
|
- }
|
328
|
334
|
|
329
|
335
|
/* Allocate and initialise structure */
|
330
|
336
|
netdev = alloc_etherdev ( sizeof ( *vlan ) );
|