summaryrefslogtreecommitdiffstats
path: root/sys/netipx
Commit message (Collapse)AuthorAgeFilesLines
...
* Reduce network stack oddness: implement .pru_sockaddr and .pru_peeraddrrwatson2007-05-113-6/+6
| | | | | | | | 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.
* Build ipx_ip.c only if options IPXIP is defined. No functional change.rwatson2007-02-261-2/+0
|
* Fix a likely bug by adding what appears to be a missing break statementrwatson2007-02-261-0/+1
| | | | | in the IPX over IP configuration ioctl: when changing the flags on a tunnel interface, return the generated error rather than always EINVAL.
* Further style(9) for ipx_ip.rwatson2007-02-252-9/+7
|
* Improve ipx_ip.c's approximation of style(9).rwatson2007-02-251-97/+82
|
* Factor out UCB and my copyrights from copyrights of Mike Mitchell;rwatson2007-01-0819-20/+501
| | | | | | | the former use a three-clause BSD license (per UCB authorization letter), whereas he uses a four-clause BSD license. MFC after: 3 days
* Sweep kernel replacing suser(9) calls with priv(9) calls, assigningrwatson2006-11-062-6/+12
| | | | | | | | | | | | | 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>
* Change semantics of socket close and detach. Add a new protocol switchrwatson2006-07-212-15/+43
| | | | | | | | | | | | | | | | | | | 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
* Make this compile without INVARIANTS.cognet2006-04-111-0/+2
|
* Chance protocol switch method pru_detach() so that it returns voidrwatson2006-04-012-6/+4
| | | | | | | | | | | | | | | | | | | | | | | | | 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
* Change protocol switch pru_abort() API so that it returns void ratherrwatson2006-04-012-12/+4
| | | | | | | | | | | | | | 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
* Add a simple netipx TODO list to the end of README, since there are arwatson2006-03-271-0/+19
| | | | | | | number of problems with netipx that I have not yet resolved, and I don't want them lost track of. MFC after: 1 month
* Canonicalize copyright order in one more file that contains myrwatson2006-03-271-3/+4
| | | | | | copyright. MFC after: 1 month
* In spx_output(), use M_DONTWAIT instead of M_TRYWAIT, as we hold therwatson2006-03-271-5/+6
| | | | | | | | 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
* In spx_input(), change a '&&' to a '||', as the spx trace code is ablerwatson2006-03-271-1/+1
| | | | | | to handle a NULL 'cb' here. MFC after: 1 month
* In spx_accept, assert ipxp != NULL, not == NULL.rwatson2006-03-261-1/+1
| | | | MFC after: 1 month
* In various SPX protocol entry points from the socket layer, checkrwatson2006-03-261-7/+53
| | | | | | | | 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
* Add a new ipxpcb flag, IPXP_SPX, which is set on ipxpcb's to mark themrwatson2006-03-262-9/+15
| | | | | | | | | | 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
* Restore original formulation of SPX segment queue draining during SPXrwatson2006-03-261-1/+3
| | | | | | PCB detach. MFC after: 1 month
* Rework IPX/SPX socket and pcb reference model:rwatson2006-03-254-92/+146
| | | | | | | | | | | | | | | | | | | | | | | | | | - 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
* Restructure spx_attach() to properly free memory in the event that onerwatson2006-03-251-21/+32
| | | | | | | | | | 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
* Don't bother restoring host byte order of mbuf fields when we're justrwatson2006-03-251-3/+0
| | | | | | about to free the mbuf in the spx_input() error path. MFC after: 1 month
* In spx_ctloutput(), acquire the ipxp lock around read operations,rwatson2006-03-251-15/+25
| | | | | | | | 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
* Slight style reformatting of spx_timers() comments; panic if anrwatson2006-03-251-10/+12
| | | | | | unrecognized timer is passed into the function. MFC after: 1 month
* Include kernel.h to get NET_NEEDS_GIANT() definition, which for somerwatson2006-03-241-0/+1
| | | | | | | reason compiled fine here. I may be running with other include file changes locally. MFC after: 3 days
* Clean up and style(9) SPX code prior to significant functional changesrwatson2006-03-242-216/+258
| | | | | | | | | | | | | | 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
* Protect spx_iss using its own mutex, spx_mtx, rather than piggy-backingrwatson2006-03-241-1/+11
| | | | | | | on the global IPX mutex, which is not held at all necessary strategic points. MFC after: 1 month
* Move definition of spxrexmtthresh to top of file with other globalrwatson2006-03-241-2/+1
| | | | | | variables. MFC after: 1 month
* Canonicalize, update copyright.rwatson2006-03-241-102/+52
| | | | | | | Remove 'register'. Use ANSI prototypes, not K&R. MFC after: 1 month
* Update copyright to 2006, comment on my contribution to this code in therwatson2006-03-241-1/+4
| | | | | | style of previous contributors. MFC after: 1 month
* Comment that raw output filter code for IPX should run in a netisr so asrwatson2006-03-241-0/+4
| | | | | | | to avoid recursing the socket code, as this input path can run in the call stack of an output path. MFC after: 1 month
* When the kernel is compiled with options IPXIP, run the network stackrwatson2006-03-231-0/+2
| | | | | | | | 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
* Move spx_savesi from being a global variable to an automatically allocatedrwatson2006-03-232-3/+3
| | | | | | | | 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
* Admit to ourselves that we don't actually implement pr_ctlinput() forrwatson2006-03-232-44/+2
| | | | | | 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.
* In spx_attach() and spx_detach(), there is no need to check whether therwatson2006-01-141-4/+0
| | | | | | | | | 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
* Remove dead code associated with 'mcopy' in ipx_forward(): at no pointrwatson2006-01-131-26/+1
| | | | | | | | | 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
* Include ip_options.h for IPX-IP encapsulation.andre2005-11-201-0/+1
| | | | | Noticed by: Tinderbox Sponsored by: TCP/IP Optimization Fundraise 2005
* Use sparse initializers for "struct domain" and "struct protosw",ru2005-11-091-29/+46
| | | | so they are easier to follow for the human being.
* Retire MT_HEADER mbuf type and change its users to use MT_DATA.andre2005-11-022-4/+4
| | | | | | | | | | | | 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
* Push the assignment of a new or updated so_qlimit from solisten()rwatson2005-10-301-3/+4
| | | | | | | | | | | | | | 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.
* Forward declaring static variables as extern is invalid ISO-C. Now thatobrien2005-09-071-1/+2
| | | | GCC can properly handle forward static declarations, do this properly.
* Stop embedding struct ifnet at the top of driver softcs. Instead thebrooks2005-06-102-8/+14
| | | | | | | | | | | | | | | | | | | | 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
* Back out ipx.h:1.18, which introduced a Linux API compatibility field inrwatson2005-05-271-3/+0
| | | | | | | | | | | | | | | | | | 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
* Update copyright: parts of the netipx implementation are covered by arwatson2005-04-101-1/+1
| | | | | | 2005 copyright. MFC after: 3 days
* Compare (mbuf *) with NULL, not 0.rwatson2005-04-101-1/+1
| | | | MFC after: 3 days
* Marginally reformat my copyright statement to remove the spurious ','.rwatson2005-03-101-1/+1
|
* In the current world order, solisten() implements the state transition ofrwatson2005-02-211-2/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Mark the IPX netisr as MPSAFE so that inbound IPX traffic is processedrwatson2005-01-091-1/+1
| | | | | | | without Giant, and can be directly dispatched in the ithread when net.isr.enable is turned on. MFC after: 4 weeks
* Recent changes have locked down most of the highly dynamic datarwatson2005-01-092-4/+0
| | | | | | | | | | | | | | 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
* Use the IPX PCB list mutex and IPX PCB mutexes to lock down the SPXrwatson2005-01-092-39/+110
| | | | | | | | | | | | | | | | | | | | | | | | 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
OpenPOWER on IntegriCloud