/*
- * Copyright (c) 2012 Apple Inc. All rights reserved.
+ * Copyright (c) 2012-2017 Apple Inc. All rights reserved.
*
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
#include <kern/locks.h>
#include <netinet/in.h>
-#if MPTCP
#include <netinet/mptcp_var.h>
-#endif /* MPTCP */
extern struct domain mpdomain_s;
-static struct domain *mpdomain = NULL;
static void mp_dinit(struct domain *);
-lck_mtx_t *mp_domain_mutex;
-static struct protosw mpsw[] = {
-#if MPTCP
-{
- .pr_type = SOCK_STREAM,
- .pr_protocol = IPPROTO_TCP,
- .pr_flags = PR_CONNREQUIRED|PR_MULTICONN|PR_EVCONNINFO|
- PR_WANTRCVD|PR_PCBLOCK|PR_PROTOLOCK,
- .pr_ctloutput = mptcp_ctloutput,
- .pr_init = mptcp_init,
- .pr_usrreqs = &mptcp_usrreqs,
- .pr_lock = mptcp_lock,
- .pr_unlock = mptcp_unlock,
- .pr_getlock = mptcp_getlock,
-},
-#endif /* MPTCP */
+static struct protosw mpsw = {
+ .pr_type = SOCK_STREAM,
+ .pr_protocol = IPPROTO_TCP,
+ .pr_flags = PR_CONNREQUIRED | PR_MULTICONN | PR_EVCONNINFO |
+ PR_WANTRCVD | PR_PCBLOCK | PR_PROTOLOCK |
+ PR_PRECONN_WRITE | PR_DATA_IDEMPOTENT,
+ .pr_ctloutput = mptcp_ctloutput,
+ .pr_init = mptcp_init,
+ .pr_usrreqs = &mptcp_usrreqs,
+ .pr_lock = mptcp_lock,
+ .pr_unlock = mptcp_unlock,
+ .pr_getlock = mptcp_getlock,
};
-static int mp_proto_count = (sizeof (mpsw) / sizeof (struct protosw));
-
struct domain mpdomain_s = {
- .dom_family = PF_MULTIPATH,
- .dom_flags = DOM_REENTRANT,
- .dom_name = "multipath",
- .dom_init = mp_dinit,
+ .dom_family = PF_MULTIPATH,
+ .dom_flags = DOM_REENTRANT,
+ .dom_name = "multipath",
+ .dom_init = mp_dinit,
};
/* Initialize the PF_MULTIPATH domain, and add in the pre-defined protos */
void
mp_dinit(struct domain *dp)
{
- struct protosw *pr;
- int i;
-
VERIFY(!(dp->dom_flags & DOM_INITIALIZED));
- VERIFY(mpdomain == NULL);
-
- mpdomain = dp;
-
- for (i = 0, pr = &mpsw[0]; i < mp_proto_count; i++, pr++)
- net_add_proto(pr, dp, 1);
- mp_domain_mutex = dp->dom_mtx;
+ net_add_proto(&mpsw, dp, 1);
}