aboutsummaryrefslogtreecommitdiff
path: root/sys/netgraph/ng_bridge.c
Commit message (Collapse)AuthorAgeFilesLines
* ng_bridge: allow to automatically assign numbers to new hooksDavid Marker2024-04-081-23/+81
| | | | | | | | | | This will allow a userland machinery that orchestrates a bridge (e.g. a jail or vm manager) to not double the number allocation logic. See bug 278130 for longer description and examples. Reviewed by: glebius, afedorov Differential Revision: https://reviews.freebsd.org/D44615 PR: 278130
* sys: Remove $FreeBSD$: two-line .h patternWarner Losh2023-08-161-2/+0
| | | | Remove /^\s*\*\n \*\s+\$FreeBSD\$$\n/
* ipfw: garbage collect ip_fw_chk_ptrGleb Smirnoff2023-03-031-10/+0
| | | | | It is a relict left from the old times when ipfw(4) was hooked into IP stack directly, without pfil(9).
* netgraph: Remove the rethook parameter from NG_NODE_FOREACH_HOOK.John Baldwin2022-04-121-8/+3
| | | | | | This parameter was set to the hook that terminated the iteration early. However, none of the remaining callers used this argument and it was always set to an otherwise-unused variable.
* ng_bridge: count item allocation failures as memory failuresGleb Smirnoff2021-11-231-0/+2
| | | | Submitted by: Dmitry Luhtionov <dmitryluhtionov gmail.com>
* ng_bridge: Use M_NOWAIT when allocating memory in the newhook routineMark Johnston2021-08-131-32/+52
| | | | | | | | | | | newhook can be invoked by ngthread, which runs in a network epoch section and is thus not permitted to perform M_WAITOK allocations. Reported by: Jenkins Reviewed by: donner, afedorov MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D31486
* netgraph/bridge: malloc without flagsLutz Donnerhacke2021-06-141-3/+1
| | | | | | | | | | During tests an assert was triggered and pointed to missing flags in the newlink function of ng_bridge(4). Reported by: markj Reviewed by: markj MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D30759
* netgraph/ng_bridge: Handle send errors during loop handlingLutz Donnerhacke2021-05-131-25/+30
| | | | | | | | | | | | | If sending out a packet fails during the loop over all links, the allocated memory is leaked and not all links receive a copy. This patch fixes those problems, clarifies a premature abort of the loop, and fixes a minory style(9) bug. PR: 255430 Submitted by: Dancho Penev Tested by: Dancho Penev MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D30008
* netgraph/ng_bridge: Avoid cache thrashingLutz Donnerhacke2021-05-131-1/+2
| | | | | | | | | | | Hint the compiler, that this update is needed at most once per second. Only in this case the memory line needs to be written. This will reduce the amount of cache trashing during forward of most frames. Suggested by: zec Approved by: zec MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D28601
* netgraph/ng_bridge: become SMP awareLutz Donnerhacke2021-05-131-9/+0
| | | | | | | | | | The node ng_bridge underwent a lot of changes in the last few months. All those steps were necessary to distinguish between structure modifying and read-only data transport paths. Now it's done, the node can perform frame forwarding on multiple cores in parallel. MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D28123
* netgraph/ng_bridge: move MACs via control messageLutz Donnerhacke2021-05-131-63/+49
| | | | | | | | | | | | | | | Use the new control message to move ethernet addresses from a link to a new link in ng_bridge(4). Send this message instead of doing the work directly requires to move the loop detection into the control message processing. This will delay the loop detection by a few frames. This decouples the read-only activity from the modification under a more strict writer lock. Reviewed by: manpages (gbe) MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D28559
* netgraph/ng_bridge: learn MACs via control messageLutz Donnerhacke2021-05-041-9/+60
| | | | | | | | | | | | | Add a new control message to move ethernet addresses to a given link in ng_bridge(4). Send this message instead of doing the work directly. This decouples the read-only activity from the modification under a more strict writer lock. Decoupling the work is a prerequisite for multithreaded operation. Approved by: manpages (bcr), kp (earlier version) MFC: 3 weeks Differential Revision: https://reviews.freebsd.org/D28516
* netgraph/ng_bridge: Add counters for the first link, tooLutz Donnerhacke2021-02-101-21/+38
| | | | | | | | | | | For broadcast, multicast and unknown unicast, the replication loop sends a copy of the packet to each link, beside the first one. This special path is handled later, but the counters are not updated. Factor out the common send and count actions as a function. Reviewed by: kp MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D28537
* netgraph/ng_bridge: Document staleness in multithreaded operationLutz Donnerhacke2021-02-091-1/+4
| | | | | | | | | | | | In the data path of ng_bridge(4), the only value of the host struct, which needs to be modified, is the staleness, which is reset every time a frame is received. It's save to leave the code as it is. This patch is part of a series to make ng_bridge(4) multithreaded. Reviewed by: kp MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D28546
* netgraph/ng_bridge: Merge internal structuresLutz Donnerhacke2021-02-091-41/+44
| | | | | | | | | | | | | | | | In a earlier version of ng_bridge(4) the exernal visible host entry structure was a strict subset of the internal one. So internal view was a direct annotation of the external structure. This strict inheritance was lost many versions ago. There is no need to encapsulate a part of the internal represntation as a separate structure. This patch is a preparation to make the internal structure read only in the data path in order to make ng_bridge(4) multithreaded. Reviewed by: kp MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D28545
* netgraph/ng_bridge: Make simple internal functions read-onlyLutz Donnerhacke2021-02-071-4/+6
| | | | | | | | | | | | | | | The data path in netgraph is designed to work on an read only state of the whole netgraph network. Currently this is achived by convention, there is no technical enforcment. In the case of NETGRAPH_DEBUG all nodes can be annotated for debugging purposes, so the strict enforcment needs to be lifted for this purpose. This patch is part of a series to make ng_bridge multithreaded, which is done by rewrite the data path to operate on const. Reviewed By: kp MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D28141
* Revert "netgraph/ng_bridge: Make simple internal functions read-only"Lutz Donnerhacke2021-02-071-6/+4
| | | | | | Patch mass breaks LINT kernels. This reverts commit bb67e52db143b699bdac1830717930b26a7b5766.
* netgraph/ng_bridge: Make simple internal functions read-onlyLutz Donnerhacke2021-02-071-4/+6
| | | | | | | | | | | | The data path in netgraph is designed to work on an read only state of the whole netgraph network. Currently this is achived by convetion, there is no technical enforcment. This patch is part of a series to make ng_brigde multithreaded, which is done by rewrite the data path to const handling. Reviewed By: kp MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D28141
* netgraph/ng_bridge: Remove old table ABILutz Donnerhacke2021-02-071-69/+0
| | | | | | | | | | | | | This was announced to happen after the 12 relases. Remove a depeciated ABI. The complete removal is for HEAD only. I'll remove the #define in stable/13 as MFC, so the code will still exist in 13.x, but will not included by default. Earlier versions will not be affected. Reviewed by: kp MFC after: 5 days Differential Revision: https://reviews.freebsd.org/D28518
* netgraph/ng_bridge: switch stats to counter frameworkLutz Donnerhacke2021-02-061-25/+108
| | | | | | | | | This is the first patch of a series of necessary steps to make ng_bridge(4) multithreaded. Reviewed by: melifaro (network), afedorov MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D28125
* netgraph/ng_bridge: Derive forwarding mode from first attached hookLutz Donnerhacke2021-02-061-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | | Handling of unknown MACs on an bridge with incomplete learning capabilites (aka uplink ports) can be defined in different ways. The classical approach is to broadcast unicast frames send to an unknown MAC, because the unknown devices can be everywhere. This mode is default for ng_bridge(4). In the case of dedicated uplink ports, which prohibit learning of MAC addresses in order to save memory and CPU cycles, the broadcast approach is dangerous. All traffic to the uplink port is broadcasted to every downlink port, too. In this case, it's better to restrict the distribution of frames to unknown MAC to the uplink ports only. In order to keep the chance small and the handling as natural as possible, the first attached link is used to determine the behaviour of the bridge: If it is an "uplink" port, then the bridge switch from classical mode to restricted mode. Reviewed By: kp Approved by: kp (mentor) MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D28487
* netgraph/ng_bridge: Introduce "uplink" ports without MAC learningLutz Donnerhacke2021-02-061-35/+60
| | | | | | | | | | | | | | | | | | | | | The ng_bridge(4) node is designed to work in moderately small environments. Connecting such a node to a larger network rapidly fills the MAC table for no reason. It even become complicated to obtain data from the gettable message, because the result is too large to transmit. This patch introduces, two new functionality bits on the hooks: - Allow or disallow MAC address learning for incoming patckets. - Allow or disallow sending unknown MACs through this hook. Uplinks are characterized by denied learing while sending out unknowns. Normal links are charaterized by allowed learning and sending out unknowns. Reviewed by: kp Approved by: kp (mentor) MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D23963
* net: clean up empty lines in .c and .h filesMateusz Guzik2020-09-011-9/+1
| | | | Notes: svn path=/head/; revision=365071
* netgraph/ng_bridge: Reestablish old ABIBjoern A. Zeeb2020-01-051-0/+66
| | | | | | | | | | | | | | | | | In order to be able to merge r353026 bring back support for the old cookie API for a transition period in 12.x releases (and possibly 13) before the old API can be removed again entirely. Suggested by: julian Submitted by: Lutz Donnerhacke (lutz donnerhacke.de) PR: 240787 Reviewed by: julian MFC after: 2 weeks X-MFC with: r353026 Differential Revision: https://reviews.freebsd.org/D21961 Notes: svn path=/head/; revision=356386
* Fix regression from r353026. Pointer was increased instead of valueGleb Smirnoff2019-11-021-1/+1
| | | | | | | | | | pointed to. PR: 241646 Submitted by: Aleksandr Fedorov <aleksandr.fedorov itglobal.com> Notes: svn path=/head/; revision=354244
* Fix build failure from r353026. Somehow module build allowed this.Gleb Smirnoff2019-10-031-5/+9
| | | | | | | Pointy hat to: glebius Notes: svn path=/head/; revision=353030
* - Remove the compile time limit for number of links a ng_bridge nodeGleb Smirnoff2019-10-031-222/+205
| | | | | | | | | | | | | can handle. Instead using an array on node private data, use per-hook private data. - Use NG_NODE_FOREACH_HOOK() to traverse through hooks instead of array. PR: 240787 Submitted by: Lutz Donnerhacke <lutz donnerhacke.de> Differential Revision: https://reviews.freebsd.org/D21803 Notes: svn path=/head/; revision=353026
* Revert r327828, r327949, r327953, r328016-r328026, r328041:Pedro F. Giffuni2018-01-211-1/+1
| | | | | | | | | | | | | | | | | | Uses of mallocarray(9). The use of mallocarray(9) has rocketed the required swap to build FreeBSD. This is likely caused by the allocation size attributes which put extra pressure on the compiler. Given that most of these checks are superfluous we have to choose better where to use mallocarray(9). We still have more uses of mallocarray(9) but hopefully this is enough to bring swap usage to a reasonable level. Reported by: wosch PR: 225197 Notes: svn path=/head/; revision=328218
* netgraph: make some use of mallocarray(9).Pedro F. Giffuni2018-01-151-1/+1
| | | | | | | | | | | | | | | | Focus on code where we are doing multiplications within malloc(9). None of these ire likely to overflow, however the change is still useful as some static checkers can benefit from the allocation attributes we use for mallocarray. This initial sweep only covers malloc(9) calls with M_NOWAIT. No good reason but I started doing the changes before r327796 and at that time it was convenient to make sure the sorrounding code could handle NULL values. X-Differential revision: https://reviews.freebsd.org/D13837 Notes: svn path=/head/; revision=328024
* sys/netgraph: spelling fixes in comments.Pedro F. Giffuni2016-04-291-1/+1
| | | | | | | No functional change. Notes: svn path=/head/; revision=298813
* NG_NODE_NAME(node) is always not NULL. Use correct macro.Gleb Smirnoff2014-11-021-1/+1
| | | | | | | Submitted by: Dmitry Luhtionov <dmitryluhtionov gmail.com> Notes: svn path=/head/; revision=273960
* The r48589 promised to remove implicit inclusion of if_var.h soon. PrepareGleb Smirnoff2013-10-261-0/+1
| | | | | | | | | | | to this event, adding if_var.h to files that do need it. Also, include all includes that now are included due to implicit pollution via if_var.h Sponsored by: Netflix Sponsored by: Nginx, Inc. Notes: svn path=/head/; revision=257176
* Mechanically substitute flags from historic mbuf allocator withGleb Smirnoff2012-12-051-1/+1
| | | | | | | | | | | | malloc(9) flags within sys. Exceptions: - sys/contrib not touched - sys/mbuf.h edited manually Notes: svn path=/head/; revision=243882
* Mark MALLOC_DEFINEs static that have no corresponding MALLOC_DECLAREs.Ed Schouten2011-11-071-1/+2
| | | | | | | This means that their use is restricted to a single C file. Notes: svn path=/head/; revision=227293
* Node constructor methods are supposed to be called in syscallGleb Smirnoff2011-04-181-8/+2
| | | | | | | | | | context always. Convert nodes to consistently use M_WAITOK flag for memory allocation. Reviewed by: julian Notes: svn path=/head/; revision=220768
* Add an optional "persistent" flag to ng_hub and ng_bridge, which if set,Marko Zec2010-05-051-2/+16
| | | | | | | | | disables automatic node shutdown when the last hook gets disconnected. Reviewed by: julian Notes: svn path=/head/; revision=207680
* add ip_fw_private.h to ng_ipfw.c, forgotten in previous commit;Luigi Rizzo2009-12-151-1/+2
| | | | | | | | | comment out remove ip_fw.h from ng_bridge.c, as it seems unused. MFC after: 1 month Notes: svn path=/head/; revision=200582
* Virtualize the pfil hooks so that different jails may chose differentJulian Elischer2009-10-111-1/+1
| | | | | | | | | | | packet filters. ALso allows ipfw to be enabled on on ejail and disabled on another. In 8.0 it's a global setting. Sitting aroung in tree waiting to commit for: 2 months MFC after: 2 months Notes: svn path=/head/; revision=197952
* Merge the remainder of kern_vimage.c and vimage.h into vnet.c andRobert Watson2009-08-011-1/+1
| | | | | | | | | | | | | 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) Notes: svn path=/head/; revision=196019
* Conditionally compile out V_ globals while instantiating the appropriateMarko Zec2008-12-101-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 Notes: svn path=/head/; revision=185895
* Fix a number of style issues in the MALLOC / FREE commit. I've tried toDag-Erling Smørgrav2008-10-231-4/+7
| | | | | | | | be careful not to fix anything that was already broken; the NFSv4 code is particularly bad in this respect. Notes: svn path=/head/; revision=184214
* Retire the MALLOC and FREE macros. They are an abomination unto style(9).Dag-Erling Smørgrav2008-10-231-16/+12
| | | | | | | MFC after: 3 months Notes: svn path=/head/; revision=184205
* Commit step 1 of the vimage project, (network stack)Bjoern A. Zeeb2008-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 Notes: svn path=/head/; revision=181803
* In revision 1.29 timeout() was converted to ng_callout().Ruslan Ermilov2005-02-091-15/+9
| | | | | | | | | | | | | | | | | | | | | | | | The difference is that the callout function installed via the ng_callout() method is guaranteed to NOT fire after the shutdown method was run (when a node is marked NGF_INVALID). Also, the shutdown method and the callout function are guaranteed to NOT run at the same time, as both require the writer lock. Thus we can safely ignore a zero return value from ng_uncallout() (callout_stop()) in shutdown methods, and go on with freeing the node. The said revision broke the node shutdown -- ng_bridge_timeout() is no longer fired after ng_bridge_shutdown() was run, resulting in a memory leak, dead nodes, and inability to unload the module. Fix this by cancelling the callout on shutdown, and moving part responsible for freeing a node resources from ng_bridge_timer() to ng_bridge_shutdown(). Noticed by: ru Submitted by: glebius, ru Notes: svn path=/head/; revision=141574
* /* -> /*- for license, minor formatting changesWarner Losh2005-01-071-2/+3
| | | | Notes: svn path=/head/; revision=139823
* - Use ng_callout() instead of timeout.Gleb Smirnoff2004-12-141-13/+7
| | | | | | | | | | | - Schedule next timeout *after* finishing job of the current one. - Remove spl(9) calls. Tested by: ru Reviewed by: julian Notes: svn path=/head/; revision=138834
* Convert ipfw to use PFIL_HOOKS. This is change is transparent to userlandAndre Oppermann2004-08-171-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | and preserves the ipfw ABI. The ipfw core packet inspection and filtering functions have not been changed, only how ipfw is invoked is different. However there are many changes how ipfw is and its add-on's are handled: In general ipfw is now called through the PFIL_HOOKS and most associated magic, that was in ip_input() or ip_output() previously, is now done in ipfw_check_[in|out]() in the ipfw PFIL handler. IPDIVERT is entirely handled within the ipfw PFIL handlers. A packet to be diverted is checked if it is fragmented, if yes, ip_reass() gets in for reassembly. If not, or all fragments arrived and the packet is complete, divert_packet is called directly. For 'tee' no reassembly attempt is made and a copy of the packet is sent to the divert socket unmodified. The original packet continues its way through ip_input/output(). ipfw 'forward' is done via m_tag's. The ipfw PFIL handlers tag the packet with the new destination sockaddr_in. A check if the new destination is a local IP address is made and the m_flags are set appropriately. ip_input() and ip_output() have some more work to do here. For ip_input() the m_flags are checked and a packet for us is directly sent to the 'ours' section for further processing. Destination changes on the input path are only tagged and the 'srcrt' flag to ip_forward() is set to disable destination checks and ICMP replies at this stage. The tag is going to be handled on output. ip_output() again checks for m_flags and the 'ours' tag. If found, the packet will be dropped back to the IP netisr where it is going to be picked up by ip_input() again and the directly sent to the 'ours' section. When only the destination changes, the route's 'dst' is overwritten with the new destination from the forward m_tag. Then it jumps back at the route lookup again and skips the firewall check because it has been marked with M_SKIP_FIREWALL. ipfw 'forward' has to be compiled into the kernel with 'option IPFIREWALL_FORWARD' to enable it. DUMMYNET is entirely handled within the ipfw PFIL handlers. A packet for a dummynet pipe or queue is directly sent to dummynet_io(). Dummynet will then inject it back into ip_input/ip_output() after it has served its time. Dummynet packets are tagged and will continue from the next rule when they hit the ipfw PFIL handlers again after re-injection. BRIDGING and IPFW_ETHER are not changed yet and use ipfw_chk() directly as they did before. Later this will be changed to dedicated ETHER PFIL_HOOKS. More detailed changes to the code: conf/files Add netinet/ip_fw_pfil.c. conf/options Add IPFIREWALL_FORWARD option. modules/ipfw/Makefile Add ip_fw_pfil.c. net/bridge.c Disable PFIL_HOOKS if ipfw for bridging is active. Bridging ipfw is still directly invoked to handle layer2 headers and packets would get a double ipfw when run through PFIL_HOOKS as well. netinet/ip_divert.c Removed divert_clone() function. It is no longer used. netinet/ip_dummynet.[ch] Neither the route 'ro' nor the destination 'dst' need to be stored while in dummynet transit. Structure members and associated macros are removed. netinet/ip_fastfwd.c Removed all direct ipfw handling code and replace it with the new 'ipfw forward' handling code. netinet/ip_fw.h Removed 'ro' and 'dst' from struct ip_fw_args. netinet/ip_fw2.c (Re)moved some global variables and the module handling. netinet/ip_fw_pfil.c New file containing the ipfw PFIL handlers and module initialization. netinet/ip_input.c Removed all direct ipfw handling code and replace it with the new 'ipfw forward' handling code. ip_forward() does not longer require the 'next_hop' struct sockaddr_in argument. Disable early checks if 'srcrt' is set. netinet/ip_output.c Removed all direct ipfw handling code and replace it with the new 'ipfw forward' handling code. netinet/ip_var.h Add ip_reass() as general function. (Used from ipfw PFIL handlers for IPDIVERT.) netinet/raw_ip.c Directly check if ipfw and dummynet control pointers are active. netinet/tcp_input.c Rework the 'ipfw forward' to local code to work with the new way of forward tags. netinet/tcp_sack.c Remove include 'opt_ipfw.h' which is not needed here. sys/mbuf.h Remove m_claim_next() macro which was exclusively for ipfw 'forward' and is no longer needed. Approved by: re (scottl) Notes: svn path=/head/; revision=133920
* Slight cosmetic changes.Julian Elischer2004-07-201-2/+2
| | | | | | | | | | | | 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. Notes: svn path=/head/; revision=132464
* Having moved metadata usage to mbuf tags, remove code that supportsJulian Elischer2004-06-261-13/+2
| | | | | | | | | the old way of doing it. Submitted by: Gleb Smirnoff <glebius@cell.sick.ru> Notes: svn path=/head/; revision=131155
* Fix a problem with multiple-delivery (i.e. broadcast) in ng_bridge.Brian Feldman2004-06-221-3/+5
| | | | | | | | | | | | Only the first link0..link$NLINKS hooks would be utilized, whereas the link hooks may be connected sparsely. Add a counter variable so that the link hook array is only traversed while there is still work to do, but that it continues up to the end if it has to. Notes: svn path=/head/; revision=130931