Module Name: src Committed By: martin Date: Wed Nov 22 14:30:24 UTC 2017
Modified Files: src/sys/net [netbsd-8]: if_vlan.c Log Message: Pull up following revision(s) (requested by msaitoh in ticket #368): sys/net/if_vlan.c: revision 1.101 sys/net/if_vlan.c: revision 1.102 Check if VLAN ID isn't duplicated on a same parent interface and return EEXIST if it failed. Remove accidentally added code (for VLAN hardware filter). To generate a diff of this commit: cvs rdiff -u -r1.97.2.6 -r1.97.2.7 src/sys/net/if_vlan.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/net/if_vlan.c diff -u src/sys/net/if_vlan.c:1.97.2.6 src/sys/net/if_vlan.c:1.97.2.7 --- src/sys/net/if_vlan.c:1.97.2.6 Wed Nov 8 22:20:59 2017 +++ src/sys/net/if_vlan.c Wed Nov 22 14:30:23 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: if_vlan.c,v 1.97.2.6 2017/11/08 22:20:59 snj Exp $ */ +/* $NetBSD: if_vlan.c,v 1.97.2.7 2017/11/22 14:30:23 martin Exp $ */ /*- * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc. @@ -78,7 +78,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_vlan.c,v 1.97.2.6 2017/11/08 22:20:59 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_vlan.c,v 1.97.2.7 2017/11/22 14:30:23 martin Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -379,10 +379,12 @@ vlan_config(struct ifvlan *ifv, struct i struct ifnet *ifp = &ifv->ifv_if; struct ifvlan_linkmib *nmib = NULL; struct ifvlan_linkmib *omib = NULL; + struct ifvlan_linkmib *checkmib = NULL; struct psref_target *nmib_psref = NULL; int error = 0; int idx; bool omib_cleanup = false; + struct psref psref; nmib = kmem_alloc(sizeof(*nmib), KM_SLEEP); @@ -394,6 +396,14 @@ vlan_config(struct ifvlan *ifv, struct i goto done; } + /* Duplicate check */ + checkmib = vlan_lookup_tag_psref(p, tag, &psref); + if (checkmib != NULL) { + vlan_putref_linkmib(checkmib, &psref); + error = EEXIST; + goto done; + } + *nmib = *omib; nmib_psref = &nmib->ifvm_psref;