28.08.2015 Views

The Design and Implementation of the Anykernel and Rump Kernels

1F3KDce

1F3KDce

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

146<br />

DOMAIN_DEFINE(sockindomain);<br />

const struct protosw sockinsw[] = {<br />

{<br />

.pr_type = SOCK_DGRAM, /* UDP */<br />

.pr_domain = &sockindomain,<br />

.pr_protocol = IPPROTO_UDP,<br />

.pr_flags = PR_ATOMIC | PR_ADDR,<br />

.pr_usrreq = sockin_usrreq,<br />

.pr_ctloutput = sockin_ctloutput,<br />

},{<br />

.pr_type = SOCK_STREAM, /* TCP */<br />

.pr_domain = &sockindomain,<br />

.pr_protocol = IPPROTO_TCP,<br />

.pr_flags = PR_CONNREQUIRED | PR_WANTRCVD | PR_LISTEN | PR_ABRTACPTDIS,<br />

.pr_usrreq = sockin_usrreq,<br />

.pr_ctloutput = sockin_ctloutput,<br />

}};<br />

struct domain sockindomain = {<br />

.dom_family = PF_INET,<br />

.dom_name = "socket_inet",<br />

.dom_init = sockin_init,<br />

.dom_externalize = NULL,<br />

.dom_dispose = NULL,<br />

.dom_protosw = sockinsw,<br />

.dom_protoswNPROTOSW = &sockinsw[__arraycount(sockinsw)],<br />

.dom_rtattach = rn_ini<strong>the</strong>ad,<br />

.dom_rt<strong>of</strong>fset = 32,<br />

.dom_maxrtkey = size<strong>of</strong>(struct sockaddr_in),<br />

.dom_ifattach = NULL,<br />

.dom_ifdetach = NULL,<br />

.dom_ifqueues = { NULL },<br />

.dom_link = { NULL },<br />

.dom_mowner = MOWNER_INIT("",""),<br />

.dom_rtcache = { NULL },<br />

.dom_sockaddr_cmp = NULL<br />

};<br />

Figure 3.23: sockin attachment. Networking domains in NetBSD are attached<br />

by specifying a struct domain. Notably, <strong>the</strong> sockin family attaches a PF_INET<br />

type family since it aims to provide an alternative implementation for inet sockets.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!