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
|
243882 |
05-Dec-2012 |
glebius |
Mechanically substitute flags from historic mbuf allocator with malloc(9) flags within sys.
Exceptions:
- sys/contrib not touched - sys/mbuf.h edited manually
|
229621 |
05-Jan-2012 |
jhb |
Convert all users of IF_ADDR_LOCK to use new locking macros that specify either a read lock or write lock.
Reviewed by: bz MFC after: 2 weeks
|
227309 |
07-Nov-2011 |
ed |
Mark all SYSCTL_NODEs static that have no corresponding SYSCTL_DECLs.
The SYSCTL_NODE macro defines a list that stores all child-elements of that node. If there's no SYSCTL_DECL macro anywhere else, there's no reason why it shouldn't be static.
|
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.
|
196330 |
17-Aug-2009 |
jhb |
Remove the spx_usrreq.c mergeinfo from spx_reass.c. Future changes to spx_usrreq.c won't be merged to spx_reass.c which is what this would help with.
Approved by: re (blanket mergeinfo), rwatson
|
194905 |
24-Jun-2009 |
rwatson |
Use queue(9) instead of hand-crafted link lists for the global IPX address list (ipx_ifaddr -> ipx_ifaddrhead), and generally adopt the naming and usage conventions found in netinet.
MFC after: 6 weeks
|
194857 |
24-Jun-2009 |
rwatson |
Rework locking and reference counting in ipx_control to be consistent with the model used in in_control().
MFC after: 6 weeks
|
194760 |
23-Jun-2009 |
rwatson |
Modify most routines returning 'struct ifaddr *' to return references rather than pointers, requiring callers to properly dispose of those references. The following routines now return references:
ifaddr_byindex ifa_ifwithaddr ifa_ifwithbroadaddr ifa_ifwithdstaddr ifa_ifwithnet ifaof_ifpforaddr ifa_ifwithroute ifa_ifwithroute_fib rt_getifa rt_getifa_fib IFP_TO_IA ip_rtaddr in6_ifawithifp in6ifa_ifpforlinklocal in6ifa_ifpwithaddr in6_ifadd carp_iamatch6 ip6_getdstifaddr
Remove unused macro which didn't have required referencing:
IFP_TO_IA6
This closes many small races in which changes to interface or address lists while an ifaddr was in use could lead to use of freed memory (etc). In a few cases, add missing if_addr_list locking required to safely acquire references.
Because of a lack of deep copying support, we accept a race in which an in6_ifaddr pointed to by mbuf tags and extracted with ip6_getdstifaddr() doesn't hold a reference while in transmit. Once we have mbuf tag deep copy support, this can be fixed.
Reviewed by: bz Obtained from: Apple, Inc. (portions) MFC after: 6 weeks (portions)
|
194750 |
23-Jun-2009 |
cognet |
Include sys/lock.h before sys/rwlock.h. If anything used to bring it for us before, it does not anymore.
|
194622 |
22-Jun-2009 |
rwatson |
Add a new function, ifa_ifwithaddr_check(), which rather than returning a pointer to an ifaddr matching the passed socket address, returns a boolean indicating whether one was present. In the (near) future, ifa_ifwithaddr() will return a referenced ifaddr rather than a raw ifaddr pointer, and the new wrapper will allow callers that care only about the boolean condition to avoid having to free that reference.
MFC after: 3 weeks
|
194610 |
21-Jun-2009 |
rwatson |
Add ipx_ifaddr locking to ipx_control(), which should close most remaining potential races in ifconfig's management of IPX addresses.
This is largely accomplished by dropping a global write lock for the IPX address list over the body of in_control(), although there are some places we bump the refcount on an ifaddr of interest while calling out to the routing code or link layer code, which might require revisiting.
Annotate one as a potential race if two simultaneous delete ioctls are issued for the same IPX addresses at once.
MFC after: 3 weeks
|
194608 |
21-Jun-2009 |
rwatson |
Introduce basic locking of global IPX address list 'ipx_ifaddr' using a new rwlock, ipx_ifaddr_rw, wrapped with macros. This locking is necessary but not sufficient, in isolation, to satisfy the stability requirements of a fully parallel IPX input path during interface reconfiguration.
MFC after: 3 weeks
|
194606 |
21-Jun-2009 |
rwatson |
In ipx_control(), lock if_addr_mtx when adding/removing addresses from interface address lists, and don't add an address until it's fully initialized.
MFC after: 3 weeks
|
194602 |
21-Jun-2009 |
rwatson |
Clean up common ifaddr management:
- Unify reference count and lock initialization in a single function, ifa_init(). - Move tear-down from a macro (IFAFREE) to a function ifa_free(). - Move reference count bump from a macro (IFAREF) to a function ifa_ref(). - Instead of using a u_int protected by a mutex to refcount(9) for reference count management.
The ifa_mtx is now used for exactly one ioctl, and possibly should be removed.
MFC after: 3 weeks
|
194595 |
21-Jun-2009 |
rwatson |
Minor style cleanups.
MFC after: 3 days
|
194591 |
21-Jun-2009 |
rwatson |
Remove unuxed ipx_zerohost.
MFC after: 3 days
|
194590 |
21-Jun-2009 |
rwatson |
Update copyright on netipx.
|
194580 |
21-Jun-2009 |
rwatson |
Remove historical support for capturing IPX packets in the output path using raw IPX sockets. While functional, this support is disabled using a flag that can't be changed from userspace, and google reveals no documentation or use of that flag anywhere. This eliminates a potential lock order reversal and code reentrance issue in which the output path reentered the input path in IPX.
An alternative to removal would be to use the netisr, as a comment I added in 2005 suggests. While this change is fairly straight-forward, the lack of any consumers or the easy possibility of consumers (kernel modification and recompile required) suggests that this is simply an unused feature.
Update README to remove this TODO, and a TODO regarding IPX/IP encapsulation which was also removed a few years ago.
MFC after: 1 week
|
194561 |
20-Jun-2009 |
rwatson |
Implement socket delivery MAC checks for IPX/SPX.
Obtained from: TrustedBSD Project MFC after: 3 days
|
194547 |
20-Jun-2009 |
rwatson |
Rework SPX segment reassembly, which was originally based on our TCP reassembly but failed to be modernized over time:
- Use queue(9). - Specifically allocate queue entries of type M_SPXREASSQ to point at member mbufs, rather than casting mbuf data to 'spx_q'. - Maintain the mbuf pointer as part of the queue entry so that we can later free the mbuf without using dtom().
|
194545 |
20-Jun-2009 |
rwatson |
Invoke the MAC Framework's mac_socket_create_mbuf() entry point when generating IPX output for SPX sockets.
Obtained from: TrustedBSD Project
|
194544 |
20-Jun-2009 |
rwatson |
Invoke the MAC Framework's mac_socket_create_mbuf() entry point when generating IPX output for raw and datagram IPX sockets.
Obtained from: TrustedBSD Project
|
193892 |
10-Jun-2009 |
bz |
Put the variable declarations for TCPDEBUG under #ifdef INET as well. The implementation already has this right.
Reviewed by: rwatson
|
193219 |
01-Jun-2009 |
rwatson |
Reimplement the netisr framework in order to support parallel netisr threads:
- Support up to one netisr thread per CPU, each processings its own workstream, or set of per-protocol queues. Threads may be bound to specific CPUs, or allowed to migrate, based on a global policy.
In the future it would be desirable to support topology-centric policies, such as "one netisr per package".
- Allow each protocol to advertise an ordering policy, which can currently be one of:
NETISR_POLICY_SOURCE: packets must maintain ordering with respect to an implicit or explicit source (such as an interface or socket).
NETISR_POLICY_FLOW: make use of mbuf flow identifiers to place work, as well as allowing protocols to provide a flow generation function for mbufs without flow identifers (m2flow). Falls back on NETISR_POLICY_SOURCE if now flow ID is available.
NETISR_POLICY_CPU: allow protocols to inspect and assign a CPU for each packet handled by netisr (m2cpuid).
- Provide utility functions for querying the number of workstreams being used, as well as a mapping function from workstream to CPU ID, which protocols may use in work placement decisions.
- Add explicit interfaces to get and set per-protocol queue limits, and get and clear drop counters, which query data or apply changes across all workstreams.
- Add a more extensible netisr registration interface, in which protocols declare 'struct netisr_handler' structures for each registered NETISR_ type. These include name, handler function, optional mbuf to flow ID function, optional mbuf to CPU ID function, queue limit, and ordering policy. Padding is present to allow these to be expanded in the future. If no queue limit is declared, then a default is used.
- Queue limits are now per-workstream, and raised from the previous IFQ_MAXLEN default of 50 to 256.
- All protocols are updated to use the new registration interface, and with the exception of netnatm, default queue limits. Most protocols register as NETISR_POLICY_SOURCE, except IPv4 and IPv6, which use NETISR_POLICY_FLOW, and will therefore take advantage of driver- generated flow IDs if present.
- Formalize a non-packet based interface between interface polling and the netisr, rather than having polling pretend to be two protocols. Provide two explicit hooks in the netisr worker for start and end events for runs: netisr_poll() and netisr_pollmore(), as well as a function, netisr_sched_poll(), to allow the polling code to schedule netisr execution. DEVICE_POLLING still embeds single-netisr assumptions in its implementation, so for now if it is compiled into the kernel, a single and un-bound netisr thread is enforced regardless of tunable configuration.
In the default configuration, the new netisr implementation maintains the same basic assumptions as the previous implementation: a single, un-bound worker thread processes all deferred work, and direct dispatch is enabled by default wherever possible.
Performance measurement shows a marginal performance improvement over the old implementation due to the use of batched dequeue.
An rmlock is used to synchronize use and registration/unregistration using the framework; currently, synchronized use is disabled (replicating current netisr policy) due to a measurable 3%-6% hit in ping-pong micro-benchmarking. It will be enabled once further rmlock optimization has taken place. However, in practice, netisrs are rarely registered or unregistered at runtime.
A new man page for netisr will follow, but since one doesn't currently exist, it hasn't been updated.
This change is not appropriate for MFC, although the polling shutdown handler should be merged to 7-STABLE.
Bump __FreeBSD_version.
Reviewed by: bz
|
192758 |
25-May-2009 |
rwatson |
Staticize spx_remque() now that it's only used from spx_reass.c.
|
192757 |
25-May-2009 |
rwatson |
Add missing call to ipx_pcbdetach() during SPX socket tear-down: not harmful in practice if running without INVARIANTS, but will panic with KASSERT enabled when SPX sockets are closed.
MFC after: 3 days
|
192756 |
25-May-2009 |
rwatson |
Eliminate use of dtom() in spx_output() by fixing up tracking of the containing mbuf for 'si' in local variable 'm'.
MFC after: 1 month
|
192755 |
25-May-2009 |
rwatson |
Prefer NULL to 0 for pointer assignments.
MFC after: 1 month
|
192754 |
25-May-2009 |
rwatson |
Rather than store a skeleton IPX header in an mbuf hung off the SPX PCB, simply embed it in the PCB, avoiding additional memory overhead, memory allocation overhead, and removing one of the few remaining uses of dtom() in the network stack.
Restore misplaced spx_ctlinput() from an earlier commit.
MFC after: 1 month
|
192753 |
25-May-2009 |
rwatson |
Pull SPX reassembly queue init and flush into spx_reass.c.
MFC after: 1 month
|
192748 |
25-May-2009 |
rwatson |
Prefer m_nextpkt to m_act when iterating mbuf queues.
MFC after: 1 month
|
192746 |
25-May-2009 |
rwatson |
Complete move of SPX reassembly from spx_usrreq.c to spx_reass.c.
MFC after: 1 month
|
192744 |
25-May-2009 |
rwatson |
Copy spx_usrreq.c to spx_reass.c in order to apply similar file layout changes to IPX/SPX that were applied to TCP/IP in the creation of tcp_reass.c.
MFC after: 1 month
|
191533 |
26-Apr-2009 |
ed |
Make the SPX code use its own copies of insque()/remque().
Instead of using the antique insque()/remque() functions from sys/queue.h, make this code use its own versions. Eventually the code should just use the regular TAILQ/LIST macros.
|
191148 |
16-Apr-2009 |
kmacy |
Change if_output to take a struct route as its fourth argument in order to allow passing a cached struct llentry * down to L2
Reviewed by: rwatson
|
185928 |
11-Dec-2008 |
rwatson |
Add missing "goto set_head" for SO_IPX_CHECKSUM; otherwise we fall through to the SO_HEADERS_ON_OUTPUT case and set that instead.
MFC after: 1 week Found with: Coverity Prevent(tm) Coverity ID: 3988
|
184205 |
23-Oct-2008 |
des |
Retire the MALLOC and FREE macros. They are an abomination unto style(9).
MFC after: 3 months
|
183113 |
17-Sep-2008 |
attilio |
Remove the suser(9) interface from the kernel. It has been replaced from years by the priv_check(9) interface and just very few places are left. Note that compatibility stub with older FreeBSD version (all above the 8 limit though) are left in order to reduce diffs against old versions. It is responsibility of the maintainers for any module, if they think it is the case, to axe out such cases.
This patch breaks KPI so __FreeBSD_version will be bumped into a later commit.
This patch needs to be credited 50-50 with rwatson@ as he found time to explain me how the priv_check() works in detail and to review patches.
Tested by: Giovanni Trematerra <giovanni dot trematerra at gmail dot com> Reviewed by: rwatson
|
180816 |
26-Jul-2008 |
trhodes |
Begin the sysctl descriptions with a capital letter. Make some slight wording tweaks.
|
180630 |
20-Jul-2008 |
trhodes |
Document a few sysctls.
Reviewed by: rwatson
|
180239 |
04-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.
|
179410 |
29-May-2008 |
rwatson |
Rather than m_free(dtom(si)) in spx_reass(), return (1) which causes the caller to free the mbuf without using dtom().
MFC after: 3 days
|
179408 |
29-May-2008 |
rwatson |
Correct minor comment typos, make white space use before block comments more consistent.
MFC after: 3 days
|
179332 |
26-May-2008 |
rwatson |
Avoid unnecessary one use of dtom(9) in spx_input().
MFC after: 3 days
|
178888 |
09-May-2008 |
julian |
Add code to allow the system to handle multiple routing tables. This particular implementation is designed to be fully backwards compatible and to be MFC-able to 7.x (and 6.x)
Currently the only protocol that can make use of the multiple tables is IPv4 Similar functionality exists in OpenBSD and Linux.
From my notes:
-----
One thing where FreeBSD has been falling behind, and which by chance I have some time to work on is "policy based routing", which allows different packet streams to be routed by more than just the destination address.
Constraints: ------------
I want to make some form of this available in the 6.x tree (and by extension 7.x) , but FreeBSD in general needs it so I might as well do it in -current and back port the portions I need.
One of the ways that this can be done is to have the ability to instantiate multiple kernel routing tables (which I will now refer to as "Forwarding Information Bases" or "FIBs" for political correctness reasons). Which FIB a particular packet uses to make the next hop decision can be decided by a number of mechanisms. The policies these mechanisms implement are the "Policies" referred to in "Policy based routing".
One of the constraints I have if I try to back port this work to 6.x is that it must be implemented as a EXTENSION to the existing ABIs in 6.x so that third party applications do not need to be recompiled in timespan of the branch.
This first version will not have some of the bells and whistles that will come with later versions. It will, for example, be limited to 16 tables in the first commit. Implementation method, Compatible version. (part 1) ------------------------------- For this reason I have implemented a "sufficient subset" of a multiple routing table solution in Perforce, and back-ported it to 6.x. (also in Perforce though not always caught up with what I have done in -current/P4). The subset allows a number of FIBs to be defined at compile time (8 is sufficient for my purposes in 6.x) and implements the changes needed to allow IPV4 to use them. I have not done the changes for ipv6 simply because I do not need it, and I do not have enough knowledge of ipv6 (e.g. neighbor discovery) needed to do it.
Other protocol families are left untouched and should there be users with proprietary protocol families, they should continue to work and be oblivious to the existence of the extra FIBs.
To understand how this is done, one must know that the current FIB code starts everything off with a single dimensional array of pointers to FIB head structures (One per protocol family), each of which in turn points to the trie of routes available to that family.
The basic change in the ABI compatible version of the change is to extent that array to be a 2 dimensional array, so that instead of protocol family X looking at rt_tables[X] for the table it needs, it looks at rt_tables[Y][X] when for all protocol families except ipv4 Y is always 0. Code that is unaware of the change always just sees the first row of the table, which of course looks just like the one dimensional array that existed before.
The entry points rtrequest(), rtalloc(), rtalloc1(), rtalloc_ign() are all maintained, but refer only to the first row of the array, so that existing callers in proprietary protocols can continue to do the "right thing". Some new entry points are added, for the exclusive use of ipv4 code called in_rtrequest(), in_rtalloc(), in_rtalloc1() and in_rtalloc_ign(), which have an extra argument which refers the code to the correct row.
In addition, there are some new entry points (currently called rtalloc_fib() and friends) that check the Address family being looked up and call either rtalloc() (and friends) if the protocol is not IPv4 forcing the action to row 0 or to the appropriate row if it IS IPv4 (and that info is available). These are for calling from code that is not specific to any particular protocol. The way these are implemented would change in the non ABI preserving code to be added later.
One feature of the first version of the code is that for ipv4, the interface routes show up automatically on all the FIBs, so that no matter what FIB you select you always have the basic direct attached hosts available to you. (rtinit() does this automatically).
You CAN delete an interface route from one FIB should you want to but by default it's there. ARP information is also available in each FIB. It's assumed that the same machine would have the same MAC address, regardless of which FIB you are using to get to it.
This brings us as to how the correct FIB is selected for an outgoing IPV4 packet.
Firstly, all packets have a FIB associated with them. if nothing has been done to change it, it will be FIB 0. The FIB is changed in the following ways.
Packets fall into one of a number of classes.
1/ locally generated packets, coming from a socket/PCB. Such packets select a FIB from a number associated with the socket/PCB. This in turn is inherited from the process, but can be changed by a socket option. The process in turn inherits it on fork. I have written a utility call setfib that acts a bit like nice..
setfib -3 ping target.example.com # will use fib 3 for ping.
It is an obvious extension to make it a property of a jail but I have not done so. It can be achieved by combining the setfib and jail commands.
2/ packets received on an interface for forwarding. By default these packets would use table 0, (or possibly a number settable in a sysctl(not yet)). but prior to routing the firewall can inspect them (see below). (possibly in the future you may be able to associate a FIB with packets received on an interface.. An ifconfig arg, but not yet.)
3/ packets inspected by a packet classifier, which can arbitrarily associate a fib with it on a packet by packet basis. A fib assigned to a packet by a packet classifier (such as ipfw) would over-ride a fib associated by a more default source. (such as cases 1 or 2).
4/ a tcp listen socket associated with a fib will generate accept sockets that are associated with that same fib.
5/ Packets generated in response to some other packet (e.g. reset or icmp packets). These should use the FIB associated with the packet being reponded to.
6/ Packets generated during encapsulation. gif, tun and other tunnel interfaces will encapsulate using the FIB that was in effect withthe proces that set up the tunnel. thus setfib 1 ifconfig gif0 [tunnel instructions] will set the fib for the tunnel to use to be fib 1.
Routing messages would be associated with their process, and thus select one FIB or another. messages from the kernel would be associated with the fib they refer to and would only be received by a routing socket associated with that fib. (not yet implemented)
In addition Netstat has been edited to be able to cope with the fact that the array is now 2 dimensional. (It looks in system memory using libkvm (!)). Old versions of netstat see only the first FIB.
In addition two sysctls are added to give: a) the number of FIBs compiled in (active) b) the default FIB of the calling process.
Early testing experience: -------------------------
Basically our (IronPort's) appliance does this functionality already using ipfw fwd but that method has some drawbacks.
For example, It can't fully simulate a routing table because it can't influence the socket's choice of local address when a connect() is done.
Testing during the generating of these changes has been remarkably smooth so far. Multiple tables have co-existed with no notable side effects, and packets have been routes accordingly.
ipfw has grown 2 new keywords:
setfib N ip from anay to any count ip from any to any fib N
In pf there seems to be a requirement to be able to give symbolic names to the fibs but I do not have that capacity. I am not sure if it is required.
SCTP has interestingly enough built in support for this, called VRFs in Cisco parlance. it will be interesting to see how that handles it when it suddenly actually does something.
Where to next: --------------------
After committing the ABI compatible version and MFCing it, I'd like to proceed in a forward direction in -current. this will result in some roto-tilling in the routing code.
Firstly: the current code's idea of having a separate tree per protocol family, all of the same format, and pointed to by the 1 dimensional array is a bit silly. Especially when one considers that there is code that makes assumptions about every protocol having the same internal structures there. Some protocols don't WANT that sort of structure. (for example the whole idea of a netmask is foreign to appletalk). This needs to be made opaque to the external code.
My suggested first change is to add routing method pointers to the 'domain' structure, along with information pointing the data. instead of having an array of pointers to uniform structures, there would be an array pointing to the 'domain' structures for each protocol address domain (protocol family), and the methods this reached would be called. The methods would have an argument that gives FIB number, but the protocol would be free to ignore it.
When the ABI can be changed it raises the possibilty of the addition of a fib entry into the "struct route". Currently, the structure contains the sockaddr of the desination, and the resulting fib entry. To make this work fully, one could add a fib number so that given an address and a fib, one can find the third element, the fib entry.
Interaction with the ARP layer/ LL layer would need to be revisited as well. Qing Li has been working on this already.
This work was sponsored by Ironport Systems/Cisco
Reviewed by: several including rwatson, bz and mlair (parts each) Obtained from: Ironport systems/Cisco
|
171656 |
30-Jul-2007 |
des |
Make tcpstates[] static, and make sure TCPSTATES is defined before <netinet/tcp_fsm.h> is included into any compilation unit that needs tcpstates[]. Also remove incorrect extern declarations and TCPDEBUG conditionals. This allows kernels both with and without TCPDEBUG to build, and unbreaks the tinderbox.
Approved by: re (rwatson)
|
170689 |
13-Jun-2007 |
rwatson |
Include priv.h to pick up suser(9) definitions, missed in an earlier commit.
Warnings spotted by: kris
|
170664 |
13-Jun-2007 |
rwatson |
Remove IPX over IP tunneling support, which allows IPX routing over IP tunnels, and was not MPSAFE. The code can be easily restored in the event that someone with an IPX over IP tunnel configuration can work with me to test patches.
This removes one of five remaining consumers of NET_NEEDS_GIANT.
Approved by: re (kensmith)
|
169463 |
11-May-2007 |
rwatson |
Use ANSI C function declarations throughout netipx.
Remove 'register' use.
|
169462 |
11-May-2007 |
rwatson |
Reduce network stack oddness: implement .pru_sockaddr and .pru_peeraddr protocol entry points using functions named proto_getsockaddr and proto_getpeeraddr rather than proto_setsockaddr and proto_setpeeraddr. While it's true that sockaddrs are allocated and set, the net effect is to retrieve (get) the socket address or peer address from a socket, not set it, so align names to that intent.
|
167015 |
26-Feb-2007 |
rwatson |
Build ipx_ip.c only if options IPXIP is defined. No functional change.
|
167013 |
26-Feb-2007 |
rwatson |
Fix a likely bug by adding what appears to be a missing break statement in the IPX over IP configuration ioctl: when changing the flags on a tunnel interface, return the generated error rather than always EINVAL.
|
166958 |
25-Feb-2007 |
rwatson |
Further style(9) for ipx_ip.
|
166957 |
25-Feb-2007 |
rwatson |
Improve ipx_ip.c's approximation of style(9).
|
165899 |
08-Jan-2007 |
rwatson |
Factor out UCB and my copyrights from copyrights of Mike Mitchell; the former use a three-clause BSD license (per UCB authorization letter), whereas he uses a four-clause BSD license.
MFC after: 3 days
|
164033 |
06-Nov-2006 |
rwatson |
Sweep kernel replacing suser(9) calls with priv(9) calls, assigning specific privilege names to a broad range of privileges. These may require some future tweaking.
Sponsored by: nCircle Network Security, Inc. Obtained from: TrustedBSD Project Discussed on: arch@ Reviewed (at least in part) by: mlaier, jmg, pjd, bde, ceri, Alex Lyashkov <umka at sevcity dot net>, Skip Ford <skip dot ford at verizon dot net>, Antoine Brodin <antoine dot brodin at laposte dot net>
|
160549 |
21-Jul-2006 |
rwatson |
Change semantics of socket close and detach. Add a new protocol switch function, pru_close, to notify protocols that the file descriptor or other consumer of a socket is closing the socket. pru_abort is now a notification of close also, and no longer detaches. pru_detach is no longer used to notify of close, and will be called during socket tear-down by sofree() when all references to a socket evaporate after an earlier call to abort or close the socket. This means detach is now an unconditional teardown of a socket, whereas previously sockets could persist after detach of the protocol retained a reference.
This faciliates sharing mutexes between layers of the network stack as the mutex is required during the checking and removal of references at the head of sofree(). With this change, pru_detach can now assume that the mutex will no longer be required by the socket layer after completion, whereas before this was not necessarily true.
Reviewed by: gnn
|
157672 |
11-Apr-2006 |
cognet |
Make this compile without INVARIANTS.
|
157370 |
01-Apr-2006 |
rwatson |
Chance protocol switch method pru_detach() so that it returns void rather than an error. Detaches do not "fail", they other occur or the protocol flags SS_PROTOREF to take ownership of the socket.
soclose() no longer looks at so_pcb to see if it's NULL, relying entirely on the protocol to decide whether it's time to free the socket or not using SS_PROTOREF. so_pcb is now entirely owned and managed by the protocol code. Likewise, no longer test so_pcb in other socket functions, such as soreceive(), which have no business digging into protocol internals.
Protocol detach routines no longer try to free the socket on detach, this is performed in the socket code if the protocol permits it.
In rts_detach(), no longer test for rp != NULL in detach, and likewise in other protocols that don't permit a NULL so_pcb, reduce the incidence of testing for it during detach.
netinet and netinet6 are not fully updated to this change, which will be in an upcoming commit. In their current state they may leak memory or panic.
MFC after: 3 months
|
157366 |
01-Apr-2006 |
rwatson |
Change protocol switch pru_abort() API so that it returns void rather than an int, as an error here is not meaningful. Modify soabort() to unconditionally free the socket on the return of pru_abort(), and modify most protocols to no longer conditionally free the socket, since the caller will do this.
This commit likely leaves parts of netinet and netinet6 in a situation where they may panic or leak memory, as they have not are not fully updated by this commit. This will be corrected shortly in followup commits to these components.
MFC after: 3 months
|
157175 |
27-Mar-2006 |
rwatson |
Add a simple netipx TODO list to the end of README, since there are a number of problems with netipx that I have not yet resolved, and I don't want them lost track of.
MFC after: 1 month
|
157170 |
27-Mar-2006 |
rwatson |
Canonicalize copyright order in one more file that contains my copyright.
MFC after: 1 month
|
157167 |
27-Mar-2006 |
rwatson |
In spx_output(), use M_DONTWAIT instead of M_TRYWAIT, as we hold the ipxpcb mutex. Contrary to the comment, even in 4.x this was unsafe, as parallel use of the socket by another process would result in pcb corruption if the mbuf allocation slept.
MFC after: 1 month
|
157164 |
27-Mar-2006 |
rwatson |
In spx_input(), change a '&&' to a '||', as the spx trace code is able to handle a NULL 'cb' here.
MFC after: 1 month
|
157154 |
26-Mar-2006 |
rwatson |
In spx_accept, assert ipxp != NULL, not == NULL.
MFC after: 1 month
|
157153 |
26-Mar-2006 |
rwatson |
In various SPX protocol entry points from the socket layer, check IPXP_DROPPED before continuing, and return EINVAL or ECONNRESET if it is flagged. It's unclear why each situation should be one or the other, but it is copied from netinet which has the same bugs.
MFC after: 1 month
|
157145 |
26-Mar-2006 |
rwatson |
Add a new ipxpcb flag, IPXP_SPX, which is set on ipxpcb's to mark them as belonging to SPX. This replaces the implicit assumption that the cb pointer for non-SPX pcb's will be NULL. This isn't required in TCP/IP as different pcb lists are maintained for different IP protocols; IPX stores all pcbs on the same global ipxpcb_list.
Foot provided by: gnn MFC after: 1 month
|
157140 |
26-Mar-2006 |
rwatson |
Restore original formulation of SPX segment queue draining during SPX PCB detach.
MFC after: 1 month
|
157128 |
25-Mar-2006 |
rwatson |
Rework IPX/SPX socket and pcb reference model:
- Introduce invariant that all IPX/SPX sockets will have valid so_pcb pointers to ipxpcb structures, and that for SPX, the control block pointer will always be valid. Don't attempt to free the socket or pcb at various odd points, such as disconnect.
- Add a new ipxpcb flag, IPXP_DROPPED, which will be set in place of freeing PCB's so that this invariant can be maintained. This flag is now checked instead of a NULL check in various socket protocol calls.
- Introduce many assertions that this invariant holds.
- Various pieces of code, such as the SPX timer code, no longer needs to jump through hoops in case it frees a PCB while running.
- Break out ipx_pcbfree() from ipx_pcbdetach(). Likewise spx_pcbdetach().
- Comment on some SMP-related limitations to the SPX code.
- Update copyrights.
MFC after: 1 month
|
157127 |
25-Mar-2006 |
rwatson |
Restructure spx_attach() to properly free memory in the event that one of its allocations fails. Allocate the ipxp last so as to avoid having to free it if another allocation goes wrong.
Normalize retrieval of ipxp and cb from socket in spx_sp_attach(), and add assertions.
MFC after: 1 month
|
157126 |
25-Mar-2006 |
rwatson |
Don't bother restoring host byte order of mbuf fields when we're just about to free the mbuf in the spx_input() error path.
MFC after: 1 month
|
157125 |
25-Mar-2006 |
rwatson |
In spx_ctloutput(), acquire the ipxp lock around read operations, especially reads of spx header structures, which will now be cached in the stack until they can be copied out after releasing the lock. Panic if a bad socket option direction is passed in by the caller.
MFC after: 1 month
|
157124 |
25-Mar-2006 |
rwatson |
Slight style reformatting of spx_timers() comments; panic if an unrecognized timer is passed into the function.
MFC after: 1 month
|
157104 |
24-Mar-2006 |
rwatson |
Include kernel.h to get NET_NEEDS_GIANT() definition, which for some reason compiled fine here. I may be running with other include file changes locally.
MFC after: 3 days
|
157094 |
24-Mar-2006 |
rwatson |
Clean up and style(9) SPX code prior to significant functional changes being committed:
- Wrap comments more evenly on right border. - Clean up braces.
Also, along similar lines:
- Assert some pointers are non-NULL before dereferencing them. - Remove one assertion that looks, on face value, poor.
MFC after: 1 month
|
157069 |
24-Mar-2006 |
rwatson |
Protect spx_iss using its own mutex, spx_mtx, rather than piggy-backing on the global IPX mutex, which is not held at all necessary strategic points.
MFC after: 1 month
|
157068 |
24-Mar-2006 |
rwatson |
Move definition of spxrexmtthresh to top of file with other global variables.
MFC after: 1 month
|
157067 |
24-Mar-2006 |
rwatson |
Canonicalize, update copyright. Remove 'register'. Use ANSI prototypes, not K&R.
MFC after: 1 month
|
157066 |
24-Mar-2006 |
rwatson |
Update copyright to 2006, comment on my contribution to this code in the style of previous contributors.
MFC after: 1 month
|
157065 |
24-Mar-2006 |
rwatson |
Comment that raw output filter code for IPX should run in a netisr so as to avoid recursing the socket code, as this input path can run in the call stack of an output path.
MFC after: 1 month
|
157060 |
23-Mar-2006 |
rwatson |
When the kernel is compiled with options IPXIP, run the network stack with Giant, as there is current unsafety in the IPX tunneled over IP code. There have been no reports of trouble, but there probably would be if anyone were running this code at high speed on SMP systems.
MFC after: 3 days
|
157051 |
23-Mar-2006 |
rwatson |
Move spx_savesi from being a global variable to an automatically allocated variable on the spx_input() stack. It's not very large, and this will avoid parallelism issues when spx_input() runs in more than one thread at a time.
MFC after: 1 month
|
157050 |
23-Mar-2006 |
rwatson |
Admit to ourselves that we don't actually implement pr_ctlinput() for IPX or SPX, as the code in the implementing functions is essentially a no-op. Replace with a comment indicating we don't implement these currently.
|
154323 |
14-Jan-2006 |
rwatson |
In spx_attach() and spx_detach(), there is no need to check whether the ipxpcb is NULL or not: in attach it will be, and on detach it won't be. If for any reason these invariants don't hold true, panicking is a good idea.
Noticed by: Coverity Prevent analysis tool MFC after: 3 days
|
154320 |
13-Jan-2006 |
rwatson |
Remove dead code associated with 'mcopy' in ipx_forward(): at no point are the contents of the forwarded mbuf ever copied into mcopy, so there's no need to have mcopy, conditionally look at mcopy, or conditionally free it.
Noticed by: Coverity Prevent analysis tool MFC after: 3 days
|
152638 |
20-Nov-2005 |
andre |
Include ip_options.h for IPX-IP encapsulation.
Noticed by: Tinderbox Sponsored by: TCP/IP Optimization Fundraise 2005
|
152242 |
09-Nov-2005 |
ru |
Use sparse initializers for "struct domain" and "struct protosw", so they are easier to follow for the human being.
|
151967 |
02-Nov-2005 |
andre |
Retire MT_HEADER mbuf type and change its users to use MT_DATA.
Having an additional MT_HEADER mbuf type is superfluous and redundant as nothing depends on it. It only adds a layer of confusion. The distinction between header mbuf's and data mbuf's is solely done through the m->m_flags M_PKTHDR flag.
Non-native code is not changed in this commit. For compatibility MT_HEADER is mapped to MT_DATA.
Sponsored by: TCP/IP Optimization Fundraise 2005
|
151888 |
30-Oct-2005 |
rwatson |
Push the assignment of a new or updated so_qlimit from solisten() following the protocol pru_listen() call to solisten_proto(), so that it occurs under the socket lock acquisition that also sets SO_ACCEPTCONN. This requires passing the new backlog parameter to the protocol, which also allows the protocol to be aware of changes in queue limit should it wish to do something about the new queue limit. This continues a move towards the socket layer acting as a library for the protocol.
Bump __FreeBSD_version due to a change in the in-kernel protocol interface. This change has been tested with IPv4 and UNIX domain sockets, but not other protocols.
|
149848 |
07-Sep-2005 |
obrien |
Forward declaring static variables as extern is invalid ISO-C. Now that GCC can properly handle forward static declarations, do this properly.
|
147256 |
10-Jun-2005 |
brooks |
Stop embedding struct ifnet at the top of driver softcs. Instead the struct ifnet or the layer 2 common structure it was embedded in have been replaced with a struct ifnet pointer to be filled by a call to the new function, if_alloc(). The layer 2 common structure is also allocated via if_alloc() based on the interface type. It is hung off the new struct ifnet member, if_l2com.
This change removes the size of these structures from the kernel ABI and will allow us to better manage them as interfaces come and go.
Other changes of note: - Struct arpcom is no longer referenced in normal interface code. Instead the Ethernet address is accessed via the IFP2ENADDR() macro. To enforce this ac_enaddr has been renamed to _ac_enaddr. - The second argument to ether_ifattach is now always the mac address from driver private storage rather than sometimes being ac_enaddr.
Reviewed by: sobomax, sam
|
146679 |
27-May-2005 |
rwatson |
Back out ipx.h:1.18, which introduced a Linux API compatibility field in the ipx_net data structure. Doing so introduced a stronger alignment requirement for the address structure, which in turn propagated into other dependent data structures, which turns out not to be suported by the available IPX source code. As a result, a number of user space applications, such as IPX routing components, failed to operate correctly.
RELENG_5_3 candidate?
PRs: 74059, 80266 Pointy hat to: bms Fix by: bde Tested by: Keith White <Keith dot White at site dot uottawa dot ca> MFC after: 1 week Suffering: great
|
144867 |
10-Apr-2005 |
rwatson |
Update copyright: parts of the netipx implementation are covered by a 2005 copyright.
MFC after: 3 days
|
144866 |
10-Apr-2005 |
rwatson |
Compare (mbuf *) with NULL, not 0.
MFC after: 3 days
|
143358 |
10-Mar-2005 |
rwatson |
Marginally reformat my copyright statement to remove the spurious ','.
|
142190 |
21-Feb-2005 |
rwatson |
In the current world order, solisten() implements the state transition of a socket from a regular socket to a listening socket able to accept new connections. As part of this state transition, solisten() calls into the protocol to update protocol-layer state. There were several bugs in this implementation that could result in a race wherein a TCP SYN received in the interval between the protocol state transition and the shortly following socket layer transition would result in a panic in the TCP code, as the socket would be in the TCPS_LISTEN state, but the socket would not have the SO_ACCEPTCONN flag set.
This change does the following:
- Pushes the socket state transition from the socket layer solisten() to to socket "library" routines called from the protocol. This permits the socket routines to be called while holding the protocol mutexes, preventing a race exposing the incomplete socket state transition to TCP after the TCP state transition has completed. The check for a socket layer state transition is performed by solisten_proto_check(), and the actual transition is performed by solisten_proto().
- Holds the socket lock for the duration of the socket state test and set, and over the protocol layer state transition, which is now possible as the socket lock is acquired by the protocol layer, rather than vice versa. This prevents additional state related races in the socket layer.
This permits the dual transition of socket layer and protocol layer state to occur while holding locks for both layers, making the two changes atomic with respect to one another. Similar changes are likely require elsewhere in the socket/protocol code.
Reported by: Peter Holm <peter@holm.cc> Review and fixes from: emax, Antoine Brodin <antoine.brodin@laposte.net> Philosophical head nod: gnn
|
139935 |
09-Jan-2005 |
rwatson |
Mark the IPX netisr as MPSAFE so that inbound IPX traffic is processed without Giant, and can be directly dispatched in the ithread when net.isr.enable is turned on.
MFC after: 4 weeks
|
139933 |
09-Jan-2005 |
rwatson |
Recent changes have locked down most of the highly dynamic data structures in IPX/SPX -- primarily, sequence numbering, PCB lists, and PCBs for IPX raw sockets, IPX datagram sockets, and IPX/SPX. As such, remove remove NET_NEEDS_GIANT() for IPX, and remove the assertion of Giant in the ipxintr() IPX input path.
Note that IPX/SPX is not fully MPSAFE, and that there are some problems with IPX/SPX locking that will require some further work. However, it is now safe enough to run in general without the Giant lock.
MFC after: 4 weeks
|
139932 |
09-Jan-2005 |
rwatson |
Use the IPX PCB list mutex and IPX PCB mutexes to lock down the SPX portion of IPX/SPX:
- Protect IPX PCB lists with the IPX PCB list mutex, in particular when calling PCB and PCB list manipulation routines in ipx_pcb.c. - Protect both IPX PCB state and SPX PCB state using the IPX PCB mutex. - Generally annotate locking, as well as adding liberal use of lock assertions to document locking requirements. - Where possible, use unlocked reads when reading integer or smaller sized socket options on SPX sockets. - De-spl throughout.
Notes:
- spx_input() expects both the list mutex and PCB mutex to be held on entry, but will release both on return. Because sonewconn() is called from spx_input(), it may actually drop one PCB lock and acquire another during generation of a new connection, meaning the caller is not in a position to unlock the PCB mutex.
MFC after: 3 weeks
|
139931 |
09-Jan-2005 |
rwatson |
Clean up return handling for a number of SPX-related routines that were derived from more complex TCP versions of the same:
- spx_close(), spx_disconnect(), spx_drop(), and spx_usrclosed() all always free's the spxpcb invalidating the argument, so a return value is not required to indicate if it has. - Annotate that the cb arguments to each of these functions is invalidated via a comment. - When tearing down a pcb due to sonewconn() having failed, mark the cb as NULL; later, when deciding whether to store trace information due to SO_DEBUG, check that cb is not NULL before dereferencing or a NULL pointer dereference may occur.
MFC after: 3 weeks
|
139930 |
09-Jan-2005 |
rwatson |
Protect ipx_pexseq with the IPX PCB list mutex.
When processing socket options against IPX PCBs, generally protect PCB fields using the IPX PCB mutex. Where possible, use unlocked reads on integer values to avoid locking overhead.
MFC after: 3 weeks
|
139929 |
09-Jan-2005 |
rwatson |
Acquire or assert the IPX PCB list lock or IPX PCB lock during various protocol methods relating to IPX. Conditionally acquire the PCB list lock in the send operation only if the socket requires binding in order to use the requested address.
Remove spl's generally no longer required during these accesses.
MFC after: 3 weeks
|
139928 |
09-Jan-2005 |
rwatson |
Assert or acquire the IPX PCB list lock or IPX PCB locks throughout the IPX-related PCB routines. In general, the list lock is required to iterate the PCB list, either for read or write; the PCB lock is required to access or modify a PCB. To change the binding of a PCB, both locks must be held.
MFC after: 3 weeks
|
139927 |
09-Jan-2005 |
rwatson |
Hold the IPX PCB mutex around calls to ipx_input() in the IPX input path.
MFC after: 3 weeks
|
139926 |
09-Jan-2005 |
rwatson |
Hold the global IPX PCB list mutex in the IPX input path when walking the IPX PCB list.
MFC after: 3 weeks
|
139925 |
09-Jan-2005 |
rwatson |
Introduce a global mutex, ipxpcb_list_mtx, to protect the global IPX PCB lists. Add macros to initialize, destroy, lock, unlock, and assert the mutex. Initialize the mutex when IPX is started.
Add per-IPX PCB mutexes, ipxp_mtx in struct ipxpcb, to protect per-PCB IPX/SPX state. Add macros to initialize, destroy, lock, unlock, and assert the mutex. Initialize the mutex when a new PCB is allocated; destroy it when the PCB is free'd.
MFC after: 2 weeks
|
139924 |
09-Jan-2005 |
rwatson |
In ipx_setsockaddr(), use M_WAITOK instead of M_NOWAIT so that the call always succeeds, avoiding causing the caller to return success even though the returned *sockaddr is NULL.
MFC after: 2 weeks
|
139923 |
09-Jan-2005 |
rwatson |
Eliminate jump to 'bad' label in order to clean up the ipx_input() return/unwind path for locking work.
MFC after: 2 weeks
|
139823 |
07-Jan-2005 |
imp |
/* -> /*- for license, minor formatting changes
|
139623 |
03-Jan-2005 |
rwatson |
Garbage collect unused ipx_abort().
Spell NULL right in a KASSERT() panic message.
MFC after: 1 week
|
139591 |
02-Jan-2005 |
rwatson |
Acquire the socket buffer receive lock in spx_rcvoob() to permit multiple reads of receive buffer state to be performed atomically.
|
139590 |
02-Jan-2005 |
rwatson |
Increase the coverage scope of the receive socket buffer lock in spx_reass() to increase atomicity across multiple operations on the socket buffer when iterating over the SPX fragment reassembly list for the ipxpcb, as well a to reduce the number of locking operations.
|
139589 |
02-Jan-2005 |
rwatson |
Explicitly lock the send socket buffer in spx_reass() to cover the drop record loop for ACK'd data, rather than relying on lokcing in sbdroprecord() and sowwakeup(), reducing the number of lock operations as well as eliminating a possible race against the head of the send buffer mbuf chain. Use the _locked variants of sbdroprecord() and sowwakeup().
|
139588 |
02-Jan-2005 |
rwatson |
Restructure ipx_input() return code to match similar code in netinet, avoiding a goto.
|
139587 |
02-Jan-2005 |
rwatson |
Eliminate XXX comments regarding allocation failures when retrieving the peer address by using M_WAITOK in ipx_setpeeraddr() to prevent allocation failure. The socket reference used to reach these calls will prevent the ipxpcb from being released prematurely.
|
139586 |
02-Jan-2005 |
rwatson |
Use KASSERT() in preference to if()panic().
|
139585 |
02-Jan-2005 |
rwatson |
Extern declaration of old 'ipxpcb' list head no longer required.
|
139584 |
02-Jan-2005 |
rwatson |
Trim trailing whitespace.
|
139583 |
02-Jan-2005 |
rwatson |
Document copyright updates in netipx README as other prior updates have been documented.
|
139582 |
02-Jan-2005 |
rwatson |
Mark 'struct spx' and 'struct spxhdr' as __packed to prevent possible alignment problems.
MFC after: 3 days
|
139581 |
02-Jan-2005 |
rwatson |
Improve handling of SPX session timeout, specifically, make sure to properly handle the case where a connection is disconnected. The queue(9)-enabled version of this code broke from the inner but not outer loop, and so potentially frobbed an ipxpcb flag after the ipxpcb was free'd, which might be picked up later by the malloc debugging code. Properly break from the loop context and avoid touching the cb/ipxpcb after free.
|
139580 |
02-Jan-2005 |
rwatson |
Compare and assign pointers with NULL in preference to 0.
|
139579 |
02-Jan-2005 |
rwatson |
Don't cast NULL on return or when passing to another function.
Extend the annotation as to why spx_close() isn't called in spx_reass(), and mark this code more clearly as broken.
|
139562 |
02-Jan-2005 |
rwatson |
Mark 'struct ipx', the IPX packet header, as __packed. Otherwise, recent versions of gcc will insert an extra 16 bits of padding in the structure, corrupting all IPX packet output.
MFC after: 3 days
|
139559 |
02-Jan-2005 |
rwatson |
Use 'NULL' in preference to '0' for pointer comparisons.
MFC after: 2 weeks
|
139557 |
02-Jan-2005 |
rwatson |
Use RTFREE() to free route references rather than rtfree(), as rtfree() expects a locked route reference. This removes a panic that occurs when connected ipxpcb is closed and its route free'd, and may have been present since the route locking took place.
MFC after: 2 weeks
|
139556 |
02-Jan-2005 |
rwatson |
Prefer rtalloc_ign() API to rtalloc() API.
|
139551 |
01-Jan-2005 |
rwatson |
Move the definition of ipxpcb_lport_cache from ipx_input.c to ipx_pcb.c, the only source file where it is actually used.
|
139485 |
31-Dec-2004 |
rwatson |
Marginally reformat copyright statements to remove an excess ','.
|
139479 |
31-Dec-2004 |
rwatson |
Add 'struct ipxpcb' forward declaration to ipx_var.h. I had this in the netperf branch but for some reason didn't trigger a build failure locally when I merged to CVS and omitted it. Presumably driver error.
Pointed out by: cperciva, tinderbox
|
139445 |
30-Dec-2004 |
rwatson |
Use a global variable, ipxpcb_lport_cache, to cache the most recently used IPX port number, rather than using the global ipxpcb list head.
|
139444 |
30-Dec-2004 |
rwatson |
Convert netipx to use queue(9) doubly-linked lists instead of home-brew linked lists for ipxpcb's.
|
139443 |
30-Dec-2004 |
rwatson |
Garbage collect unused (and incompletely implemented) functions:
- ipx_pcbnotify(), which is never called. - ipx_rtchange(), which is never called, is incomplete inplemented, and also #ifdef notdef. - spx_fixmtu(), which is never called, is incompletely implemented, and also #ifdef notdef.
|
139442 |
30-Dec-2004 |
rwatson |
Constify ipx_zeronet, ipx_zerohost, ipx_broadnet, ipx_broadhost. Remove 'allones' since the values of the broadcast network and host variables are set statically.
|
137386 |
08-Nov-2004 |
phk |
Initialize struct pr_userreqs in new/sparse style and fill in common default elements in net_init_domain().
This makes it possible to grep these structures and see any bogosities.
|
136682 |
18-Oct-2004 |
rwatson |
Push acquisition of the accept mutex out of sofree() into the caller (sorele()/sotryfree()):
- This permits the caller to acquire the accept mutex before the socket mutex, avoiding sofree() having to drop the socket mutex and re-order, which could lead to races permitting more than one thread to enter sofree() after a socket is ready to be free'd.
- This also covers clearing of the so_pcb weak socket reference from the protocol to the socket, preventing races in clearing and evaluation of the reference such that sofree() might be called more than once on the same socket.
This appears to close a race I was able to easily trigger by repeatedly opening and resetting TCP connections to a host, in which the tcp_close() code called as a result of the RST raced with the close() of the accepted socket in the user process resulting in simultaneous attempts to de-allocate the same socket. The new locking increases the overhead for operations that may potentially free the socket, so we will want to revise the synchronization strategy here as we normalize the reference counting model for sockets. The use of the accept mutex in freeing of sockets that are not listen sockets is primarily motivated by the potential need to remove the socket from the incomplete connection queue on its parent (listen) socket, so cleaning up the reference model here may allow us to substantially weaken the synchronization requirements.
RELENG_5_3 candidate.
MFC after: 3 days Reviewed by: dwhite Discussed with: gnn, dwhite, green Reported by: Marc UBM Bocklet <ubm at u-boot-man dot de> Reported by: Vlad <marchenko at gmail dot com>
|
134445 |
28-Aug-2004 |
rwatson |
Mark Netgraph TTY, KAME IPSEC, and IPX/SPX as requiring Giant for correct operation using NET_NEEDS_GIANT(). This will result in a boot-time restoration of Giant-enabled network operation, or run-time warning on dynamic load (applicable only to the Netgraph component). Additional components will likely need to be marked with this in the future.
|
132779 |
28-Jul-2004 |
kan |
Avoid casts as lvalues. Declare local variable as u_char * instead of declaring it as u_short * and casting it back to uchar * all over the place.
|
132045 |
12-Jul-2004 |
rwatson |
Constify 'spx_backoff'.
|
131031 |
24-Jun-2004 |
rwatson |
Acquire the receive socket buffer lock when modifying out-of-band data fields of the socket in SPX.
|
130941 |
22-Jun-2004 |
bms |
Improve source-code compatibility with Linux applications using the IPX stack.
PR: kern/65217 Submitted by: Radim Kolar
|
130822 |
20-Jun-2004 |
rwatson |
It's now the responsibility of the consumer of soabort() to remove a socket from its accept queue when aborting it during a new inbound connection. Update spx_input() to acquire the accept lock, assert the condition of the socket on its parent queue, and approriately disconnect it from the queue before calling soabort() on it.
|
130513 |
15-Jun-2004 |
rwatson |
Grab the socket buffer send or receive mutex when performing a read-modify-write on the sb_state field. This commit catches only the "easy" ones where it doesn't interact with as yet unmerged locking.
|
130480 |
14-Jun-2004 |
rwatson |
The socket field so_state is used to hold a variety of socket related flags relating to several aspects of socket functionality. This change breaks out several bits relating to send and receive operation into a new per-socket buffer field, sb_state, in order to facilitate locking. This is required because, in order to provide more granular locking of sockets, different state fields have different locking properties. The following fields are moved to sb_state:
SS_CANTRCVMORE (so_state) SS_CANTSENDMORE (so_state) SS_RCVATMARK (so_state)
Rename respectively to:
SBS_CANTRCVMORE (so_rcv.sb_state) SBS_CANTSENDMORE (so_snd.sb_state) SBS_RCVATMARK (so_rcv.sb_state)
This facilitates locking by isolating fields to be located with other identically locked fields, and permits greater granularity in socket locking by avoiding storing fields with different locking semantics in the same short (avoiding locking conflicts). In the future, we may wish to coallesce sb_state and sb_flags; for the time being I leave them separate and there is no additional memory overhead due to the packing/alignment of shorts in the socket buffer structure.
|
130387 |
12-Jun-2004 |
rwatson |
Extend coverage of SOCK_LOCK(so) to include so_count, the socket reference count:
- Assert SOCK_LOCK(so) macros that directly manipulate so_count: soref(), sorele().
- Assert SOCK_LOCK(so) in macros/functions that rely on the state of so_count: sofree(), sotryfree().
- Acquire SOCK_LOCK(so) before calling these functions or macros in various contexts in the stack, both at the socket and protocol layers.
- In some cases, perform soisdisconnected() before sotryfree(), as this could result in frobbing of a non-present socket if sotryfree() actually frees the socket.
- Note that sofree()/sotryfree() will release the socket lock even if they don't free the socket.
Submitted by: sam Sponsored by: FreeBSD Foundation Obtained from: BSD/OS
|
126425 |
01-Mar-2004 |
rwatson |
Rename dup_sockaddr() to sodupsockaddr() for consistency with other functions in kern_socket.c.
Rename the "canwait" field to "mflags" and pass M_WAITOK and M_NOWAIT in from the caller context rather than "1" or "0".
Correct mflags pass into mac_init_socket() from previous commit to not include M_ZERO.
Submitted by: sam
|
122875 |
18-Nov-2003 |
rwatson |
Introduce a MAC label reference in 'struct inpcb', which caches the MAC label referenced from 'struct socket' in the IPv4 and IPv6-based protocols. This permits MAC labels to be checked during network delivery operations without dereferencing inp->inp_socket to get to so->so_label, which will eventually avoid our having to grab the socket lock during delivery at the network layer.
This change introduces 'struct inpcb' as a labeled object to the MAC Framework, along with the normal circus of entry points: initialization, creation from socket, destruction, as well as a delivery access control check.
For most policies, the inpcb label will simply be a cache of the socket label, so a new protocol switch method is introduced, pr_sosetlabel() to notify protocols that the socket layer label has been updated so that the cache can be updated while holding appropriate locks. Most protocols implement this using pru_sosetlabel_null(), but IPv4/IPv6 protocols using inpcbs use the the worker function in_pcbsosetlabel(), which calls into the MAC Framework to perform a cache update.
Biba, LOMAC, and MLS implement these entry points, as do the stub policy, and test policy.
Reviewed by: sam, bms Obtained from: TrustedBSD Project Sponsored by: DARPA, Network Associates Laboratories
|
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
|
121816 |
31-Oct-2003 |
brooks |
Replace the if_name and if_unit members of struct ifnet with new members if_xname, if_dname, and if_dunit. if_xname is the name of the interface and if_dname/unit are the driver name and instance.
This change paves the way for interface renaming and enhanced pseudo device creation and configuration symantics.
Approved By: re (in principle) Reviewed By: njl, imp Tested On: i386, amd64, sparc64 Obtained From: NetBSD (if_xname)
|
119995 |
11-Sep-2003 |
ru |
Fix a bunch of off-by-one errors in the range checking code.
|
116189 |
11-Jun-2003 |
obrien |
Use __FBSDID().
|
111978 |
08-Mar-2003 |
tjr |
Remove unimplemented IP-in-IPX encapsulation support (options IPTUNNEL).
|
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
|
111487 |
25-Feb-2003 |
tjr |
Allocate struct ipx_ifaddrs with an initial reference count of 1, not 0. The wrong reference count was causing them to get freed too early and have their contents scrambled.
|
111119 |
19-Feb-2003 |
imp |
Back out M_* changes, per decision of the TRB.
Approved by: trb
|
109765 |
23-Jan-2003 |
fjoe |
add forgotten IFA_LOCK_INIT
|
109623 |
21-Jan-2003 |
alfred |
Remove M_TRYWAIT/M_WAITOK/M_WAIT. Callers should use 0. Merge M_NOWAIT/M_DONTWAIT into a single flag M_NOWAIT.
|
108533 |
01-Jan-2003 |
schweikh |
Correct typos, mostly s/ a / an / where appropriate. Some whitespace cleanup, especially in troff files.
|
106666 |
08-Nov-2002 |
jhb |
Fix a sizeof(int) != sizeof(void *) warning.
|
105194 |
16-Oct-2002 |
sam |
Replace aux mbufs with packet tags:
o instead of a list of mbufs use a list of m_tag structures a la openbsd o for netgraph et. al. extend the stock openbsd m_tag to include a 32-bit ABI/module number cookie o for openbsd compatibility define a well-known cookie MTAG_ABI_COMPAT and use this in defining openbsd-compatible m_tag_find and m_tag_get routines o rewrite KAME use of aux mbufs in terms of packet tags o eliminate the most heavily used aux mbufs by adding an additional struct inpcb parameter to ip_output and ip6_output to allow the IPsec code to locate the security policy to apply to outbound packets o bump __FreeBSD_version so code can be conditionalized o fixup ipfilter's call to ip_output based on __FreeBSD_version
Reviewed by: julian, luigi (silent), -arch, -net, darren Approved by: julian, silence from everyone else Obtained from: openbsd (mostly) MFC after: 1 month
|
102412 |
25-Aug-2002 |
charnier |
Replace various spelling with FALLTHROUGH which is lint()able
|
100776 |
27-Jul-2002 |
dwmalone |
Make spxnames a const char * to quieten some warnings in netstat.
|
97658 |
31-May-2002 |
tanimura |
Back out my lats commit of locking down a socket, it conflicts with hsu's work.
Requested by: hsu
|
96972 |
20-May-2002 |
tanimura |
Lock down a socket, milestone 1.
o Add a mutex (sb_mtx) to struct sockbuf. This protects the data in a socket buffer. The mutex in the receive buffer also protects the data in struct socket.
o Determine the lock strategy for each members in struct socket.
o Lock down the following members:
- so_count - so_options - so_linger - so_state
o Remove *_locked() socket APIs. Make the following socket APIs touching the members above now require a locked socket:
- sodisconnect() - soisconnected() - soisconnecting() - soisdisconnected() - soisdisconnecting() - sofree() - soref() - sorele() - sorwakeup() - sotryfree() - sowakeup() - sowwakeup()
Reviewed by: alfred
|
95759 |
30-Apr-2002 |
tanimura |
Revert the change of #includes in sys/filedesc.h and sys/socketvar.h.
Requested by: bde
Since locking sigio_lock is usually followed by calling pgsigio(), move the declaration of sigio_lock and the definitions of SIGIO_*() to sys/signalvar.h.
While I am here, sort include files alphabetically, where possible.
|
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
|
93593 |
01-Apr-2002 |
jhb |
Change the suser() API to take advantage of td_ucred as well as do a general cleanup of the API. The entire API now consists of two functions similar to the pre-KSE API. The suser() function takes a thread pointer as its only argument. The td_ucred member of this thread must be valid so the only valid thread pointers are curthread and a few kernel threads such as thread0. The suser_cred() function takes a pointer to a struct ucred as its first argument and an integer flag as its second argument. The flag is currently only used for the PRISON_ROOT flag.
Discussed on: smp@
|
92745 |
20-Mar-2002 |
alfred |
Remove __P.
|
90361 |
07-Feb-2002 |
julian |
Pre-KSE/M3 commit. this is a low-functionality change that changes the kernel to access the main thread of a process via the linked list of threads rather than assuming that it is embedded in the process. It IS still embeded there but remove all teh code that assumes that in preparation for the next commit which will actually move it out.
Reviewed by: peter@freebsd.org, gallatin@cs.duke.edu, benno rice,
|
89069 |
08-Jan-2002 |
msmith |
Initialise the intrq_present fields at runtime, not link time. This allows us to load protocols at runtime, and avoids the use of common variables.
Also fix the ip6_intrq assignment so that it works at all.
|
86487 |
17-Nov-2001 |
dillon |
Give struct socket structures a ref counting interface similar to vnodes. This will hopefully serve as a base from which we can expand the MP code. We currently do not attempt to obtain any mutex or SX locks, but the door is open to add them when we nail down exactly how that part of it is going to work.
|
85958 |
03-Nov-2001 |
peter |
FreeBSD/vax is quite some time away.
|
83366 |
12-Sep-2001 |
julian |
KSE Milestone 2 Note ALL MODULES MUST BE RECOMPILED make the kernel aware that there are smaller units of scheduling than the process. (but only allow one thread per process at this time). This is functionally equivalent to teh previousl -current except that there is a thread associated with each process.
Sorry john! (your next MFC will be a doosie!)
Reviewed by: peter@freebsd.org, dillon@freebsd.org
X-MFC after: ha ha ha ha
|
76166 |
01-May-2001 |
markm |
Undo part of the tangle of having sys/lock.h and sys/mutex.h included in other "system" header files.
Also help the deprecation of lockmgr.h by making it a sub-include of sys/lock.h and removing sys/lockmgr.h form kernel .c files.
Sort sys/*.h includes where possible in affected files.
OK'ed by: bde (with reservations)
|
72012 |
04-Feb-2001 |
phk |
Another round of the <sys/queue.h> FOREACH transmogriffer.
Created with: sed(1) Reviewed by: md5(1)
|
71999 |
04-Feb-2001 |
phk |
Mechanical change to use <sys/queue.h> macro API instead of fondling implementation details.
Created with: sed(1) Reviewed by: md5(1)
|
70254 |
21-Dec-2000 |
bmilekic |
* Rename M_WAIT mbuf subsystem flag to M_TRYWAIT. This is because calls with M_WAIT (now M_TRYWAIT) may not wait forever when nothing is available for allocation, and may end up returning NULL. Hopefully we now communicate more of the right thing to developers and make it very clear that it's necessary to check whether calls with M_(TRY)WAIT also resulted in a failed allocation. M_TRYWAIT basically means "try harder, block if necessary, but don't necessarily wait forever." The time spent blocking is tunable with the kern.ipc.mbuf_wait sysctl. M_WAIT is now deprecated but still defined for the next little while.
* Fix a typo in a comment in mbuf.h
* Fix some code that was actually passing the mbuf subsystem's M_WAIT to malloc(). Made it pass M_WAITOK instead. If we were ever to redefine the value of the M_WAIT flag, this could have became a big problem.
|
69781 |
08-Dec-2000 |
dwmalone |
Convert more malloc+bzero to malloc+M_ZERO.
Submitted by: josh@zipperup.org Submitted by: Robert Drehmel <robd@gmx.net>
|
69152 |
25-Nov-2000 |
jlemon |
Lock down the network interface queues. The queue mutex must be obtained before adding/removing packets from the queue. Also, the if_obytes and if_omcasts fields should only be manipulated under protection of the mutex.
IF_ENQUEUE, IF_PREPEND, and IF_DEQUEUE perform all necessary locking on the queue. An IF_LOCK macro is provided, as well as the old (mutex-less) versions of the macros in the form _IF_ENQUEUE, _IF_QFULL, for code which needs them, but their use is discouraged.
Two new macros are introduced: IF_DRAIN() to drain a queue, and IF_HANDOFF, which takes care of locking/enqueue, and also statistics updating/start if necessary.
|
67893 |
29-Oct-2000 |
phk |
Move suser() and suser_xxx() prototypes and a related #define from <sys/proc.h> to <sys/systm.h>.
Correctly document the #includes needed in the manpage.
Add one now needed #include of <sys/systm.h>. Remove the consequent 48 unused #includes of <sys/proc.h>.
|
59874 |
01-May-2000 |
peter |
Add $FreeBSD$
|
59683 |
27-Apr-2000 |
bp |
Calculate checksum properly for propagated IPX/NetBIOS packets.
|
59604 |
24-Apr-2000 |
obrien |
* Use sys/sys/random.h rather than a i386 specific one. * There was nothing that should be machine dependant about i386/isa/random_machdep.c, so it is now sys/kern/kern_random.c.
|
57178 |
13-Feb-2000 |
peter |
Clean up some loose ends in the network code, including the X.25 and ISO #ifdefs. Clean out unused netisr's and leftover netisr linker set gunk. Tested on x86 and alpha, including world.
Approved by: jkh
|
56555 |
24-Jan-2000 |
brian |
Move the *intrq variables into net/intrq.c and unconditionally include this in all kernels. Declare some const *intrq_present variables that can be checked by a module prior to using *intrq to queue data.
Make the if_tun module capable of processing atm, ip, ip6, ipx, natm and netatalk packets when TUNSIFHEAD is ioctl()d on.
Review not required by: freebsd-hackers
|
55205 |
29-Dec-1999 |
peter |
Change #ifdef KERNEL to #ifdef _KERNEL in the public headers. "KERNEL" is an application space macro and the applications are supposed to be free to use it as they please (but cannot). This is consistant with the other BSD's who made this change quite some time ago. More commits to come.
|
54909 |
20-Dec-1999 |
eivind |
Lose a register declaration to avoid a warning
|
54799 |
19-Dec-1999 |
green |
M_PREPEND-related cleanups (unregisterifying struct mbuf *s).
|
50519 |
28-Aug-1999 |
jhay |
Get rid of the old XNS checksum code and implement it the IPX way.
PR: 13374 Submitted by: Boris Popov <bp@butya.kz>
|
50477 |
28-Aug-1999 |
peter |
$Id$ -> $FreeBSD$
|
46112 |
27-Apr-1999 |
phk |
Suser() simplification:
1: s/suser/suser_xxx/
2: Add new function: suser(struct proc *), prototyped in <sys/proc.h>.
3: s/suser_xxx(\([a-zA-Z0-9_]*\)->p_ucred, \&\1->p_acflag)/suser(\1)/
The remaining suser_xxx() calls will be scrutinized and dealt with later.
There may be some unneeded #include <sys/cred.h>, but they are left as an exercise for Bruce.
More changes to the suser() API will come along with the "jail" code.
|
45572 |
11-Apr-1999 |
eivind |
Remove incorrect initialization.
|
44078 |
16-Feb-1999 |
dfr |
* Change sysctl from using linker_set to construct its tree using SLISTs. This makes it possible to change the sysctl tree at runtime.
* Change KLD to find and register any sysctl nodes contained in the loaded file and to unregister them when the file is unloaded.
Reviewed by: Archie Cobbs <archie@whistle.com>, Peter Wemm <peter@netplex.com.au> (well they looked at it anyway)
|
43712 |
06-Feb-1999 |
jhay |
Make it possible to use lo0 as an internal IPX network. This is usefull for mars_nwe server and nwfs. PR: 9871 Submitted by: Boris Popov <bp@butya.kz>
|
43711 |
06-Feb-1999 |
jhay |
Don't use the pointer returned by MALLOC before checking if it is NULL. PR: 9871 (part of it) Submitted by: Boris Popov <bp@butya.kz>
|
43311 |
28-Jan-1999 |
dillon |
Fix warnings in preparation for adding -Wall -Wcast-qual to the kernel compile
|
43305 |
27-Jan-1999 |
dillon |
Fix warnings in preparation for adding -Wall -Wcast-qual to the kernel compile
|
42579 |
12-Jan-1999 |
eivind |
Remove functions that are no longer in use.
|
41617 |
09-Dec-1998 |
eivind |
Back out last change; there was 'fixup' code for the case later.
Noticed by: bde
|
41601 |
08-Dec-1998 |
eivind |
Better error checking.
|
41591 |
07-Dec-1998 |
archie |
The "easy" fixes for compiling the kernel -Wunused: remove unreferenced static and local variables, goto labels, and functions declared but not defined.
|
41514 |
04-Dec-1998 |
archie |
Examine all occurrences of sprintf(), strcat(), and str[n]cpy() for possible buffer overflow problems. Replaced most sprintf()'s with snprintf(); for others cases, added terminating NUL bytes where appropriate, replaced constants like "16" with sizeof(), etc.
These changes include several bug fixes, but most changes are for maintainability's sake. Any instance where it wasn't "immediately obvious" that a buffer overflow could not occur was made safer.
Reviewed by: Bruce Evans <bde@zeta.org.au> Reviewed by: Matthew Dillon <dillon@apollo.backplane.com> Reviewed by: Mike Spengler <mks@networkcs.com>
|
38482 |
23-Aug-1998 |
wollman |
Yow! Completely change the way socket options are handled, eliminating another specialized mbuf type in the process. Also clean up some of the cruft surrounding IPFW, multicast routing, RSVP, and other ill-explored corners.
|
38373 |
17-Aug-1998 |
bde |
Fixed printf format errors.
|
36857 |
10-Jun-1998 |
phk |
When system act as IPX router (sysctl -w net.ipx.ipx.ipxforwarding=1, running IPXRouted -s) between IPX configured interfaces, it generate syslog messages "ipx_ctlinput: cmd 15." even if kernel compiled with IPXPRINTFS=0 and IPX_ERRPRINTFS=0 options.
PR: 6875 Reviewed by: phk Submitted by: Vladimir A. Jakovenko <vovik@ntu-kpi.kiev.ua>
|
36735 |
07-Jun-1998 |
dfr |
This commit fixes various 64bit portability problems required for FreeBSD/alpha. The most significant item is to change the command argument to ioctl functions from int to u_long. This change brings us inline with various other BSD versions. Driver writers may like to use (__FreeBSD_version == 300003) to detect this change.
The prototype FreeBSD/alpha machdep will follow in a couple of days time.
|
35599 |
01-May-1998 |
bde |
Don't depend on "implicit int".
|
35060 |
06-Apr-1998 |
phk |
Make read_random() take a (void *) argument instead of (char *)
|
34961 |
30-Mar-1998 |
phk |
Eradicate the variable "time" from the kernel, using various measures. "time" wasn't a atomic variable, so splfoo() protection were needed around any access to it, unless you just wanted the seconds part.
Most uses of time.tv_sec now uses the new variable time_second instead.
gettime() changed to getmicrotime(0.
Remove a couple of unneeded splfoo() protections, the new getmicrotime() is atomic, (until Bruce sets a breakpoint in it).
A couple of places needed random data, so use read_random() instead of mucking about with time which isn't random.
Add a new nfs_curusec() function.
Mark a couple of bogosities involving the now disappeard time variable.
Update ffs_update() to avoid the weird "== &time" checks, by fixing the one remaining call that passwd &time as args.
Change profiling in ncr.c to use ticks instead of time. Resolution is the same.
Add new function "tvtohz()" to avoid the bogus "splfoo(), add time, call hzto() which subtracts time" sequences.
Reviewed by: bde
|
33181 |
09-Feb-1998 |
eivind |
Staticize.
|
32995 |
01-Feb-1998 |
bde |
Forward declare more structs that are used in prototypes here - don't depend on <sys/types.h> forward declaring common ones.
|
32350 |
08-Jan-1998 |
eivind |
Make INET a proper option.
This will not make any of object files that LINT create change; there might be differences with INET disabled, but hardly anything compiled before without INET anyway. Now the 'obvious' things will give a proper error if compiled without inet - ipx_ip, ipfw, tcp_debug. The only thing that _should_ work (but can't be made to compile reasonably easily) is sppp :-(
This commit move struct arpcom from <netinet/if_ether.h> to <net/if_arp.h>.
|
31927 |
21-Dec-1997 |
bde |
Moved some declarations from <sys/socket.h> to the correct places, and fixed everything that depended on them being misplaced.
|
31742 |
15-Dec-1997 |
eivind |
Throw options IPX, IPXIP and IPTUNNEL into opt_ipx.h.
The #ifdef IPXIP in netipx/ipx_if.h is OK (used from ipx_usrreq.c and ifconfig.c only).
I also fixed a typo IPXTUNNEL -> IPTUNNEL (and #ifdef'ed out the code inside, as it never could have compiled - doh.)
|
30813 |
28-Oct-1997 |
bde |
Removed unused #includes.
|
30806 |
28-Oct-1997 |
bde |
This depends on option TCP_DEBUG for some reason, so include opt_tcp_debug.h so that the option is visible again.
Restored a used #include.
|
29366 |
14-Sep-1997 |
peter |
Update network code to use poll support.
|
29024 |
02-Sep-1997 |
bde |
Added used #include - don't depend on <sys/mbuf.h> including <sys/malloc.h> (unless we only use the bogusly shared M*WAIT flags).
|
28270 |
16-Aug-1997 |
wollman |
Fix all areas of the system (or at least all those in LINT) to avoid storing socket addresses in mbufs. (Socket buffers are the one exception.) A number of kernel APIs needed to get fixed in order to make this happen. Also, fix three protocol families which kept PCBs in mbufs to not malloc them instead. Delete some old compatibility cruft while we're at it, and add some new routines in the in_cksum family.
|
27125 |
01-Jul-1997 |
bde |
Don't depend on gcc's feature of permitting labels that aren't followed by a statement.
|
26965 |
26-Jun-1997 |
jhay |
Removed the #ifdef IPXERRORMSGS'ed code. Fix a lot of style errors that I introduced with the previous commit. Style fixes Submitted by: Bruce Evans <bde@FreeBSD.ORG>
|
25652 |
10-May-1997 |
jhay |
Mega IPX commit.
Use the MAC address of an interface for the host part of an IPX address and not the MAC address of the first interface for every IPX address. This is more inline with the way others like Novell do it. Mostly Submitted by: "Serge A. Babkin" <babkin@hq.icb.chel.su>
Take out the error messages (the ip icmp equivalent) with #ifdef IPXERRORMSGS. This is bogus and as far as I could figure out IPX don't have anything like it. This is a leftover from its XNS heritage. If nobody complains, I will take it out completely in a few weeks.
Add some more ipxstat statistics counters.
Make ipxprintfs a sysctl variable and off by default.
Add IPX Netbios "routing" support. This is off by default and can be switched on with a sysctl knob.
General code cleanup to at least use the same style throughout the IPX code, but also be more style(9) conformant. Also make a lot of functions static.
If I don't get any complaints I'll bring all of this over to the 2.2 tree in a few weeks.
|
25347 |
01-May-1997 |
jhay |
Oops I missed one of the pr_usrreqs changes.
|
25345 |
01-May-1997 |
jhay |
Make ipx compile again after the network interface changes.
|
24659 |
05-Apr-1997 |
jhay |
Change IPX to use the pr_usrreqs structure.
|
24204 |
24-Mar-1997 |
bde |
Don't include <sys/ioctl.h> in the kernel. Stage 2: include <sys/sockio.h> instead of <sys/ioctl.h> in network files.
|
22975 |
22-Feb-1997 |
peter |
Back out part 1 of the MCFH that changed $Id$ to $FreeBSD$. We are not ready for it yet.
|
21673 |
14-Jan-1997 |
jkh |
Make the long-awaited change from $Id$ to $FreeBSD$
This will make a number of things easier in the future, as well as (finally!) avoiding the Id-smashing problem which has plagued developers for so long.
Boy, I'm glad we're not using sup anymore. This update would have been insane otherwise.
|
20407 |
13-Dec-1996 |
wollman |
Convert the interface address and IP interface address structures to TAILQs. Fix places which referenced these for no good reason that I can see (the references remain, but were fixed to compile again; they are still questionable).
|
19947 |
24-Nov-1996 |
jhay |
Enlarge the transmit and receive bufferspace of ipx. Make it tweakable with sysctl.
|
17643 |
18-Aug-1996 |
jhay |
Accept odd length ipx packets. (Win95 and some dialup servers use it.) Original idea submitted by: Atsushi Murai <amurai@spec.co.jp>
|
16322 |
12-Jun-1996 |
gpalmer |
Clean up -Wunused warnings.
Reviewed by: bde
|
15688 |
08-May-1996 |
jhay |
Make IPXIP work. Reviewed by: Gary Palmer gpalmer@FreeBSD.ORG
|
15682 |
08-May-1996 |
gpalmer |
Zero out some (unused) entries in the ipxsw initiliser which only lead to compile-tiome warnings.
Tested by: John Hay <jhay@mikom.csir.co.za>
|
15245 |
13-Apr-1996 |
jhay |
Don't use a newfangled auto initializer. Initialize everything by assignment to avoid one bug and several pessimizations.
In the old version, gcc-2.6.3 (i386 version) generates 16 bytes of static data and copies it using 4 4-byte load-stores. gcc-2.7.2 generates 2 1-byte stores and calls memset() to zero 14 bytes. Linking fails because memset() doesn't exist in the kernel.
In both versions, the 2 bytes stored directly are all that is actually used unless the null padding at the end is used, since the 3 4-byte words in the middle are initialized again by struct assignment. These words are misaligned. gcc generates misaligned load-stores for (small) misaligned struct copies.
Submitted by: Bruce Evans
|
15239 |
13-Apr-1996 |
bde |
Eliminated sloppy common-style declarations. Now there are no duplicated common labels for LINT. There are still some common declarations for the !KERNEL case in tcp_debug.h and spx_debug.h. trpt depends on the ones in tcp_debug.h.
|
14546 |
11-Mar-1996 |
dg |
Move or add #include <queue.h> in preparation for upcoming struct socket changes.
|
14093 |
13-Feb-1996 |
wollman |
Kill XNS. While we're at it, fix socreate() to take a process argument. (This was supposed to get committed days ago...)
|
13765 |
30-Jan-1996 |
mpp |
Fix a bunch of spelling errors in the comment fields of a bunch of system include files.
|
13266 |
05-Jan-1996 |
wollman |
Finally demolished the last, tottering remnants of GATEWAY. If you want to enable IP forwarding, use sysctl(8). Also did the same for IPX, which involved inventing a completely new MIB from whole cloth (which I may not quite have correct); be aware of this if you use IPX forwarding. (The two should never have been controlled by the same option anyway.)
|
12883 |
16-Dec-1995 |
bde |
Oops, forgot to update this to match pr_ctlinput.
Added comment about bogus LOMTU.
|
12881 |
16-Dec-1995 |
bde |
Uniformized pr_ctlinput protosw functions. The third arg is now `void *' instead of caddr_t and it isn't optional (it never was). Most of the netipx (and netns) pr_ctlinput functions abuse the second arg instead of using the third arg but fixing this is beyond the scope of this round of changes.
|
12470 |
24-Nov-1995 |
bde |
Cleaned up prototypes: - don't #include other headers just to get struct names. - don't use __BEGIN_DECLS/__END_DECLS for system prototypes. It is for user prototypes. - don't use extern. - don't use lines longer than 80 columns. - use alphabetical order. - use tabs.
Uniformized idempotency ifdefs.
|
12469 |
24-Nov-1995 |
bde |
Fixed a bogus name (ifn_en) that was introduced when a type mismatch was fixed.
|
12468 |
24-Nov-1995 |
bde |
Added #include <sys/queue.h>. This will be required when I move the (inline) implementations of insque() and remque() from <machine/cpufunc.h> to <sys/queue.h>.
|
12467 |
24-Nov-1995 |
bde |
Undid bogus cleanups. 0 was mistyped as NULL.
|
12057 |
04-Nov-1995 |
julian |
Suggested by: bde clear up some confusion about Id: lines on behalf of the author
|
11991 |
31-Oct-1995 |
julian |
Submitted by: Mike Mitchell (mitchell@ref.tfs.com)
these patches bring the ipx code up to the point that it compiles cleanly with the -W arguments suggested by bruce.
|
11948 |
31-Oct-1995 |
julian |
Submitted by: Mike mitchell add prototypes htat are related to ipx.ip tunnelling
|
11947 |
31-Oct-1995 |
julian |
Submitted by: Mike Mitchell
revise prototypes etc. cleanups (probably more coming)
|
11819 |
26-Oct-1995 |
julian |
Reviewed by: julian and jhay@mikom.csir.co.za Submitted by: Mike Mitchell, supervisor@alb.asctmd.com
This is a bulk mport of Mike's IPX/SPX protocol stacks and all the related gunf that goes with it.. it is not guaranteed to work 100% correctly at this time but as we had several people trying to work on it I figured it would be better to get it checked in so they could all get teh same thing to work on..
Mikes been using it for a year or so but on 2.0
more changes and stuff will be merged in from other developers now that this is in.
Mike Mitchell, Network Engineer AMTECH Systems Corporation, Technology and Manufacturing 8600 Jefferson Street, Albuquerque, New Mexico 87113 (505) 856-8000 supervisor@alb.asctmd.com
|