DragonFly BSD
DragonFly kernel List (threaded) for 2009-11
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: Socket related stuff - patch available for testing

From: "Edward O'Callaghan" <eocallaghan@xxxxxxxxxxxx>
Date: Thu, 12 Nov 2009 04:05:22 +0000

Looks good Matt,

Just my quick review,
I didn't notice anything obvious, although patch is fairly large.


2009/11/12 Matthew Dillon <dillon@apollo.backplane.com>:
>    Here's a patch, it needs some serious testing:
>        fetch http://apollo.backplane.com/DFlyMisc/tcp01.patch
>    The patch:
>        * Moves the socket pointer into the netmsg base structure, even
>          though some things don't use it, I know
>        * Adds a lwkt_port pointer to the socket structure and initializes
>          it to cpu0_soport()
>        * Expects network protocols to set so->so_port in their attach
>          functions, plus I do that for tcp and udp.
>        * Performs message chasing when the protocol port changes due to
>          e.g.  a connect() or an implied connect or (I think) also an
>          implied binding to INADDR_ANY.
>          If a number of messages for a socket have built up on a protocol
>          thread and some operation in the protocol changes the socket's
>          protocol thread (aka implied connect), then any other messages
>          queued to that protocol thread, or new messages which race the
>          change, will automatically be forwarded to the correct protocol
>          thread when they are encountered.
>        * Fixes implied connects for TCP.  This is when you use sendmsg()
>          with an address to imply a connect along with data, so data can
>          be sent along with the SYN.
>          Implied connects were completely broken and would crash the kernel.
>          Example:  finger user@target  (instant crash).  finger uses the
>          implied connect feature.
>        * Cleans up a bunch of stuff.  I was almost able to remove
>          the proto->pr_mport field entirely but sendmsg() still needs
>          to use it in the case where the passed address is non-NULL (aka
>          sendto() style).  All other code that used to call proto->pr_mport()
>          now simply snarf the port out of so->so_port.
>          The mport functions themselves now basically just return so_port.
>          I left the sendmsg code intact just in case we wanted to optimize
>          it later on for UDP.
>    I found a few other bugs in the code but haven't fixed them yet.  UDP
>    is not MPSAFE due to the global inpcbinfo (udbinfo) structure it uses.
>    This patch does need testing.  I don't know what I might have blown up.
>    It's fairly straight forward so I would also appreciate a code review.
>                                                -Matt

Edward O'Callaghan
eocallaghan at auroraux dot org

[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]