summaryrefslogtreecommitdiffstats
path: root/sys/net/if_vlan.c
Commit message (Collapse)AuthorAgeFilesLines
* Avoid holding the VLAN_LOCK() over the parent interface SIOCGIFMEDIAemaste2010-03-211-2/+2
| | | | | | ioctl call, as it may sleep. Reviewed by: rwatson
* Add __FBSDID.yongari2010-02-211-2/+3
| | | | Reviewed by: sam
* Add TSO support on VLANs. Intentionally separated IFCAP_VLAN_HWTSOyongari2010-02-201-1/+16
| | | | | | | | from IFCAP_VLAN_HWTAGGING. I think some hardwares may be able to TSO over VLAN without VLAN hardware tagging. Driver changes and userland support will follow. Reviewed by: thompsa
* Do not hold the lock over if_setlladdr() as it calls into the interface driverthompsa2010-01-191-4/+9
| | | | init routine.
* Declare a new EVENTHANDLER called iflladdr_event which signals that the L2thompsa2010-01-181-0/+42
| | | | | | | | | | | | | address on an interface has changed. This lets stacked interfaces such as vlan(4) detect that their lower interface has changed and adjust things in order to keep working. Previously this situation broke at least vlan(4) and lagg(4) configurations. The EVENTHANDLER_INVOKE call was not placed within if_setlladdr() due to the risk of a loop. PR: kern/142927 Submitted by: Nikolay Denev
* Use stricter checking to match possible vlan clones by not allowing extrajhb2009-12-311-6/+8
| | | | | | | garbage characters around or within the tag. Reviewed by: brooks MFC after: 3 days
* The devices that supported EVFILT_NETDEV kqueue filters were removed inbrooks2009-12-311-3/+3
| | | | | | | | | | | | r195175. Remove all definitions, documentation, and usage. fifo_misc.c: Remove all kqueue tests as fifo_io.c performs all those that would have remained. Reviewed by: rwatson MFC after: 3 weeks X-MFC note: don't change vlan_link_state() function signature
* Change vlan interfaces to cope more usefully with the parent interface beingjhb2009-12-291-1/+6
| | | | | | | | | | | | | | renamed. Previously the vlan interfaces would lose their configuration as if the parent interface had been physically removed. Now vlan interfaces ignore rename events. - Add a new ifnet flag (IFF_RENAMING) that is set while an ifnet is being renamed. This flag can be checked in ifnet departure/arrival event handlers to treat rename events differently. - Change the ifnet departure event handler in the if_vlan(4) driver to ignore departure events due to a trunk interface being renamed. Reviewed by: brooks, rwatson MFC after: 1 week
* Compare pointer with NULL, not 0.emaste2009-09-091-1/+1
|
* Rework global locks for interface list and index management, correctingrwatson2009-08-231-2/+2
| | | | | | | | | | | | | | several critical bugs, including race conditions and lock order issues: Replace the single rwlock, ifnet_lock, with two locks, an rwlock and an sxlock. Either can be held to stablize the lists and indexes, but both are required to write. This allows the list to be held stable in both network interrupt contexts and sleepable user threads across sleeping memory allocations or device driver interactions. As before, writes to the interface list must occur from sleepable contexts. Reviewed by: bz, julian MFC after: 3 days
* Merge the remainder of kern_vimage.c and vimage.h into vnet.c andrwatson2009-08-011-1/+0
| | | | | | | | | | vnet.h, we now use jails (rather than vimages) as the abstraction for virtualization management, and what remained was specific to virtual network stacks. Minor cleanups are done in the process, and comments updated to reflect these changes. Reviewed by: bz Approved by: re (vimage blanket)
* Build on Jeff Roberson's linker-set based dynamic per-CPU allocatorrwatson2009-07-141-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (DPCPU), as suggested by Peter Wemm, and implement a new per-virtual network stack memory allocator. Modify vnet to use the allocator instead of monolithic global container structures (vinet, ...). This change solves many binary compatibility problems associated with VIMAGE, and restores ELF symbols for virtualized global variables. Each virtualized global variable exists as a "reference copy", and also once per virtual network stack. Virtualized global variables are tagged at compile-time, placing the in a special linker set, which is loaded into a contiguous region of kernel memory. Virtualized global variables in the base kernel are linked as normal, but those in modules are copied and relocated to a reserved portion of the kernel's vnet region with the help of a the kernel linker. Virtualized global variables exist in per-vnet memory set up when the network stack instance is created, and are initialized statically from the reference copy. Run-time access occurs via an accessor macro, which converts from the current vnet and requested symbol to a per-vnet address. When "options VIMAGE" is not compiled into the kernel, normal global ELF symbols will be used instead and indirection is avoided. This change restores static initialization for network stack global variables, restores support for non-global symbols and types, eliminates the need for many subsystem constructors, eliminates large per-subsystem structures that caused many binary compatibility issues both for monitoring applications (netstat) and kernel modules, removes the per-function INIT_VNET_*() macros throughout the stack, eliminates the need for vnet_symmap ksym(2) munging, and eliminates duplicate definitions of virtualized globals under VIMAGE_GLOBALS. Bump __FreeBSD_version and update UPDATING. Portions submitted by: bz Reviewed by: bz, zec Discussed with: gnn, jamie, jeff, jhb, julian, sam Suggested by: peter Approved by: re (kensmith)
* After cleaning up rt_tables from vnet.h and cleaning up opt_route.hbz2009-06-231-1/+0
| | | | | a lot of files no longer need route.h either. Garbage collect them. While here remove now unneeded vnet.h #includes as well.
* After r193232 rt_tables in vnet.h are no longer indirectly dependent onbz2009-06-081-1/+0
| | | | | | | | | the ROUTETABLES kernel option thus there is no need to include opt_route.h anymore in all consumers of vnet.h and no longer depend on it for module builds. Remove the hidden include in flowtable.h as well and leave the two explicit #includes in ip_input.c and ip_output.c.
* The vlan code has not required the miibus code since 6.0 whenjhb2009-04-171-1/+0
| | | | | | | if_link_state_change() was added and the vlan link-state hook was moved out of miibus and into net/if.c. MFC after: 1 month
* For all files including net/vnet.h directly include opt_route.h andbz2009-02-271-0/+2
| | | | | | | | | | | | | | net/route.h. Remove the hidden include of opt_route.h and net/route.h from net/vnet.h. We need to make sure that both opt_route.h and net/route.h are included before net/vnet.h because of the way MRT figures out the number of FIBs from the kernel option. If we do not, we end up with the default number of 1 when including net/vnet.h and array sizes are wrong. This does not change the list of files which depend on opt_route.h but we can identify them now more easily.
* o In case of the error do not forget to deallocate a cloned device unit.maxim2009-02-131-0/+1
| | | | | | PR: kern/131642 Submitted by: Dmitrij Tejblum MFC after: 1 week
* Remove unused ifaddr local variable in ioctl routine.rwatson2009-02-131-2/+0
| | | | MFC after: 3 days
* Rather than using hidden includes (with cicular dependencies),bz2008-12-021-0/+1
| | | | | | | | | | | directly include only the header files needed. This reduces the unneeded spamming of various headers into lots of files. For now, this leaves us with very few modules including vnet.h and thus needing to depend on opt_route.h. Reviewed by: brooks, gnn, des, zec, imp Sponsored by: The FreeBSD Foundation
* convert calls to IFQ_HANDOFF to if_transmitkmacy2008-11-221-1/+1
|
* Step 1.5 of importing the network stack virtualization infrastructurezec2008-10-021-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | from the vimage project, as per plan established at devsummit 08/08: http://wiki.freebsd.org/Image/Notes200808DevSummit Introduce INIT_VNET_*() initializer macros, VNET_FOREACH() iterator macros, and CURVNET_SET() context setting macros, all currently resolving to NOPs. Prepare for virtualization of selected SYSCTL objects by introducing a family of SYSCTL_V_*() macros, currently resolving to their global counterparts, i.e. SYSCTL_V_INT() == SYSCTL_INT(). Move selected #defines from sys/sys/vimage.h to newly introduced header files specific to virtualized subsystems (sys/net/vnet.h, sys/netinet/vinet.h etc.). All the changes are verified to have zero functional impact at this point in time by doing MD5 comparision between pre- and post-change object files(*). (*) netipsec/keysock.c did not validate depending on compile time options. Implemented by: julian, bz, brooks, zec Reviewed by: julian, bz, brooks, kris, rwatson, ... Approved by: julian (mentor) Obtained from: //depot/projects/vimage-commit2/... X-MFC after: never Sponsored by: NLnet Foundation, The FreeBSD Foundation
* Fix to bug kern/126850. Only dispatch event hander if thejfv2008-08-281-6/+12
| | | | | | | interface had a parent (was attached). Reviewed by: EvilSam MFC after: 1 week
* Commit step 1 of the vimage project, (network stack)bz2008-08-171-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | virtualization work done by Marko Zec (zec@). This is the first in a series of commits over the course of the next few weeks. Mark all uses of global variables to be virtualized with a V_ prefix. Use macros to map them back to their global names for now, so this is a NOP change only. We hope to have caught at least 85-90% of what is needed so we do not invalidate a lot of outstanding patches again. Obtained from: //depot/projects/vimage-commit2/... Reviewed by: brooks, des, ed, mav, julian, jamie, kris, rwatson, zec, ... (various people I forgot, different versions) md5 (with a bit of help) Sponsored by: NLnet Foundation, The FreeBSD Foundation X-MFC after: never V_Commit_Message_Reviewed_By: more people than the patch
* Add event notification at attach/detach so the NICjfv2008-07-141-0/+6
| | | | is able to detect it and do hardware filtering.
* The bridging output function puts the mbuf directly on the interfaces sendthompsa2007-10-181-28/+1
| | | | | | | | | | | | | | | | queue so the output network card must support the same tagging mechanism as how the frame was input (prepended Ethernet header tag or stripped HW mflag). Now the vlan Ethernet header is _always_ stripped in ether_input and the mbuf flagged, only only network cards with VLAN_HWTAGGING enabled would properly re-tag any outgoing vlan frames. If the outgoing interface does not support hardware tagging then readd the vlan header to the front of the frame. Move the common vlan encapsulation in to ether_vlanencap(). Reported by: Erik Osterholm, Jon Otterholm MFC after: 1 week
* Now <net/if_arp.h> is unused here.yar2007-03-191-1/+0
|
* Fix a nameless constant: 6 -> ETHER_ADDR_LENyar2007-03-191-1/+1
| | | | Tested with: md5(1)
* Now that this driver uses ether_ioctl(), it no longer needsyar2007-03-191-6/+0
| | | | the INET related include files.
* Remove a spurious blank line at the start of vlan_growhash().yar2007-03-151-1/+4
| | | | | Add a diagnostic message to the function about resizing vlan hash table.
* Let vlan_ioctl() pass some work on to ether_ioctl()yar2007-03-141-25/+1
| | | | and so reduce code duplication a bit.
* Emit load and unload messages under bootverbose.yar2007-03-121-0/+11
| | | | | | | This can help to spot bugs (which it did for me,) and let people know which mode the vlan module is actually using if they suspect it isn't picking its options from the main kernel config file.
* Fix some minor issues in the internal vlan lists:yar2007-03-121-20/+6
| | | | | | | | | | | | | | | | - ifv_list member of struct ifvlan is unneeded in array mode, it's used only in hash mode to resolve hash collisions. - We don't need the list of trunks at all. (The initial reason for having it was to be able to destroy all trunks in the MOD_UNLOAD handler, but a trunk is not to be destroyed forcibly -- it will go away when all vlan interfaces on it have been deleted. Note that if_clone_detach() called first of all under MOD_UNLOAD will delete all vlan interfaces and thus make all trunks go away quietly.) - It's enough to use a single [S]LIST_FIRST() in a typical list destruction loop.
* - Don't defer the removal of an 802.1q header for no real reason.yar2006-12-301-25/+16
| | | | | | - Micro-optimize the addition of an 802.1q header to match the removal code. - Consistently check for interfaces being up and running. - Consistently use NULL instead of 0 with pointers.
* - Update the baudrate every time the parent changes its link state.glebius2006-10-111-3/+4
| | | | | - Rearrange the curly braces so that this piece of code is more readable.
* Move ethernet VLAN tags from mtags to its own mbuf packet header fieldandre2006-09-171-17/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | m_pkthdr.ether_vlan. The presence of the M_VLANTAG flag on the mbuf signifies the presence and validity of its content. Drivers that support hardware VLAN tag stripping fill in the received VLAN tag (containing both vlan and priority information) into the ether_vtag mbuf packet header field: m->m_pkthdr.ether_vtag = vlan_id; /* ntohs()? */ m->m_flags |= M_VLANTAG; to mark the packet m with the specified VLAN tag. On output the driver should check the mbuf for the M_VLANTAG flag to see if a VLAN tag is present and valid: if (m->m_flags & M_VLANTAG) { ... = m->m_pkthdr.ether_vtag; /* htons()? */ ... pass tag to hardware ... } VLAN tags are stored in host byte order. Byte swapping may be necessary. (Note: This driver conversion was mechanic and did not add or remove any byte swapping in the drivers.) Remove zone_mtag_vlan UMA zone and MTAG_VLAN definition. No more tag memory allocation have to be done. Reviewed by: thompsa, yar Sponsored by: TCP/IP Optimization Fundraise 2005
* Fix spelling.thompsa2006-08-251-1/+1
|
* This XXX remark was rendered false by rev. 103, which made theyar2006-08-151-1/+0
| | | | VLAN_ARRAY case subject to rw locking, too.
* Make it a tad easier to base other encapsulation schemes on this driveryar2006-08-151-5/+4
| | | | | | by restoring the ifv_proto field in the vlan softc and putting it to use this time. It's a good companion for ifv_encaplen, which has already been used throughout this driver.
* Set IFF_DRV_RUNNING on vlan(4) once in vlan_config(),yar2006-08-151-2/+3
| | | | | | not at many places after each call to vlan_config(). This is consistent with IFF_DRV_RUNNING being unset in vlan_unconfig().
* Optionally pad outgoing frames to the minimum of 60 bytes (excl. FCS)yar2006-08-111-0/+33
| | | | | | | | | | before tagging them. This can help to work around brain-damage in some switches that fail to pad a frame after untagging it if its length drops below the minimum. This option is blessed by IEEE Std 802.1Q (2003 Ed.), paragraph C.4.4.3.b. It's controlled by sysctl net.link.vlan.soft_pad. Idea by: az MFC after: 1 week
* Should vlan_input() ever be called with ifp pointing to a non-Ethernetyar2006-08-031-4/+5
| | | | | | | | | | | | | interface, do not just assign -1 to tag because it breaks the logic of the code to follow. The better way is to handle this case as an unsupported protocol and return unless INVARIANTS is in effect and we can panic. Panic is good there because the scenario can happen only because of a coding error elsewhere. We also should show the interface name in the panic message for easier debugging of the problem, should it ever emerge. Submitted by: qingli (initially)
* Back out rev. 1.107 because it introduced as many problemsyar2006-08-031-9/+15
| | | | | | | | | | | | | | as it tried to solve: - it smuggled hidden 802.1q details into otherwise protocol-neutral code; - it put an important code consistency check under DEBUG, which was never defined by anyone but a developer hacking this file for the moment; - lastly, the former bcopy() call had been correct as long as the "dead" code was there. (A new version of the fix for tag of -1 to come in the next commit.) Agreed by: qingli
* In vlan_input(), if the network interface does not perform h/w basedqingli2006-08-011-15/+9
| | | | | | | | | | | | | vlan tag processing, the code will use bcopy() to remove the vlan tag field but the code copies 2 bytes too many, which essentially overwrites the protocol type field. Also, a tag value of -1 is generated for unrecognized interface type, which would cause an invalid memory access in the vlans[] array. In addition, removed a line of dead code and its associated comments. Reviewed by: sam
* Revise network interface cloning to take an optional opaquesam2006-07-091-3/+33
| | | | | | | | | parameter that can specify configuration parameters: o rev cloner api's to add optional parameter block o add SIOCCREATE2 that accepts parameter data o rev vlan support to use new api (maintain old code) Reviewed by: arch@
* Detach the interface first, do vlan_unconfig() then.yar2006-06-291-9/+3
| | | | | | | | | | | | | | | Previously, another thread could get a pointer to the interface by scanning the system-wide list and sleep on the global vlan mutex held by vlan_unconfig(). The interface was gone by the time the other thread woke up. In order to be able to call vlan_unconfig() on a detached interface, remove the purely cosmetic bzero'ing of IF_LLADDR from the function because a detached interface has no addresses. Noticed by: a stress-testing script by maxim Reviewed by: glebius
* Remove a few unused things.yar2006-06-291-12/+8
| | | | Fix some style and consistency points.
* Fix the VLAN_ARRAY case, mostly regarding improper use of atomic(9)yar2006-06-211-30/+16
| | | | | in place of conventional rw locking. Alas, atomic(9) can't buy us lockless operation so easily.
* Track interface department events and detach vlans fromyar2006-06-211-8/+76
| | | | | | | | | departing trunk so that we don't get into trouble later by dereferencing a stale pointer to dead trunk's things. Prodded by: oleg Sponsored by: RiNet (Cronyx Plus LLC) MFC after: 1 week
* Don't acquire a lock before calling vlan_unconfig().ru2006-03-091-2/+0
| | | | | | This fixes a panic when doing "ifconfig ... -vlandev". OK'ed by: glebius
* Don't to forget to unlock the rwlock on trunk before destroying it.yar2006-02-241-2/+3
| | | | | | This should fix panic on "kldunload if_vlan" while vlanX are still there. Reviewed by: glebius
OpenPOWER on IntegriCloud