summaryrefslogtreecommitdiffstats
path: root/sys/net/if_vlan.c
Commit message (Collapse)AuthorAgeFilesLines
* 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
* Bump the MODULE_VERSION for HEAD, as the vlan(4) API is different inemaste2006-02-101-1/+1
| | | | | | | RELENG_6, and would require a lower version number. Requested by: glebius Approved by: rwatson (mentor)
* Avoid frobbing IFF_UP at any cost (which is close toyar2006-02-101-2/+0
| | | | | | | | zero in this case.) A kernel driver has IFF_DRV_RUNNING at its full disposal while IFF_UP may be toggled only by humans or their daemonic deputies from the userland. MFC after: 3 days
* Add a MODULE_VERSION so that other modules (perhaps third-party) canemaste2006-02-091-0/+1
| | | | | | depend on this one. Approved by: rwatson (mentor)
* In vlan_config() first call vlan_inithash(), then lock mutex, becauseglebius2006-02-021-4/+6
| | | | vlan_inithash() calls malloc(M_WAITOK).
* Set IFF_BROADCAST and IFF_MULTICAST on vlan interfaces from theyar2006-01-311-2/+5
| | | | | | | | | | | | | | | | | | beginning and simply refuse to attach to a parent without either flag. Our network stack cannot handle well IFF_BROADCAST or IFF_MULTICAST on an interface changing on the fly. E.g., IP will or won't assign a broadcast address to an interface and join the all-hosts multicast group on it depending on its IFF_BROADCAST and IFF_MULTICAST settings. Should the flags alter later, IP will miss the change and keep using bogus settings. This can lead to evil things like supplying an invalid broadcast address or trying to leave a multicast group that hasn't been joined. So just avoid touching the flags since an interface was created. This has no practical purpose. Discussed with: -net, glebius, oleg MFC after: 1 week
* Merge the //depot/user/yar/vlan branch into CVS. It contains some collectiveglebius2006-01-301-120/+463
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | work by yar, thompsa and myself. The checksum offloading part also involves work done by Mihail Balikov. The most important changes: o Instead of global linked list of all vlan softc use a per-trunk hash. The size of hash is dynamically adjusted, depending on number of entries. This changes struct ifnet, replacing counter of vlans with a pointer to trunk structure. This change is an improvement for setups with big number of VLANs, several interfaces and several CPUs. It is a small regression for a setup with a single VLAN interface. An alternative to dynamic hash is a per-trunk static array with 4096 entries, which is a compile time option - VLAN_ARRAY. In my experiments the array is not an improvement, probably because such a big trunk structure doesn't fit into CPU cache. o Introduce an UMA zone for VLAN tags. Since drivers depend on it, the zone is declared in kern_mbuf.c, not in optional vlan(4) driver. This change is a big improvement for any setup utilizing vlan(4). o Use rwlock(9) instead of mutex(9) for locking. We are the first ones to do this! :) o Some drivers can do hardware VLAN tagging + hardware checksum offloading. Add an infrastructure for this. Whenever vlan(4) is attached to a parent or parent configuration is changed, the flags on vlan(4) interface are updated. In collaboration with: yar, thompsa In collaboration with: Mihail Balikov <mihail.balikov interbgc.com>
* Take if_baudrate from the parent. This fixes problem with SNMPglebius2005-11-281-0/+1
| | | | daemons reporting zero speed for vlan(4) interfaces.
* - Store pointer to the link-level address right in "struct ifnet"ru2005-11-111-1/+1
| | | | | | | | | | rather than in ifindex_table[]; all (except one) accesses are through ifp anyway. IF_LLADDR() works faster, and all (except one) ifaddr_byindex() users were converted to use ifp->if_addr. - Stop storing a (pointer to) Ethernet address in "struct arpcom", and drop the IFP2ENADDR() macro; all users have been converted to use IF_LLADDR() instead.
* - Make IFP2ENADDR() a pointer to IF_LLADDR() rather than anotherru2005-11-111-18/+2
| | | | | | | | copy of Ethernet address. - Change iso88025_ifattach() and fddi_ifattach() to accept MAC address as an argument, similar to ether_ifattach(), to make this work.
* Move the cloned interface list management in to if_clone. For some drivers thethompsa2005-11-081-3/+0
| | | | | | | | | | softc lists and associated mutex are now unused so these have been removed. Calling if_clone_detach() will now destroy all the cloned interfaces for the driver and in most cases is all thats needed to unload. Idea by: brooks Reviewed by: brooks
* - Do not raise IFF_DRV_OACTIVE flag in vlan_start, because thisglebius2005-11-061-2/+8
| | | | | | | can lead to stalled interface - Explain this fact in a comment. Reviewed by: rwatson, thompsa, yar
* Improve handling flags that must be propagatedyar2005-10-031-37/+84
| | | | | | | | | | to the parent interface, such as IFF_PROMISC and IFF_ALLMULTI. In addition, vlan(4) gains ability to migrate from one parent to another w/o losing its own flags. PR: kern/81978 MFC after: 2 weeks
* The arguments to printf() were swapped.ru2005-09-161-2/+2
|
* Do assorted nitpicking in diagnostics while I'm here:yar2005-09-161-9/+9
| | | | | | - Use __func__ consistently instead of copying function name to message strings. Code tends to migrate around source files. - DIAGNOSTIC is for information, INVARIANTS is for panics.
OpenPOWER on IntegriCloud