#
259065 |
|
07-Dec-2013 |
gjb |
- Copy stable/10 (r259064) to releng/10.0 as part of the 10.0-RELEASE cycle. - Update __FreeBSD_version [1] - Set branch name to -RC1
[1] 10.0-CURRENT __FreeBSD_version value ended at '55', so start releng/10.0 at '100' so the branch is started with a value ending in zero.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation |
#
256281 |
|
10-Oct-2013 |
gjb |
Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation
|
#
253346 |
|
14-Jul-2013 |
rodrigc |
PR: 168520 170096 Submitted by: adrian, zec
Fix multiple kernel panics when VIMAGE is enabled in the kernel. These fixes are based on patches submitted by Adrian Chadd and Marko Zec.
(1) Set curthread->td_vnet to vnet0 in device_probe_and_attach() just before calling device_attach(). This fixes multiple VIMAGE related kernel panics when trying to attach Bluetooth or USB Ethernet devices because curthread->td_vnet is NULL.
(2) Set curthread->td_vnet in if_detach(). This fixes kernel panics when detaching networking interfaces, especially USB Ethernet devices.
(3) Use VNET_DOMAIN_SET() in ng_btsocket.c
(4) In ng_unref_node() set curthread->td_vnet. This fixes kernel panics when detaching Netgraph nodes.
|
#
249583 |
|
17-Apr-2013 |
gabor |
- Correct mispellings of the word necessary
Submitted by: Christoph Mallon <christoph.mallon@gmx.de> (via private mail)
|
#
241009 |
|
27-Sep-2012 |
rstone |
Ensure that all cases that enqueue a netgraph item for delivery by a ngthread properly set the item's depth to 1. In particular, prior to this change if ng_snd_item failed to acquire a lock on a node, the item's depth would not be set at all. This fix ensures that the error code from rcvmsg/ rcvdata is properly passed back to the apply callback. For example, this fixes a bug where an error from rcvmsg/rcvdata would not previously propagate back to a libnetgraph consumer when the message was queued.
Reviewed by: mav MFC after: 1 month Sponsored by: Sandvine Incorporated
|
#
231997 |
|
22-Feb-2012 |
glebius |
Revert r231829, that was my braino.
|
#
231831 |
|
16-Feb-2012 |
glebius |
Refactor the name hash and the ID hash, that are used to address nodes:
- Make hash sizes growable, to satisfy users running large mpd installations, having thousands of nodes. - NG_NAMEHASH() proved to give a very bad distribution in real life name sets, while generic hash32_str(name, HASHINIT) proved to give an even one, so you the latter for name hash. - Do not store unnamed nodes in slot 0 of name hash, no reason for that. - Use the ID hash in cases when we need to run through all nodes: the NGM_LISTNODES command and in the vnet_netgraph_uninit(). - Implement NGM_LISTNODES and NGM_LISTNAMES as separate code, the former iterates through the ID hash, and the latter through the name hash. - Keep count of all nodes and of named nodes, so that we don't need to count nodes in NGM_LISTNODES and NGM_LISTNAMES. The counters are also used to estimate whether we need to grow hashes. - Close a race between two threads running ng_name_node() assigning same name to different nodes.
|
#
231830 |
|
16-Feb-2012 |
glebius |
Specify correct loading order for core of netgraph(4).
|
#
231829 |
|
16-Feb-2012 |
glebius |
Supply correct "how" argument to the uma_zcreate().
|
#
231766 |
|
15-Feb-2012 |
glebius |
Fix includes list.
Submitted by: bde
|
#
231765 |
|
15-Feb-2012 |
glebius |
Trim double empty lines.
|
#
231764 |
|
15-Feb-2012 |
glebius |
Remove testing stuff, reducing kernel memory footprint by 1 Kb.
Anyway, when we are building a LINT kernel, all these macros are tested via nodes.
|
#
231761 |
|
15-Feb-2012 |
glebius |
In ng_bypass() add more protection against potential race with ng_rmnode() and its followers.
|
#
231760 |
|
15-Feb-2012 |
glebius |
style(9): sort includes.
|
#
230480 |
|
23-Jan-2012 |
glebius |
Convert locks that protect name hash, ID hash and typelist from mutex(9) to rwlock(9) based locks.
While here remove dropping lock when processing NGM_LISTNODES, and NGM_LISTTYPES generic commands. We don't need to drop it since memory allocation is done with M_NOWAIT.
|
#
229003 |
|
30-Dec-2011 |
glebius |
style(9), whitespace and spelling nits.
|
#
227293 |
|
07-Nov-2011 |
ed |
Mark MALLOC_DEFINEs static that have no corresponding MALLOC_DECLAREs.
This means that their use is restricted to a single C file.
|
#
227130 |
|
06-Nov-2011 |
fjoe |
Constify "address" argument of ng_address_path().
|
#
226829 |
|
27-Oct-2011 |
glebius |
- If KDB & NETGRAPH_DEBUG are on, print traces on discovered failed invariants. - Reduce tautology in NETGRAPH_DEBUG output.
|
#
223754 |
|
04-Jul-2011 |
glebius |
- Use refcount(9) API to manage node and hook refcounting. - Make ng_unref_node() void, since caller shouldn't be interested in whether node is valid after call or not, since it can't be guaranteed to be valid. [1]
Ok from: julian [1]
|
#
220745 |
|
17-Apr-2011 |
glebius |
Fix error where error variable was assigned result of comparison, instead of function return value.
Submitted by: Przemyslaw Frasunek <przemyslaw frasunek.com> MFC after: 4 days
|
#
219827 |
|
21-Mar-2011 |
glebius |
Improve locking of creating and dropping links in the graph, acquiring the topology mutex in the following functions, that manipulate pointers to peer nodes:
- ng_bypass() - ng_path2noderef() when switching to the next node in sequence. Rewrite the function a bit. - ng_address_hook() - ng_address_path()
This patch improves stability of large mpd5 installations.
|
#
215701 |
|
22-Nov-2010 |
dim |
After some off-list discussion, revert a number of changes to the DPCPU_DEFINE and VNET_DEFINE macros, as these cause problems for various people working on the affected files. A better long-term solution is still being considered. This reversal may give some modules empty set_pcpu or set_vnet sections, but these are harmless.
Changes reverted:
------------------------------------------------------------------------ r215318 | dim | 2010-11-14 21:40:55 +0100 (Sun, 14 Nov 2010) | 4 lines
Instead of unconditionally emitting .globl's for the __start_set_xxx and __stop_set_xxx symbols, only emit them when the set_vnet or set_pcpu sections are actually defined.
------------------------------------------------------------------------ r215317 | dim | 2010-11-14 21:38:11 +0100 (Sun, 14 Nov 2010) | 3 lines
Apply the STATIC_VNET_DEFINE and STATIC_DPCPU_DEFINE macros throughout the tree.
------------------------------------------------------------------------ r215316 | dim | 2010-11-14 21:23:02 +0100 (Sun, 14 Nov 2010) | 2 lines
Add macros to define static instances of VNET_DEFINE and DPCPU_DEFINE.
|
#
215317 |
|
14-Nov-2010 |
dim |
Apply the STATIC_VNET_DEFINE and STATIC_DPCPU_DEFINE macros throughout the tree.
|
#
208036 |
|
13-May-2010 |
zec |
Increase the target buffer for performing NGM_ASCII2BINARY conversion from 2000 bytes to 20 Kbytes, which now matches the buffer size used for NGM_BINARY2ASCII conversions.
The aim of this change is to allow for bigger binary structures to be managed via netgraph ASCII messages, until we come up with an API improvement which would get rid of such arbitrary hardcoded limits.
MFC after: 3 days
|
#
207572 |
|
03-May-2010 |
zec |
When destroying a vnet, shut down all netgraph nodes tied to that vnet before proceeding with dismantling other protocol domains.
This change only affects options VIMAGE builds.
Reviewed by: julian, bz MFC after: 3 days
|
#
201145 |
|
28-Dec-2009 |
antoine |
(S)LIST_HEAD_INITIALIZER takes a (S)LIST_HEAD as an argument. Fix some wrong usages. Note: this does not affect generated binaries as this argument is not used.
PR: 137213 Submitted by: Eygene Ryabinkin (initial version) MFC after: 1 month
|
#
196019 |
|
01-Aug-2009 |
rwatson |
Merge the remainder of kern_vimage.c and vimage.h into vnet.c and 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)
|
#
195837 |
|
23-Jul-2009 |
rwatson |
Introduce and use a sysinit-based initialization scheme for virtual network stacks, VNET_SYSINIT:
- Add VNET_SYSINIT and VNET_SYSUNINIT macros to declare events that will occur each time a network stack is instantiated and destroyed. In the !VIMAGE case, these are simply mapped into regular SYSINIT/SYSUNINIT. For the VIMAGE case, we instead use SYSINIT's to track their order and properties on registration, using them for each vnet when created/ destroyed, or immediately on module load for already-started vnets. - Remove vnet_modinfo mechanism that existed to serve this purpose previously, as well as its dependency scheme: we now just use the SYSINIT ordering scheme. - Implement VNET_DOMAIN_SET() to allow protocol domains to declare that they want init functions to be called for each virtual network stack rather than just once at boot, compiling down to DOMAIN_SET() in the non-VIMAGE case. - Walk all virtualized kernel subsystems and make use of these instead of modinfo or DOMAIN_SET() for init/uninit events. In some cases, convert modular components from using modevent to using sysinit (where appropriate). In some cases, do minor rejuggling of SYSINIT ordering to make room for or better manage events.
Portions submitted by: jhb (VNET_SYSINIT), bz (cleanup) Discussed with: jhb, bz, julian, zec Reviewed by: bz Approved by: re (VIMAGE blanket)
|
#
195727 |
|
16-Jul-2009 |
rwatson |
Remove unused VNET_SET() and related macros; only VNET_GET() is ever actually used. Rename VNET_GET() to VNET() to shorten variable references.
Discussed with: bz, julian Reviewed by: bz Approved by: re (kensmith, kib)
|
#
195699 |
|
14-Jul-2009 |
rwatson |
Build on Jeff Roberson's linker-set based dynamic per-CPU allocator (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)
|
#
194012 |
|
11-Jun-2009 |
zec |
Introduce a mechanism for detecting calls from outbound path of the network stack when reentering the inbound path from netgraph, and force queueing of mbufs at the outbound netgraph node.
The mechanism relies on two components. First, in netgraph nodes where outbound path of the network stack calls into netgraph, the current thread has to be appropriately marked using the new NG_OUTBOUND_THREAD_REF() macro before proceeding to call further into the netgraph topology, and unmarked using the NG_OUTBOUND_THREAD_UNREF() macro before returning to the caller. Second, netgraph nodes which can potentially reenter the network stack in the inbound path have to mark their inbound hooks using NG_HOOK_SET_TO_INBOUND() macro. The netgraph framework will then detect when there is a danger of a call graph looping back from outbound to inbound path via netgraph, and defer handing off the mbufs to the "inbound" node to a worker thread with a clean stack.
In this first pass only the most obvious netgraph nodes have been updated to ensure no outbound to inbound calls can occur. Nodes such as ng_ipfw, ng_gif etc. should be further examined whether a potential for outbound to inbound call looping exists.
This commit changes the layout of struct thread, but due to __FreeBSD_version number shortage a version bump has been omitted at this time, nevertheless kernel and modules have to be rebuilt.
Reviewed by: julian, rwatson, bz Approved by: julian (mentor)
|
#
193731 |
|
08-Jun-2009 |
zec |
Introduce an infrastructure for dismantling vnet instances.
Vnet modules and protocol domains may now register destructor functions to clean up and release per-module state. The destructor mechanisms can be triggered by invoking "vimage -d", or a future equivalent command which will be provided via the new jail framework.
While this patch introduces numerous placeholder destructor functions, many of those are currently incomplete, thus leaking memory or (even worse) failing to stop all running timers. Many of such issues are already known and will be incrementaly fixed over the next weeks in smaller incremental commits.
Apart from introducing new fields in structs ifnet, domain, protosw and vnet_net, which requires the kernel and modules to be rebuilt, this change should have no impact on nooptions VIMAGE builds, since vnet destructors can only be called in VIMAGE kernels. Moreover, destructor functions should be in general compiled in only in options VIMAGE builds, except for kernel modules which can be safely kldunloaded at run time.
Bump __FreeBSD_version to 800097. Reviewed by: bz, julian Approved by: rwatson, kib (re), julian (mentor)
|
#
191827 |
|
05-May-2009 |
zec |
Unbreak LINT build, caused by a change in struct ng_node layout introduced with r191816, which become uncovered only with NETGRAPH_DEBUG defined.
NOT approved by mentor (julian) due to emergency.
|
#
191510 |
|
26-Apr-2009 |
zec |
In preparation to make options VIMAGE operational, where needed, initialize / release netgraph related state in iattach() / idetach() functions called via the vnet module registration / initialization framework, instead of initialization / cleanups being done in mod_event handlers.
While here, introduce a crude hack aimed at preventing ng_ether to autoattach to ng_eiface ifnets, which are also netgraph nodes already.
Reviewed by: bz Approved by: julian (mentor)
|
#
186093 |
|
14-Dec-2008 |
mav |
To avoid one doubtless netgraph SMP scalability limitation point, switch node queues processing from single swi:net thread to several specialized threads.
Reviewed by: julian Tested with: Netperf Cluster
|
#
186060 |
|
13-Dec-2008 |
mav |
Revert rev. 183277:
Remove ng_rmnode_flags() function. ng_rmnode_self() was made to be called only while having node locked. When node is properly locked, any function call sent to it will always be queued. So turning ng_rmnode_self() into the ng_rmnode_flags() is not just meaningless, but incorrent, as it violates node locking when called outside.
No objections: julian, thompsa
|
#
185895 |
|
10-Dec-2008 |
zec |
Conditionally compile out V_ globals while instantiating the appropriate container structures, depending on VIMAGE_GLOBALS compile time option.
Make VIMAGE_GLOBALS a new compile-time option, which by default will not be defined, resulting in instatiations of global variables selected for V_irtualization (enclosed in #ifdef VIMAGE_GLOBALS blocks) to be effectively compiled out. Instantiate new global container structures to hold V_irtualized variables: vnet_net_0, vnet_inet_0, vnet_inet6_0, vnet_ipsec_0, vnet_netgraph_0, and vnet_gif_0.
Update the VSYM() macro so that depending on VIMAGE_GLOBALS the V_ macros resolve either to the original globals, or to fields inside container structures, i.e. effectively
#ifdef VIMAGE_GLOBALS #define V_rt_tables rt_tables #else #define V_rt_tables vnet_net_0._rt_tables #endif
Update SYSCTL_V_*() macros to operate either on globals or on fields inside container structs.
Extend the internal kldsym() lookups with the ability to resolve selected fields inside the virtualization container structs. This applies only to the fields which are explicitly registered for kldsym() visibility via VNET_MOD_DECLARE() and vnet_mod_register(), currently this is done only in sys/net/if.c.
Fix a few broken instances of MODULE_GLOBAL() macro use in SCTP code, and modify the MODULE_GLOBAL() macro to resolve to V_ macros, which in turn result in proper code being generated depending on VIMAGE_GLOBALS.
De-virtualize local static variables in sys/contrib/pf/net/pf_subr.c which were prematurely V_irtualized by automated V_ prepending scripts during earlier merging steps. PF virtualization will be done separately, most probably after next PF import.
Convert a few variable initializations at instantiation to initialization in init functions, most notably in ipfw. Also convert TUNABLE_INT() initializers for V_ variables to TUNABLE_FETCH_INT() in initializer functions.
Discussed at: devsummit Strassburg Reviewed by: bz, julian Approved by: julian (mentor) Obtained from: //depot/projects/vimage-commit2/... X-MFC after: never Sponsored by: NLnet Foundation, The FreeBSD Foundation
|
#
185419 |
|
28-Nov-2008 |
zec |
Unhide declarations of network stack virtualization structs from underneath #ifdef VIMAGE blocks.
This change introduces some churn in #include ordering and nesting throughout the network stack and drivers but is not expected to cause any additional issues.
In the next step this will allow us to instantiate the virtualization container structures and switch from using global variables to their "containerized" counterparts.
Reviewed by: bz, julian Approved by: julian (mentor) Obtained from: //depot/projects/vimage-commit2/... X-MFC after: never Sponsored by: NLnet Foundation, The FreeBSD Foundation
|
#
185179 |
|
22-Nov-2008 |
mav |
Remove unneeded NULL check. At first msg can't be null here and and at second NG_FREE_MSG() also checks it.
Found with: Coverity Prevent(tm)
|
#
184205 |
|
23-Oct-2008 |
des |
Retire the MALLOC and FREE macros. They are an abomination unto style(9).
MFC after: 3 months
|
#
183550 |
|
02-Oct-2008 |
zec |
Step 1.5 of importing the network stack virtualization infrastructure 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
|
#
183277 |
|
22-Sep-2008 |
thompsa |
Add ng_rmnode_flags() so the caller can pass NG_QUEUE and have the node destroyed asynchronously due to locking or other constraints.
Reviewed by: julian
|
#
182995 |
|
13-Sep-2008 |
mav |
We can't implicitly trust the hook on NGQF_FN/NGQF_FN2 processing in ng_apply_item(). There are possible (and I have got one) use-after-free class panics because of it.
If hook is specified, require it to be valid at the apply time. The only exceptions are the internal ng_con_part2(), ng_con_part3() and ng_rmhook_part2() functions which are specially made to work with invalid hooks.
|
#
181887 |
|
19-Aug-2008 |
julian |
A bunch of formatting fixes brough to light by, or created by the Vimage commit a few days ago.
|
#
181803 |
|
17-Aug-2008 |
bz |
Commit step 1 of the vimage project, (network stack) 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
|
#
180239 |
|
03-Jul-2008 |
rwatson |
Remove NETISR_MPSAFE, which allows specific netisr handlers to be directly dispatched without Giant, and add NETISR_FORCEQUEUE, which allows specific netisr handlers to always be dispatched via a queue (deferred). Mark the usb and if_ppp netisr handlers as NETISR_FORCEQUEUE, and explicitly acquire Giant in those handlers.
Previously, any netisr handler not marked NETISR_MPSAFE would necessarily run deferred and with Giant acquired. This change removes Giant scaffolding from the netisr infrastructure, but NETISR_FORCEQUEUE allows non-MPSAFE handlers to continue to force deferred dispatch so as to avoid lock order reversals between their acqusition of Giant and any calling context.
It is likely we will be able to remove NETISR_FORCEQUEUE once IFF_NEEDSGIANT is removed, as non-MPSAFE usb and if_ppp drivers will no longer be supported.
Reviewed by: bz MFC after: 1 month X-MFC note: We can't remove NETISR_MPSAFE from stable/7 for KPI reasons, but the rest can go back.
|
#
178311 |
|
19-Apr-2008 |
mav |
ng_address_hook() microoptimization. Use local variables as they should be. It helps compiller to avoid some extra memory accesses.
|
#
178259 |
|
16-Apr-2008 |
mav |
Use separate UMA zone for data items allocation. It is a partial rev. 1.149 rework. It allows to save several percents of CPU time on SMP by using UMA's internal per-CPU allocation limits instead of own global variable each time updated with atomics.
Tested with: Netperf cluster
|
#
178228 |
|
15-Apr-2008 |
mav |
Several changes breaking netgraph module ABI collected together: - reorder structures fields (XX_refs) a bit to group fields modified same time together. According to my tests it gives up to 10% SMP performance benefit on real workload due to reduced inter-CPU cache trashing. - change q_flags from long to int as long is not really needed there and it's usage with atomics is argued by some people. - move NGF_WORKQ flag into the separate field q_flags2 as it protected by queue mutex instead of node writer protection used by the rest of flags. - move nd_work queue entry to ng_queue structure to which it is more related and make it STAILQ instead of TAILQ as now it is a classic FIFO. - remove q_node pointer from ng_queue structure as it is not really needed. - reimplement item queue using STAILQ instead of own equal implementation. As soon as BT subsystem has own item queues using ng_item.el_next update it also. - change depth field in ng_item from uintptr_t to u_int. It was made uintptr_t to keep ABI compatibility.
Reviewed by: julian, emax Tested with: Netperf cluster
|
#
178039 |
|
09-Apr-2008 |
mav |
Add memory barriers to the node locking operations. Add some comments.
|
#
177953 |
|
06-Apr-2008 |
mav |
Rewrite node's r/w/q-lock semantics using only atomics instead of mutex and atomics combination. Mutex is now used only for queue protection. Also avoid unneded extra swi scheduling calls.
|
#
177728 |
|
29-Mar-2008 |
mav |
Use new atomic_fetchadd() primitive instead of looping atomic_cmpset().
|
#
177722 |
|
29-Mar-2008 |
mav |
There is no need to erase hook->hk_node before freing hook.
|
#
177673 |
|
27-Mar-2008 |
mav |
Remove ng_setisr() call from ng_dequeue(). It is useless as we any way will never exit ngintr(), while there is some ready requests on the queue. It was made years ago with hope of parallel queue processing by several net threads. But even if we have several threads sometimes, we have no rights to process queue in parallel as it will break original requests serialization that is critically important for some setups.
|
#
177286 |
|
16-Mar-2008 |
mav |
Remove impossible (hk_peer == NULL) check from ng_address_hook(). Valid hook can't have NULL peer. Even invalid one can't, as it is resets to deadhook, but not NULL.
|
#
177071 |
|
11-Mar-2008 |
mav |
Improve apply callback error reporting: Before this patch callback returned result of the last finished call chain. Now it returns last nonzero result from all call chain results in this request.
As soon as this improvement gives reliable error reporting, it is now possible to remove dirty workaround in ng_socket, made to return ENOBUFS error statuses of request-response operations. That workaround was responsible for returning ENOBUFS errors to completely unrelated requests working at the same time on socket.
|
#
176849 |
|
05-Mar-2008 |
mav |
Increase default queue items allocation limit from 512 to 4096 items to avoid terrible unpredicted effects for netgraph operation of their exhaustion while allocating control messages. Add separate configurable 512 items limit for data items allocation for DoS/overload protection.
Discussed with: julian
|
#
176802 |
|
04-Mar-2008 |
mav |
Implement 128 items node name hash for faster name search. Increase node ID hash size from 32 to 128 items.
|
#
176567 |
|
25-Feb-2008 |
mav |
Fix incorrect constant used in rev. 1.146 that broke node writer locking.
|
#
176046 |
|
06-Feb-2008 |
mav |
Cleanup and tune ng_snd_item() function as it is one of the most busy netgraph functions. Tune stack protection constants to avoid division operation.
|
#
175889 |
|
02-Feb-2008 |
marck |
Fix one more grammo.
Noticed by: ru
|
#
175871 |
|
01-Feb-2008 |
marck |
Reword recent comment a bit.
|
#
175868 |
|
01-Feb-2008 |
mav |
Add comments about stack protection mechanism.
|
#
175850 |
|
31-Jan-2008 |
mav |
Some code reformat.
|
#
175847 |
|
31-Jan-2008 |
mav |
Implement stack protection based on GET_STACK_USAGE() macro. This fixes system panics possible with complicated netgraph setups and allows to avoid unneded extra queueing for stack unwrapping.
|
#
174898 |
|
25-Dec-2007 |
rwatson |
Add a new 'why' argument to kdb_enter(), and a set of constants to use for that argument. This will allow DDB to detect the broad category of reason why the debugger has been entered, which it can use for the purposes of deciding which DDB script to run.
Assign approximate why values to all current consumers of the kdb_enter() interface.
|
#
173605 |
|
14-Nov-2007 |
glebius |
- Merge all the ng_send_fn2* functions into one - ng_send_fn2(), removing some copy&pasted code. - Reduce copy and paste in ng_apply_item(). - Resurrect ng_send_fn() as a valid symbol, not a define.
Reviewed by: mav, julian
|
#
173110 |
|
28-Oct-2007 |
mav |
Minor debug message fix.
|
#
172820 |
|
19-Oct-2007 |
ru |
Fix build with NETGRAPH_DEBUG.
|
#
172806 |
|
19-Oct-2007 |
mav |
Implement new apply callback mechanism to handle item forwarding. When item forwarded refence counter is incremented, when item processed, counter decremented. When counter reaches zero, apply handler is getting called. Now it allows to report right connect() call status from user-level at the right time.
|
#
171885 |
|
18-Aug-2007 |
mav |
Add ng_send_fn() error handeling inside ng_con_nodes(). Without it some errors may left unnoticed and unhandeled that will lead to hooks left in half-connected state.
Reviewed by: julian@ Approved by: re (kensmith), glebius (mentor)
|
#
170289 |
|
04-Jun-2007 |
dwmalone |
Despite several examples in the kernel, the third argument of sysctl_handle_int is not sizeof the int type you want to export. The type must always be an int or an unsigned int.
Remove the instances where a sizeof(variable) is passed to stop people accidently cut and pasting these examples.
In a few places this was sysctl_handle_int was being used on 64 bit types, which would truncate the value to be exported. In these cases use sysctl_handle_quad to export them and change the format to Q so that sysctl(1) can still print them.
|
#
170180 |
|
01-Jun-2007 |
glebius |
Partially back out rev. 1.127, to restore broken functionality. This should be redesigned, but better enter RELENG_7 with a working ngctl(8).
Agreed by: julian
|
#
170035 |
|
27-May-2007 |
rwatson |
Universally adopt most conventional spelling of acquire.
|
#
168137 |
|
31-Mar-2007 |
wkoszek |
We don't need spinning locks here. Change them to the adaptive mutexes. This change should bring no performance decrease, as it did not in my tests.
Reviewed by: julian, glebius Approved by: cognet (mentor)
|
#
168049 |
|
30-Mar-2007 |
wkoszek |
Instead of direct manipulation on queue and worklist mutexes, bring macros for doing this job. This change will make it easy to migrate from using spinning locks to adaptive ones.
Reviewed by: glebius, julian Approved by: cognet (mentor)
|
#
167677 |
|
18-Mar-2007 |
rwatson |
Prefer more traditional spellings of some words in comments.
|
#
167402 |
|
09-Mar-2007 |
julian |
oops committed the wrong patch. try this one..
|
#
167385 |
|
09-Mar-2007 |
julian |
ng_apply_item should be void. It is called from the interrupt source or from whoever has dequeued the item from the queue. Generally they have no interest in the result, and even if it is called by the queuer, it should still pretend that it was queued. The queuer should be assuming that the call was queued and giving them the false confidence that they are getting status leads to hard to find bugs.
Make it a void and remove all the code that tried to return status through it.
|
#
163244 |
|
11-Oct-2006 |
glebius |
Do not leak hooks in ng_bypass().
Submitted by: Alexander Motin <mav alkar.net>
|
#
159373 |
|
07-Jun-2006 |
glebius |
When counting nodes second time, use the same criteria as for the first time.
PR: kern/98529 Submitted by: Michael Heyman
|
#
159331 |
|
06-Jun-2006 |
glebius |
Use NET_CALLOUT_MPSAFE for netgraph callout initializer.
|
#
159182 |
|
02-Jun-2006 |
jhb |
Conditionally acquire Giant in netgraph callouts to honor mpsafenet=0.
Reported by: sekes <gexlie at gmail dot com> MFC after: 1 week
|
#
154275 |
|
12-Jan-2006 |
glebius |
- Print also node ID in ktr(9) messages. [1] - Use fixed length for function name, making ktrdump(8) output easier to read.
Suggested by: julian [1]
|
#
154270 |
|
12-Jan-2006 |
glebius |
Remove old debugging leftover.
Reviewed by: julian
|
#
154253 |
|
12-Jan-2006 |
glebius |
Fix wording in last commit.
Submitted by: julian
|
#
154225 |
|
11-Jan-2006 |
glebius |
Add ktr(9) hooks to easier tracing of the netgraph item flow through netgraph.
|
#
152451 |
|
15-Nov-2005 |
glebius |
Some whitespace and style cleanup.
|
#
151974 |
|
02-Nov-2005 |
glebius |
Fix two races which happen when netgraph is restructuring: - Introduce ng_topo_mtx, a mutex to protect topology changes. - In ng_destroy_node() protect with ng_topo_mtx the process of checking and pointing at ng_deadnode. [1] - In ng_con_part2() check that our peer is not a ng_deadnode, and protect the check with ng_topo_mtx. - Add KASSERTs to ng_acquire_read/write, to make more understandible synopsis in case if called on ng_deadnode.
Reported by: Roselyn Lee [1]
|
#
151973 |
|
02-Nov-2005 |
glebius |
Rework the ng_item queueing on nodes: - Introduce a new flags NGQF_QREADER and NGQF_QWRITER, which tell how the item should be actually applied, overriding NGQF_READER/NGQF_WRITER flags. - Do not differ between pending reader or writer. Use only one flag that is raised, when there are pending items. - Schedule netgraph ISR in ng_queue_rw(), so that callers do not need to do this job. - Fix several comments.
Submitted by: julian
|
#
151283 |
|
13-Oct-2005 |
glebius |
- When flushing node input queue, check whether item has a callback. If it does, then call it suppling ENOENT as error value. - Add assert, that helped to catch the above error.
|
#
151256 |
|
12-Oct-2005 |
glebius |
After rev. 1.103 the oitem and ierror are no longer needed, remove them.
|
#
151238 |
|
11-Oct-2005 |
glebius |
Fix a regression introduced in rev. 1.107. If an item once had a writer semantics, and then was reused for next node, it still would be applied as writer again. To fix the regression the decision is made never to alter item->el_flags after the item has been allocated. This requires checking for overrides both in ng_dequeue() and in ng_snd_item().
Details: - Caller of the ng_apply_item() knows what is the current access to node and specifies it to ng_apply_item(). The latter drops the given access after item has beem applied. - ng_dequeue() needs to be supplied with int pointer, where it stores the obtained access on node. - Check for node/hook access overrides in ng_dequeue().
|
#
149881 |
|
08-Sep-2005 |
glebius |
Fix an item leak, that happens when some node calls ng_callout() two times consequently, without checking whether callout has been serviced or not. (ng_pptpgre and ng_ppp were catched in this behavior).
- In ng_callout() save old item before calling callout_reset(). If the latter has returned 1, then free this item. - In ng_uncallout() clear c->c_arg.
Problem reported by: Alexandre Kardanev
|
#
149827 |
|
06-Sep-2005 |
glebius |
Fix build.
|
#
149818 |
|
06-Sep-2005 |
glebius |
In INVARIANTS case also check that nodes do not pass queues of mbufs each other.
|
#
149817 |
|
06-Sep-2005 |
glebius |
Raise one more bit in READER_MASK. I believe that before this change it was possible to have 1 reader and 1 writer thread working on a node simultaneously.
Reviewed by: julian
|
#
149735 |
|
02-Sep-2005 |
glebius |
Use non-debug macros inside debugging functions, to prevent important information from being rewritten.
|
#
149505 |
|
26-Aug-2005 |
glebius |
Cleanup the reader/writer policy in netgraph(4). Assign either reader or writer flag on item in the function, that allocates the item. Do not modify these flags when item is applied or queued. The only exceptions are node and hook overrides - they can change item flags to writer.
|
#
149357 |
|
21-Aug-2005 |
glebius |
In ng_callout() assert that supplied arguments are non-NULL.
|
#
148266 |
|
21-Jul-2005 |
glebius |
Fix cut-n-paste error, introduced in rev. 1.103.
|
#
148261 |
|
21-Jul-2005 |
glebius |
Catch up with netgraph.h rev. 1.57 and fix build.
|
#
148236 |
|
21-Jul-2005 |
glebius |
Problem description:
At the end of ng_snd_item(), node queue is processed. In certain netgraph setups deep recursive calls can occur. For example this happens, when two nodes are connected and can send items to each other in both directions. If, for some reason, both nodes have a lot of items in their queues, then the processing thread will recurse between these two nodes, delivering items left and right, going deeper in the stack. Other setups can suffer from deep recursion, too. The following factors can influence risk of deep netgraph call: - periodical write-access events on node - combination of slow link and fast one in one graph - net.inet.ip.fastforwarding
Changes made:
- In ng_acquire_{read,write}() do not dequeue another item. Instead, call ng_setisr() for this node. - At the end of ng_snd_item(), do not process queue. Call ng_setisr(), if there are any dequeueable items on node queue. - In ng_setisr() narrow worklist mutex holding. - In ng_setisr() assert queue mutex.
Theoretically, the first two changes should negatively affect performance. To check this, some profiling was made:
1) In general real tasks, no noticable performance difference was found.
2) The following test was made: two multithreaded nodes and one single-threaded were connected into a ring. A large queues of packets were sent around this ring. Time to pass the ring N times was measured. This is a very vacuous test: no items/mbufs are allocated, no upcalls or downcalls outside of netgraph. It doesn't represent a real load, it is a stress test for ng_acquire_{read,write}() and item queueing functions. Surprisingly, the performance impact was positive! New code is 13% faster on UP and 17% faster on SMP, in this particular test.
The problem was originally found, described, analyzed and original patch was written by Roselyn Lee from Vernier Networks. Thanks!
Submitted by: Roselyn Lee <rosel verniernetworks com>
|
#
147774 |
|
05-Jul-2005 |
glebius |
In the splnet times, netgraph was functional and synchronous. Nowadays, an item may be queued and processed later. While this is OK for mbufs, this is a problem for control messages.
In the framework: - Add optional callback function pointer to an item. When item gets applied the callback is executed from ng_apply_item(). - Add new flag NG_PROGRESS. If this flag is supplied, then return EINPROGRESS instead of 0 in case if item failed to deliver synchronously and was queued. - Honor NG_PROGRESS in ng_snd_item().
In ng_socket: - When userland sends control message add callback to the item. - If ng_snd_item() returns EINPROGRESS, then sleep.
This change fixes possible races in ngctl(8) scripts.
Reviewed by: julian Approved by: re (scottl)
|
#
146281 |
|
16-May-2005 |
glebius |
- Extend interface of ng_getqblk(), so that malloc wait flags are specified by caller. - Change ng_send_item() interface - use 'flags' argument instead of boolean 'queue'. - Extend ng_send_fn(), ng_package_data() and ng_package_msg() interface - add possibility to pass flags. Rename ng_send_fn() to ng_send_fn1(). Create macro for ng_send_fn(). - Update all macros, that use ng_package_data() and ng_package_msg().
Reviewed by: julian
|
#
146213 |
|
14-May-2005 |
glebius |
Move queue element routines upper, so that all related declarations are in one place, to improve readability. No functional changes.
|
#
146212 |
|
14-May-2005 |
glebius |
Use uma(9) for allocating netgraph items: - ng_getqblk() simply runs uma_zalloc(). - ng_free_item() simply frees. - ngq_mtx is pushed down under NETGRAPH_DEBUG. - NGQF_FREE is removed.
Increase default maxalloc to 512.
Reviewed by: julian
|
#
146180 |
|
13-May-2005 |
glebius |
Since there is no way to queue a function call to node, create ng_queue_fn() - a queue version of ng_send_fn().
|
#
143384 |
|
10-Mar-2005 |
glebius |
Plug item leak in case when NGI_FN is applied to invalid node.
Submitted by: Roselyn Lee MFC after: 3 days
|
#
141719 |
|
12-Feb-2005 |
glebius |
Make netgraph ISR and callout MPSAFE.
Reviewed by: rwatson, ru
|
#
140852 |
|
26-Jan-2005 |
glebius |
Rename ng_callout_trapoline to ng_callout_trampoline.
Requested by: ru
|
#
140833 |
|
25-Jan-2005 |
glebius |
With recent changes to _callout_stop_safe() we can remove a hack in ng_uncallout().
|
#
140737 |
|
24-Jan-2005 |
glebius |
Fix an evil typo.
Submitted by: Roselyn Lee MFC after: 3 days
|
#
139823 |
|
06-Jan-2005 |
imp |
/* -> /*- for license, minor formatting changes
|
#
139774 |
|
06-Jan-2005 |
emax |
Introduce new startup level SI_SUB_NETGRAPH that is after SI_SUB_INIT_IF but before SI_SUB_DRIVERS. Make Netgraph(4) framework initialize at SI_SUB_NETGRAPH level.
This does not address the bigger problem: MODULE_DEPEND does not seem to work when modules are compiled in the kernel, but it fixes the problem with Netgraph Bluetooth device drivers reported by a few folks.
PR: i386/69876 Reviewed by: julian, rik, scottl MFC after: 3 days
|
#
139236 |
|
23-Dec-2004 |
glebius |
Move systm.h up, since it is required by mbuf.h.
Requested by: ru
|
#
139235 |
|
23-Dec-2004 |
glebius |
- sort includes - remove duplicate include sys/sysctl.h
|
#
139039 |
|
19-Dec-2004 |
glebius |
Assert queue mutex in ng_dequeue() and ng_queue_rw().
|
#
138268 |
|
01-Dec-2004 |
glebius |
Mechanically rename s/ng_timeout/ng_callout/g, s/ng_untimeout/ng_uncallout/g. This is done to keep both versions in RELENG_5 and support both APIs.
Reviewed by: scottl Approved by: julian (mentor), implicitly
|
#
137230 |
|
04-Nov-2004 |
glebius |
Partically backout previous commit. Since _callout_stop_safe() clears out c->c_func, we can't take it after callout_stop(). To take it before we need to acquire callout_lock, to avoid race. This commit narrows down area where lock is held, but hack is still present.
This should be redesigned.
Approved by: julian (mentor)
|
#
137138 |
|
02-Nov-2004 |
glebius |
- Make ng_timeout() to use callout() interface instead of timeout(). - Remove callout-hacking from ng_untimeout().
Approved by: julian (mentor) MFC after: 1 month
|
#
132705 |
|
27-Jul-2004 |
glebius |
When making a peer of unknown type framework tries to load module using linker_load_module(). This works OK if NGM_MKPEER message came from userland and we have process associated with thread. But when NGM_MKPEER was queued because target node was busy, linker_load_module() is called from netisr thread leading to panic. To workaround that we do not load modules by framework, instead ng_socket loads module (if this is required) before sending NGM_MKPEER. However, the race condition between return from NgSendMsg() and actual creation of node still exist and needs to be solved.
PR: kern/62789 Approved by: julian
|
#
132464 |
|
20-Jul-2004 |
julian |
Slight cosmetic changes. Also introduce a macro to be called by persistent nodes to signal their persistence during shutdown to hide this mechanism from the node author.
Make node flags have a consistent style in naming.
Document the change.
|
#
132369 |
|
18-Jul-2004 |
julian |
Reverse a lock/unlock pair that were the wrong way around in some code that is obviously not run a lot. (but is in some test cases). This code is not usually run because it covers a case that doesn't happen a lot (removing a node that has data traversing it).
|
#
132199 |
|
15-Jul-2004 |
phk |
Do a pass over all modules in the kernel and make them return EOPNOTSUPP for unknown events.
A number of modules return EINVAL in this instance, and I have left those alone for now and instead taught MOD_QUIESCE to accept this as "didn't do anything".
|
#
131933 |
|
10-Jul-2004 |
marcel |
Update for the KDB framework: o Call kdb_enter() instead of Debugger(). o Change comments accordingly.
|
#
131374 |
|
30-Jun-2004 |
julian |
Remove the home-grown metadata facility in favour of the now generic mbuf tags facility. Netgraph modules will all need a recompile.
Submitted by: Gleb Smirnoff <glebius@cell.sick.ru>
|
#
131123 |
|
25-Jun-2004 |
julian |
Not quite sure how that one got past me..
|
#
131112 |
|
25-Jun-2004 |
julian |
Make the frameworkl responsible for not passing the nodes a NULL mbuf pointer. this allows the nodes to not test for this..
Submitted by: Gleb Smirnoff <glebius@cell.sick.ru>
|
#
131008 |
|
23-Jun-2004 |
rwatson |
Clean up use of ng_hdhasb_mtx a little:
- Assert the mutex in NG_IDHASH_FIND() since the mutex is required to safely walk the node lists in the ng_ID_hash table.
- Acquire the ng_nodelist_mtx when walking ng_allnodes or ng_allhooks to generate state dump output from the netgraph sysctls.
|
#
129836 |
|
29-May-2004 |
julian |
Add a new netgraph method to allow restoration of some behaviour lost in the change from 4.x style netgraph tee nodes. Alter the tee node to use the new method. Document the behaviour.
Step the ABI version number... old netgraph klds will refuse to load. Better than just crashing.
Submitted by: Gleb Smirnoff <glebius@cell.sick.ru>
|
#
125028 |
|
26-Jan-2004 |
harti |
Get rid of the deprecated *LEN constants in favour of the new *SIZ constants that include the trailing \0 byte.
|
#
123278 |
|
07-Dec-2003 |
truckman |
The last argument to mtx_init() should be MTX_DEF, not 0. This is not a functional change since MTX_DEF happens to be defined as 0.
|
#
122320 |
|
08-Nov-2003 |
sam |
o add a flags parameter to netisr_register that is used to specify whether or not the isr needs to hold Giant when running; Giant-less operation is also controlled by the setting of debug_mpsafenet o mark all netisr's except NETISR_IP as needing Giant o add a GIANT_REQUIRED assertion to the top of netisr's that need Giant o pickup Giant (when debug_mpsafenet is 1) inside ip_input before calling up with a packet o change netisr handling so swi_net runs w/o Giant; instead we grab Giant before invoking handlers based on whether the handler needs Giant o change netisr handling so that netisr's that are marked MPSAFE may have multiple instances active at a time o add netisr statistics for packets dropped because the isr is inactive
Supported by: FreeBSD Foundation
|
#
122110 |
|
05-Nov-2003 |
harti |
Replace the lock-less algorithm for the free item list with a more conservative lock. The problem with the lock-less algorithm is that it suffers from the ABA problem. Running an application with funnels a couple of 100kpkts/s through the netgraph system on a dual CPU system with MPSAFE drivers will panic almost immediatly with the old algorithm.
It may be possible to eliminate the contention between threads that insert free items into the list and those that get free items by using the Michael/Scott queue algorithm that has two locks.
|
#
121307 |
|
21-Oct-2003 |
silby |
Change all SYSCTLS which are readonly and have a related TUNABLE from CTLFLAG_RD to CTLFLAG_RDTUN so that sysctl(8) can provide more useful error messages.
|
#
114216 |
|
29-Apr-2003 |
kan |
Deprecate machine/limits.h in favor of new sys/limits.h. Change all in-tree consumers to include <sys/limits.h>
Discussed on: standards@ Partially submitted by: Craig Rodrigues <rodrigc@attbi.com>
|
#
113255 |
|
08-Apr-2003 |
des |
Introduce an M_ASSERTPKTHDR() macro which performs the very common task of asserting that an mbuf has a packet header. Use it instead of hand- rolled versions wherever applicable.
Submitted by: Hiten Pandya <hiten@unixdaemons.com>
|
#
111888 |
|
04-Mar-2003 |
jlemon |
Update netisr handling; Each SWI now registers its queue, and all queue drain routines are done by swi_net, which allows for better queue control at some future point. Packets may also be directly dispatched to a netisr instead of queued, this may be of interest at some installations, but currently defaults to off.
Reviewed by: hsu, silby, jayanth, sam Sponsored by: DARPA, NAI Labs
|
#
111749 |
|
02-Mar-2003 |
harti |
Add two loader tuneables that allow one to change the maximum number of queue items that can be allocated by netgraph and the number of free queue items that are cached on a private list.
Netgraph places an upper limit on the number of queue items it may allocate. When there is a large number of netgraph messages travelling through the system (100k/sec and more) there is a high probability, that messages get queued at the nodes and netgraph runs out of queue items. In this case the data flow through netgraph gets blocked. The tuneable for the number of free items lets one trade memory for performance.
The tunables are also available as read-only sysctls.
PR: kern/47393 Reviewed by: julian Approved by: jake (mentor)
|
#
108533 |
|
01-Jan-2003 |
schweikh |
Correct typos, mostly s/ a / an / where appropriate. Some whitespace cleanup, especially in troff files.
|
#
102244 |
|
21-Aug-2002 |
archie |
Don't use "NULL" when "0" is really meant.
|
#
101241 |
|
02-Aug-2002 |
mux |
Make the consumers of the linker_load_file() function use linker_load_module() instead.
This fixes a bug where the kernel was unable to properly locate and load a kernel module in vfs_mount() (and probably in the netgraph code as well since it was using the same function). This is because the linker_load_file() does not properly search the module path.
Problem found by: peter Reviewed by: peter Thanks to: peter
|
#
97685 |
|
31-May-2002 |
archie |
Fix GCC warnings caused by initializing a zero length array. In the process, simply things a bit by getting rid of 'struct ng_parse_struct_info' which was useless because it only contained one field.
MFC after: 2 weeks
|
#
97229 |
|
24-May-2002 |
peter |
Fix warnings: deprecated use of label at end of compound statement
|
#
93818 |
|
04-Apr-2002 |
jhb |
Change callers of mtx_init() to pass in an appropriate lock type name. In most cases NULL is passed, but in some cases such as network driver locks (which use the MTX_NETWORK_LOCK macro) and UMA zone locks, a name is used.
Tested on: i386, alpha, sparc64
|
#
91711 |
|
05-Mar-2002 |
julian |
Official timeout routines for netgraph nodes that know how to use (and abuse) the node locking system.
MFC after: 1 week
|
#
87599 |
|
10-Dec-2001 |
obrien |
Update to C99, s/__FUNCTION__/__func__/, also don't use ANSI string concatenation.
|
#
82058 |
|
21-Aug-2001 |
brian |
Fix two typos
|
#
80222 |
|
23-Jul-2001 |
julian |
Add an external function to unlink a netgraph type from the types list.
|
#
79706 |
|
14-Jul-2001 |
julian |
remember to set the return address in a message when sending it along a hook.
PR: 27906 Submitted by: Harti Brandt <brandt@fokus.gmd.de>
no MFC as code is different in 4.x
|
#
74078 |
|
10-Mar-2001 |
julian |
netgraph.h: Change a prototype. Add a function version of ng_ref_node() when debugging so a breakpoint can be set on it. ng_base.c: add 'node' as an argument to ng_apply_item so that it is up to the caller to take over and release the item's reference on the node. If the release reports back that the node went away due to the reference going to 0, the caller should cease referencing the now defunct node. (e.g. the item was a 'kill node' message). Alter ng_unref_node to report back the residual references as a result. ng_pptpgre.c: Don't reference a node after we dropped a reference to it. (What if it was the last?) Fixes a node leak reported by Harti Brandt <brandt@fokus.gmd.de> which was due to an incorrect earlier attempt to fix the "accessing node after dropping the last reference" problem.
|
#
73371 |
|
03-Mar-2001 |
julian |
Cleanups to Macros for sending data between netgraph nodes.
|
#
73238 |
|
28-Feb-2001 |
julian |
Shuffle netgraph mutexes a bit and hold a reference on a node from the function that is calling the destructor.
|
#
73083 |
|
26-Feb-2001 |
julian |
Allow a changed MAC address to show up in ifconfig by changing it in the ifaddr list as well. Also change an error return in the base system.
|
#
72979 |
|
24-Feb-2001 |
julian |
Add knowledge of the netgraph spinlocks into the Witness code. Well, at least I think that's how it's done.
|
#
72946 |
|
23-Feb-2001 |
julian |
Shuffle sysctls a bit (thankyou whoever made them dynamic for modules) and add a sysctl to pppoe to activate non standard ethertypes so that idiot ISPs (apparently in France) who use equipment from idiot suppliers (rumour says 3com) who use nonstandard ethertypes can still connect.
"yep, sure we do pppoe, we use a different identifier to that dictated in the standard, but sure it's pppoe!"
sysctl -w net.graph.stupid_isp=1 enables the changeover.
|
#
72645 |
|
18-Feb-2001 |
asmodai |
Preceed/preceeding are not english words. Use precede and preceding.
|
#
72200 |
|
09-Feb-2001 |
bmilekic |
Change and clean the mutex lock interface.
mtx_enter(lock, type) becomes:
mtx_lock(lock) for sleep locks (MTX_DEF-initialized locks) mtx_lock_spin(lock) for spin locks (MTX_SPIN-initialized)
similarily, for releasing a lock, we now have:
mtx_unlock(lock) for MTX_DEF and mtx_unlock_spin(lock) for MTX_SPIN. We change the caller interface for the two different types of locks because the semantics are entirely different for each case, and this makes it explicitly clear and, at the same time, it rids us of the extra `type' argument.
The enter->lock and exit->unlock change has been made with the idea that we're "locking data" and not "entering locked code" in mind.
Further, remove all additional "flags" previously passed to the lock acquire/release routines with the exception of two:
MTX_QUIET and MTX_NOSWITCH
The functionality of these flags is preserved and they can be passed to the lock/unlock routines by calling the corresponding wrappers:
mtx_{lock, unlock}_flags(lock, flag(s)) and mtx_{lock, unlock}_spin_flags(lock, flag(s)) for MTX_DEF and MTX_SPIN locks, respectively.
Re-inline some lock acq/rel code; in the sleep lock case, we only inline the _obtain_lock()s in order to ensure that the inlined code fits into a cache line. In the spin lock case, we inline recursion and actually only perform a function call if we need to spin. This change has been made with the idea that we generally tend to avoid spin locks and that also the spin locks that we do have and are heavily used (i.e. sched_lock) do recurse, and therefore in an effort to reduce function call overhead for some architectures (such as alpha), we inline recursion for this case.
Create a new malloc type for the witness code and retire from using the M_DEV type. The new type is called M_WITNESS and is only declared if WITNESS is enabled.
Begin cleaning up some machdep/mutex.h code - specifically updated the "optimized" inlined code in alpha/mutex.h and wrote MTX_LOCK_SPIN and MTX_UNLOCK_SPIN asm macros for the i386/mutex.h as we presently need those.
Finally, caught up to the interface changes in all sys code.
Contributors: jake, jhb, jasone (in no particular order)
|
#
72053 |
|
05-Feb-2001 |
julian |
Make netgraph modules refuse to link with modules of a different ABI version. also try implement teh documented behaviour in socket nodes so that when there is only one hook, an unaddressed write/send will DTRT and send the data to that hook.
|
#
71902 |
|
01-Feb-2001 |
julian |
Clean up reference counting with relation to queued packets and the worklist, and while I'm there, clean up the worklist insertion and removal.
Inspired by: Harti Brandt <brandt@fokus.gmd.de>
|
#
71885 |
|
31-Jan-2001 |
julian |
Add the ability to declare ore-ride methods on a per-hook basis for the rcvdata() and rcvmsg() methods.
Also bring the man page up to sync with my last commit. (and this one)
|
#
71849 |
|
30-Jan-2001 |
julian |
Implement direct support for semipersistant nodes. (e.g. ethernet nodes are persistent until you rip out the hardware) Use this support in the ethernet and sample nodes. Add some more abstraction on the 'item's so that node and hook reference counting can be checked easier. Slight man page correction. Make pppoe type dependent on ethernet type. Clean up node shutdown a little. Move a mutex from MTX_SPIN to MTX_DEF (oops) Fix small ref-counting bug. remove warning on one2many type.
|
#
71650 |
|
25-Jan-2001 |
julian |
Only clear the 'free' bit if we were successful in getting a queue item off the free list.
Found by: Harti Brandt (address unknown)
|
#
71603 |
|
24-Jan-2001 |
julian |
Don't crash the kernel if the user tries to load a netgraph module with the wrong version number.
|
#
71380 |
|
22-Jan-2001 |
julian |
Add MTX_SPIN to an mtx_init(
|
#
71354 |
|
21-Jan-2001 |
julian |
remove stupid braino (recursive mutex) tripped over by: PHK
|
#
71047 |
|
14-Jan-2001 |
julian |
Add a generic "queued function callin" mechanism Use it to implement (hopefully) SMP safe node/hook addition and removal. Fix some debug stuff.
|
#
70942 |
|
11-Jan-2001 |
julian |
remove debug sysctl slight tweek to hook removal. (or is that tweak?)
|
#
70939 |
|
11-Jan-2001 |
julian |
Make hook deletion SMP safe.
|
#
70935 |
|
11-Jan-2001 |
julian |
Add an exported function ng_rmhook_self() that removes a hook from a node, but does it via the locking queue, thus ensuring that the node is locked when it's hook is removed.
Add 'deadnode' and 'deadhook' structures for when a node or hook is invalidated but not yet freed. (not yet freed)
|
#
70917 |
|
11-Jan-2001 |
archie |
Unbreak compilation.
|
#
70912 |
|
10-Jan-2001 |
julian |
Changes to stop zombie nodes showing up in active node lists. Also some changes resulting from debug work done earlier.
|
#
70791 |
|
08-Jan-2001 |
julian |
Bad julian.. forgot to destroy mutex before freeing the structure it was part of!
|
#
70784 |
|
08-Jan-2001 |
julian |
Part 2 of the netgraph rewrite. This is mostly cosmetic changes, (though I caught a bug or two while makeing them) Reviewed by: archie@freebsd.org
|
#
70700 |
|
05-Jan-2001 |
julian |
Rewrite of netgraph to start getting ready for SMP. This version is functional and is aproaching solid.. notice I said APROACHING. There are many node types I cannot test I have tested: echo hole ppp socket vjc iface tee bpf async tty The rest compile and "Look" right. More changes to follow. DEBUGGING is enabled in this code to help if people have problems.
|
#
70159 |
|
18-Dec-2000 |
julian |
Divorce the kernel binary ABI version number from the message format version number. (userland programs should not need to be recompiled when the netgraph kernel internal ABI is changed.
Also fix modules that don;t handle the fact that a caller may not supply a return message pointer. (benign at the moment because the calling code checks, but that will change)
|
#
69923 |
|
12-Dec-2000 |
julian |
oops that commit included a local hack... take it out..
|
#
69922 |
|
12-Dec-2000 |
julian |
Reviewed by: Archie@freebsd.org This clears out my outstanding netgraph changes. There is a netgraph change of design in the offing and this is to some extent a superset of soem of the new functionality and some of the old functionality that may be removed.
This code works as before, but allows some new features that I want to work with and evaluate. It is the basis for a version of netgraph with integral locking for SMP use.
This is running on my test machine with no new problems :-)
|
#
69519 |
|
02-Dec-2000 |
julian |
Add splhigh()s to protect against a race condition that shows up when running with ethernet bridging at high speed.
Submitted by: Chris Csanady <ccsanady@iastate.edu> (and extended by me)
|
#
68876 |
|
18-Nov-2000 |
dwmalone |
Add the use of M_ZERO to netgraph.
Submitted by: josh@zipperup.org Submitted by: Robert Drehmel <robd@gmx.net> Submitted by: archie Approved by: archie
|
#
67506 |
|
24-Oct-2000 |
julian |
Since neither archie nor I work at Whistle any more, change our email addresses to be the more usefu @freebsd.org ones so we can keep getting bug-reports. - man pages to follow..
|
#
64510 |
|
10-Aug-2000 |
archie |
Use a bigger buffer for NGM_BINARY2ASCII conversion, to handle really long ASCII control messages.
|
#
63675 |
|
20-Jul-2000 |
archie |
Allocate memory with M_NOWAIT instead of M_WAITOK, because it's possible for these routines to be called from an interrupt context.
PR: kern/20057
|
#
62471 |
|
03-Jul-2000 |
phk |
Experiemntal ascii based device configuration mechanism.
This may or may not survive, decision will be made well before 5.0-R
|
#
60938 |
|
26-May-2000 |
jake |
Back out the previous change to the queue(3) interface. It was not discussed and should probably not happen.
Requested by: msmith and others
|
#
60833 |
|
23-May-2000 |
jake |
Change the way that the queue(3) structures are declared; don't assume that the type argument to *_HEAD and *_ENTRY is a struct.
Suggested by: phk Reviewed by: phk Approved by: mdodd
|
#
59900 |
|
02-May-2000 |
archie |
Don't assume *lasthook is initialized in ng_path2node().
|
#
59879 |
|
01-May-2000 |
archie |
Use 'type_name' structure field instead of 'typename', which is a C++ reserved work.
Add a ng_copy_meta() function.
|
#
59875 |
|
01-May-2000 |
peter |
A temporary band-aid for ng_base. It works for some people, a better fix will follow.
Submitted by: Gary Jennejohn <garyj@muc.de>
|
#
59756 |
|
29-Apr-2000 |
peter |
Minimal tweak to make the ng_XXX modules depend on netgraph so that they see its symbols and link ok.
|
#
59728 |
|
28-Apr-2000 |
julian |
Two simple changes to the kernel internal API for netgraph modules, to support future work in flow-control and 'packet reject/replace' processing modes.
reviewed by: phk, archie
|
#
59178 |
|
12-Apr-2000 |
archie |
Fix uninitialized variable.
PR: kern/17911 Submitted by: Tom Pavel <pavel@alum.mit.edu>
|
#
58013 |
|
13-Mar-2000 |
archie |
Some minor prototype tweaks.
|
#
54249 |
|
07-Dec-1999 |
julian |
Remove a bunch of un-needed includes. Submitted by: phk@freebsd.org
|
#
54096 |
|
03-Dec-1999 |
archie |
Add a new function ng_findhook() for finding a node's hook; if the node type provides a more efficient implementation than the normal linear scan, use it.
Reviewed by: julian
|
#
53913 |
|
30-Nov-1999 |
archie |
Add two new generic control messages, NGM_ASCII2BINARY and NGM_BINARY2ASCII, which convert control messages to ASCII and back. This allows control messages to be sent and received in ASCII form using ngctl(8), which makes ngctl a lot more useful.
This also allows all the type-specific debugging code in libnetgraph to go away -- instead, we just ask the node itself to do the ASCII translation for us.
Currently, all generic control messages are supported, as well as messages associated with the following node types: async, cisco, ksocket, and ppp.
See /usr/share/examples/netgraph/ngctl for an example of using this.
Also give ngctl(8) the ability to print out incoming data and control messages at any time. Eventually nghook(8) may be subsumed.
Several other misc. bug fixes.
Reviewed by: julian
|
#
53648 |
|
23-Nov-1999 |
archie |
Change the prototype of the strto* routines to make the second parameter a char ** instead of a const char **. This make these kernel routines consistent with the corresponding libc userland routines.
Which is actually 'correct' is debatable, but consistency and following the spec was deemed more important in this case.
Reviewed by (in concept): phk, bde
|
#
53403 |
|
19-Nov-1999 |
archie |
Use KASSERT() instead of old #ifdef DIAGNOSTICS. Add more INVARIANTS-enabled sanity checking.
|
#
53042 |
|
08-Nov-1999 |
julian |
Remove a null pointer reference
Submitted by: Brian Somers (brian@freebsd.org)
|
#
52951 |
|
07-Nov-1999 |
julian |
Be more accepting about the format of node IDs. Submitted by: Brian Somers <brian@Awfulhak.org>
|
#
52843 |
|
03-Nov-1999 |
phk |
Move isfoo() and friends to the newly created sys/ctype.h.
Urged by: bde
|
#
52816 |
|
02-Nov-1999 |
archie |
Simplify checking/parsing of strings using strtoul(), isdigit(), etc.
|
#
52722 |
|
31-Oct-1999 |
julian |
Start making the contents of the generic framework opaque to the nodes. This step: IDs are no-longer the address of the node. Reviewd by: Archie@freebsd.org
|
#
52419 |
|
21-Oct-1999 |
julian |
Whistle's Netgraph link-layer (sometimes more) networking infrastructure. Been in production for 3 years now. Gives Instant Frame relay to if_sr and if_ar drivers, and PPPOE support soon. See: ftp://ftp.whistle.com/pub/archie/netgraph/index.html for on-line manual pages.
Reviewed by: Doug Rabson (dfr@freebsd.org) Obtained from: Whistle CVS tree
|