Re: [PATCH RFC 2/3] kcm: Kernel Connection Multiplexor module
flat view
From: Thomas Graf <tgraf@suug.ch>
Date: 2015-09-23 09:42:52
On 09/20/15 at 03:29pm, Tom Herbert wrote:
This module implement the Kernel Connection Multiplexor. Kernel Connection Multiplexor (KCM) is a facility that provides a message based interface over TCP for generic application protocols. With KCM an application can efficiently send and receive application protocol messages over TCP using datagram sockets. For more information see the included Documentation/networking/kcm.txt Signed-off-by: Tom Herbert <redacted>
This looks great!
quoted hunk ↗ jump to hunk
+Cloning KCM sockets +------------------- + +After the first KCM socket is created using the socket call as described +above, additional sockets for the multiplexor can be created by cloning +a KCM socket. This is accomplished by calling accept on the KCM socket: + + newkcmfd = accept(kcmfd, NULL, 0)
This looks a bit ugly.
+ ioctl(kcmfd, SIOCKCMATTACH, &info);
Use setsockopt() instead?
quoted hunk ↗ jump to hunk
+/* Process a new message. If there is no KCM socket waiting for a message + * hold it in the psock. Returns true if message is held this way, false + * otherwise. + */ +static bool new_rx_msg(struct kcm_psock *psock, struct sk_buff *head) +{ + struct kcm_mux *mux = psock->mux; + struct kcm_sock *kcm = NULL; + struct sock *sk; + + spin_lock_bh(&mux->lock); + + if (WARN_ON(psock->ready_rx_msg)) { + spin_unlock_bh(&mux->lock); + kfree_skb(head); + return false; + } + + if (list_empty(&mux->kcm_rx_waiters)) { + psock->ready_rx_msg = head; + + list_add_tail(&psock->psock_ready_list, + &mux->psocks_ready); + + spin_unlock_bh(&mux->lock); + return true; + } + + kcm = list_first_entry(&mux->kcm_rx_waiters, + struct kcm_sock, wait_rx_list);
Per CPU list of waiting sockets?