Module Name:    src
Committed By:   tls
Date:           Sun Aug 10 06:56:38 UTC 2014

Modified Files:
        src/sys/netmpls [tls-earlyentropy]: mpls_proto.c

Log Message:
Rebase.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.6.2.1 src/sys/netmpls/mpls_proto.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/netmpls/mpls_proto.c
diff -u src/sys/netmpls/mpls_proto.c:1.6 src/sys/netmpls/mpls_proto.c:1.6.2.1
--- src/sys/netmpls/mpls_proto.c:1.6	Tue Feb 25 18:30:12 2014
+++ src/sys/netmpls/mpls_proto.c	Sun Aug 10 06:56:38 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: mpls_proto.c,v 1.6 2014/02/25 18:30:12 pooka Exp $ */
+/*	$NetBSD: mpls_proto.c,v 1.6.2.1 2014/08/10 06:56:38 tls Exp $ */
 
 /*
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mpls_proto.c,v 1.6 2014/02/25 18:30:12 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mpls_proto.c,v 1.6.2.1 2014/08/10 06:56:38 tls Exp $");
 
 #include "opt_inet.h"
 #include "opt_mbuftrace.h"
@@ -49,8 +49,7 @@ __KERNEL_RCSID(0, "$NetBSD: mpls_proto.c
 
 struct ifqueue mplsintrq;
 
-static int mpls_usrreq(struct socket *, int, struct mbuf *, struct mbuf *,
-	struct mbuf *, struct lwp *);
+static int mpls_attach(struct socket *, int);
 static void sysctl_net_mpls_setup(struct sysctllog **);
 
 #ifdef MBUFTRACE
@@ -62,7 +61,7 @@ int mpls_mapttl_inet = 1;
 int mpls_mapttl_inet6 = 1;
 int mpls_icmp_respond = 0;
 int mpls_forwarding = 0;
-int mpls_accept = 0;
+int mpls_frame_accept = 0;
 int mpls_mapprec_inet = 1;
 int mpls_mapclass_inet6 = 1;
 int mpls_rfc4182 = 1;
@@ -78,63 +77,184 @@ void mpls_init(void)
 	sysctl_net_mpls_setup(NULL);
 }
 
-DOMAIN_DEFINE(mplsdomain);
-
-const struct protosw mplssw[] = {
-	{	.pr_domain = &mplsdomain,
-		.pr_init = mpls_init,
-	},
-	{
-		.pr_type = SOCK_DGRAM,
-		.pr_domain = &mplsdomain,
-		.pr_flags = PR_ATOMIC | PR_ADDR,
-		.pr_usrreq = mpls_usrreq,
-	},
-	{
-		.pr_type = SOCK_RAW,
-		.pr_domain = &mplsdomain,
-		.pr_flags = PR_ATOMIC | PR_ADDR,
-		.pr_usrreq = mpls_usrreq,
-	},
-};
-
-struct domain mplsdomain = {
-	.dom_family = PF_MPLS,
-	.dom_name = "MPLS",
-	.dom_init = NULL,
-	.dom_externalize = NULL,
-	.dom_dispose = NULL, 
-	.dom_protosw = mplssw,
-	.dom_protoswNPROTOSW = &mplssw[__arraycount(mplssw)],
-	.dom_rtattach = rt_inithead,
-	.dom_rtoffset = offsetof(struct sockaddr_mpls, smpls_addr) << 3,
-	.dom_maxrtkey = sizeof(union mpls_shim),
-	.dom_ifattach = NULL,
-	.dom_ifdetach = NULL,
-	.dom_ifqueues = { &mplsintrq, NULL },
-	.dom_link = { NULL },
-	.dom_mowner = MOWNER_INIT("MPLS", ""),
-	.dom_sa_cmpofs = offsetof(struct sockaddr_mpls, smpls_addr),
-	.dom_sa_cmplen = sizeof(union mpls_shim),
-	.dom_rtcache = LIST_HEAD_INITIALIZER(mplsdomain.dom_rtcache)
-};
-
 static int
-mpls_usrreq(struct socket *so, int req, struct mbuf *m,
-        struct mbuf *nam, struct mbuf *control, struct lwp *l)
+mpls_attach(struct socket *so, int proto)
 {
 	int error = EOPNOTSUPP;
 
-	if ((req == PRU_ATTACH) &&
-	    (so->so_snd.sb_hiwat == 0 || so->so_rcv.sb_hiwat == 0)) {
-		int s = splsoftnet();
+	sosetlock(so);
+	if (so->so_snd.sb_hiwat == 0 || so->so_rcv.sb_hiwat == 0) {
 		error = soreserve(so, 8192, 8192);
-		splx(s);
 	}
-
 	return error;
 }
 
+static void
+mpls_detach(struct socket *so)
+{
+}
+
+static int
+mpls_accept(struct socket *so, struct mbuf *nam)
+{
+	KASSERT(solocked(so));
+
+	return EOPNOTSUPP;
+}
+
+static int
+mpls_bind(struct socket *so, struct mbuf *nam, struct lwp *l)
+{
+	KASSERT(solocked(so));
+
+	return EOPNOTSUPP;
+}
+
+static int
+mpls_listen(struct socket *so, struct lwp *l)
+{
+	KASSERT(solocked(so));
+
+	return EOPNOTSUPP;
+}
+
+static int
+mpls_connect(struct socket *so, struct mbuf *nam, struct lwp *l)
+{
+	KASSERT(solocked(so));
+
+	return EOPNOTSUPP;
+}
+
+static int
+mpls_connect2(struct socket *so, struct socket *so2)
+{
+	KASSERT(solocked(so));
+
+	return EOPNOTSUPP;
+}
+
+static int
+mpls_disconnect(struct socket *so)
+{
+	KASSERT(solocked(so));
+
+	return EOPNOTSUPP;
+}
+
+static int
+mpls_shutdown(struct socket *so)
+{
+	KASSERT(solocked(so));
+
+	return EOPNOTSUPP;
+}
+
+static int
+mpls_abort(struct socket *so)
+{
+	KASSERT(solocked(so));
+
+	return EOPNOTSUPP;
+}
+
+static int
+mpls_ioctl(struct socket *so, u_long cmd, void *nam, struct ifnet *ifp)
+{
+	return EOPNOTSUPP;
+}
+
+static int
+mpls_stat(struct socket *so, struct stat *ub)
+{
+	KASSERT(solocked(so));
+
+	return EOPNOTSUPP;
+}
+
+static int
+mpls_peeraddr(struct socket *so, struct mbuf *nam)
+{
+	KASSERT(solocked(so));
+
+	return EOPNOTSUPP;
+}
+
+static int
+mpls_sockaddr(struct socket *so, struct mbuf *nam)
+{
+	KASSERT(solocked(so));
+
+	return EOPNOTSUPP;
+}
+
+static int
+mpls_rcvd(struct socket *so, int flags, struct lwp *l)
+{
+	KASSERT(solocked(so));
+
+	return EOPNOTSUPP;
+}
+
+static int
+mpls_recvoob(struct socket *so, struct mbuf *m, int flags)
+{
+	KASSERT(solocked(so));
+
+	return EOPNOTSUPP;
+}
+
+static int
+mpls_send(struct socket *so, struct mbuf *m, struct mbuf *nam,
+    struct mbuf *control, struct lwp *l)
+{
+	KASSERT(solocked(so));
+
+	return EOPNOTSUPP;
+}
+
+static int
+mpls_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
+{
+	KASSERT(solocked(so));
+
+	return EOPNOTSUPP;
+}
+
+static int
+mpls_purgeif(struct socket *so, struct ifnet *ifp)
+{
+
+	return EOPNOTSUPP;
+}
+
+static int
+mpls_usrreq(struct socket *so, int req, struct mbuf *m,
+    struct mbuf *nam, struct mbuf *control, struct lwp *l)
+{
+	KASSERT(req != PRU_ATTACH);
+	KASSERT(req != PRU_DETACH);
+	KASSERT(req != PRU_ACCEPT);
+	KASSERT(req != PRU_BIND);
+	KASSERT(req != PRU_LISTEN);
+	KASSERT(req != PRU_CONNECT);
+	KASSERT(req != PRU_CONNECT2);
+	KASSERT(req != PRU_DISCONNECT);
+	KASSERT(req != PRU_SHUTDOWN);
+	KASSERT(req != PRU_ABORT);
+	KASSERT(req != PRU_CONTROL);
+	KASSERT(req != PRU_SENSE);
+	KASSERT(req != PRU_PEERADDR);
+	KASSERT(req != PRU_SOCKADDR);
+	KASSERT(req != PRU_RCVD);
+	KASSERT(req != PRU_RCVOOB);
+	KASSERT(req != PRU_SEND);
+	KASSERT(req != PRU_SENDOOB);
+	KASSERT(req != PRU_PURGEIF);
+
+	return EOPNOTSUPP;
+}
+
 /*
  * Sysctl for MPLS variables.
  */
@@ -164,7 +284,7 @@ sysctl_net_mpls_setup(struct sysctllog *
 		       CTLFLAG_PERMANENT|CTLFLAG_READWRITE,
 		       CTLTYPE_INT, "accept",
 		       SYSCTL_DESCR("Accept MPLS Frames"),
-		       NULL, 0, &mpls_accept, 0,
+		       NULL, 0, &mpls_frame_accept, 0,
 		       CTL_NET, PF_MPLS, CTL_CREATE, CTL_EOL);
 	sysctl_createv(clog, 0, NULL, NULL,
 		       CTLFLAG_PERMANENT|CTLFLAG_READWRITE,
@@ -213,3 +333,89 @@ sysctl_net_mpls_setup(struct sysctllog *
 		       CTL_NET, PF_MPLS, CTL_CREATE, CTL_EOL);
 #endif
 }
+
+DOMAIN_DEFINE(mplsdomain);
+
+PR_WRAP_USRREQS(mpls)
+#define	mpls_attach	mpls_attach_wrapper
+#define	mpls_detach	mpls_detach_wrapper
+#define	mpls_accept	mpls_accept_wrapper
+#define	mpls_bind	mpls_bind_wrapper
+#define	mpls_listen	mpls_listen_wrapper
+#define	mpls_connect	mpls_connect_wrapper
+#define	mpls_connect2	mpls_connect2_wrapper
+#define	mpls_disconnect	mpls_disconnect_wrapper
+#define	mpls_shutdown	mpls_shutdown_wrapper
+#define	mpls_abort	mpls_abort_wrapper
+#define	mpls_ioctl	mpls_ioctl_wrapper
+#define	mpls_stat	mpls_stat_wrapper
+#define	mpls_peeraddr	mpls_peeraddr_wrapper
+#define	mpls_sockaddr	mpls_sockaddr_wrapper
+#define	mpls_rcvd	mpls_rcvd_wrapper
+#define	mpls_recvoob	mpls_recvoob_wrapper
+#define	mpls_send	mpls_send_wrapper
+#define	mpls_sendoob	mpls_sendoob_wrapper
+#define	mpls_purgeif	mpls_purgeif_wrapper
+#define	mpls_usrreq	mpls_usrreq_wrapper
+
+static const struct pr_usrreqs mpls_usrreqs = {
+	.pr_attach	= mpls_attach,
+	.pr_detach	= mpls_detach,
+	.pr_accept	= mpls_accept,
+	.pr_bind	= mpls_bind,
+	.pr_listen	= mpls_listen,
+	.pr_connect	= mpls_connect,
+	.pr_connect2	= mpls_connect2,
+	.pr_disconnect	= mpls_disconnect,
+	.pr_shutdown	= mpls_shutdown,
+	.pr_abort	= mpls_abort,
+	.pr_ioctl	= mpls_ioctl,
+	.pr_stat	= mpls_stat,
+	.pr_peeraddr	= mpls_peeraddr,
+	.pr_sockaddr	= mpls_sockaddr,
+	.pr_rcvd	= mpls_rcvd,
+	.pr_recvoob	= mpls_recvoob,
+	.pr_send	= mpls_send,
+	.pr_sendoob	= mpls_sendoob,
+	.pr_purgeif	= mpls_purgeif,
+	.pr_generic	= mpls_usrreq,
+};
+
+const struct protosw mplssw[] = {
+	{	.pr_domain = &mplsdomain,
+		.pr_init = mpls_init,
+	},
+	{
+		.pr_type = SOCK_DGRAM,
+		.pr_domain = &mplsdomain,
+		.pr_flags = PR_ATOMIC | PR_ADDR,
+		.pr_usrreqs = &mpls_usrreqs,
+	},
+	{
+		.pr_type = SOCK_RAW,
+		.pr_domain = &mplsdomain,
+		.pr_flags = PR_ATOMIC | PR_ADDR,
+		.pr_usrreqs = &mpls_usrreqs,
+	},
+};
+
+struct domain mplsdomain = {
+	.dom_family = PF_MPLS,
+	.dom_name = "MPLS",
+	.dom_init = NULL,
+	.dom_externalize = NULL,
+	.dom_dispose = NULL, 
+	.dom_protosw = mplssw,
+	.dom_protoswNPROTOSW = &mplssw[__arraycount(mplssw)],
+	.dom_rtattach = rt_inithead,
+	.dom_rtoffset = offsetof(struct sockaddr_mpls, smpls_addr) << 3,
+	.dom_maxrtkey = sizeof(union mpls_shim),
+	.dom_ifattach = NULL,
+	.dom_ifdetach = NULL,
+	.dom_ifqueues = { &mplsintrq, NULL },
+	.dom_link = { NULL },
+	.dom_mowner = MOWNER_INIT("MPLS", ""),
+	.dom_sa_cmpofs = offsetof(struct sockaddr_mpls, smpls_addr),
+	.dom_sa_cmplen = sizeof(union mpls_shim),
+	.dom_rtcache = LIST_HEAD_INITIALIZER(mplsdomain.dom_rtcache)
+};

Reply via email to