home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / mach / doc / published / ex-pag.tutorial / netmem.shar.Z / netmem.shar
SHell self-extracting ARchive  |  1993-04-07  |  27.7 KB

open in: MacOS 8.1     |     Win98     |     DOS

browse contents    |     view JSON data     |     view as text


This file was processed as: SHell self-extracting ARchive (archive/shar).

ConfidenceProgramDetectionMatch TypeSupport
100% dexvert SHell self-extracting ARchive (archive/shar) magic Supported
1% dexvert Text File (text/txt) fallback Supported
100% file POSIX shell script text executable default
99% file C source text default
98% file a /bin/sh script, ASCII text executable default (weak)
100% perlTextCheck Likely Text (Perl) default
100% siegfried fmt/329 Shell Archive Format default
100% gt2 Shell Skript: '/bin/sh' default (weak)
100% detectItEasy Format: Plain text[LF] default
100% binwalkID Executable script, shebang: "/bin/sh" default (weak)
100% xdgMime application/x-shellscript default (weak)



hex view
+--------+-------------------------+-------------------------+--------+--------+
|00000000| 23 21 20 2f 62 69 6e 2f | 73 68 0a 23 20 54 68 69 |#! /bin/|sh.# Thi|
|00000010| 73 20 69 73 20 61 20 73 | 68 65 6c 6c 20 61 72 63 |s is a s|hell arc|
|00000020| 68 69 76 65 2c 20 6d 65 | 61 6e 69 6e 67 3a 0a 23 |hive, me|aning:.#|
|00000030| 20 31 2e 20 52 65 6d 6f | 76 65 20 65 76 65 72 79 | 1. Remo|ve every|
|00000040| 74 68 69 6e 67 20 61 62 | 6f 76 65 20 74 68 65 20 |thing ab|ove the |
|00000050| 23 21 20 2f 62 69 6e 2f | 73 68 20 6c 69 6e 65 2e |#! /bin/|sh line.|
|00000060| 0a 23 20 32 2e 20 53 61 | 76 65 20 74 68 65 20 72 |.# 2. Sa|ve the r|
|00000070| 65 73 75 6c 74 69 6e 67 | 20 74 65 78 74 20 69 6e |esulting| text in|
|00000080| 20 61 20 66 69 6c 65 2e | 0a 23 20 33 2e 20 45 78 | a file.|.# 3. Ex|
|00000090| 65 63 75 74 65 20 74 68 | 65 20 66 69 6c 65 20 77 |ecute th|e file w|
|000000a0| 69 74 68 20 2f 62 69 6e | 2f 73 68 20 28 6e 6f 74 |ith /bin|/sh (not|
|000000b0| 20 63 73 68 29 20 74 6f | 20 63 72 65 61 74 65 20 | csh) to| create |
|000000c0| 74 68 65 20 66 69 6c 65 | 73 3a 0a 23 09 6e 65 74 |the file|s:.#.net|
|000000d0| 6d 65 6d 5f 64 65 66 73 | 2e 68 0a 23 09 6e 65 74 |mem_defs|.h.#.net|
|000000e0| 6d 65 6d 5f 6f 62 6a 2e | 68 0a 23 09 6e 65 74 6d |mem_obj.|h.#.netm|
|000000f0| 65 6d 5f 63 6c 69 65 6e | 74 2e 63 0a 23 09 6e 65 |em_clien|t.c.#.ne|
|00000100| 74 6d 65 6d 5f 70 61 67 | 65 72 2e 63 0a 23 09 6e |tmem_pag|er.c.#.n|
|00000110| 65 74 6d 65 6d 5f 6d 73 | 67 2e 64 65 66 73 0a 23 |etmem_ms|g.defs.#|
|00000120| 09 6e 65 74 6d 65 6d 5f | 6d 73 67 5f 72 65 70 6c |.netmem_|msg_repl|
|00000130| 79 2e 64 65 66 73 0a 23 | 09 4d 61 6b 65 66 69 6c |y.defs.#|.Makefil|
|00000140| 65 0a 23 20 54 68 69 73 | 20 61 72 63 68 69 76 65 |e.# This| archive|
|00000150| 20 63 72 65 61 74 65 64 | 3a 20 54 68 75 20 41 70 | created|: Thu Ap|
|00000160| 72 20 20 38 20 30 39 3a | 35 38 3a 32 39 20 31 39 |r 8 09:|58:29 19|
|00000170| 39 33 0a 65 78 70 6f 72 | 74 20 50 41 54 48 3b 20 |93.expor|t PATH; |
|00000180| 50 41 54 48 3d 2f 62 69 | 6e 3a 24 50 41 54 48 0a |PATH=/bi|n:$PATH.|
|00000190| 69 66 20 74 65 73 74 20 | 2d 66 20 27 6e 65 74 6d |if test |-f 'netm|
|000001a0| 65 6d 5f 64 65 66 73 2e | 68 27 0a 74 68 65 6e 0a |em_defs.|h'.then.|
|000001b0| 09 65 63 68 6f 20 73 68 | 61 72 3a 20 77 69 6c 6c |.echo sh|ar: will|
|000001c0| 20 6e 6f 74 20 6f 76 65 | 72 2d 77 72 69 74 65 20 | not ove|r-write |
|000001d0| 65 78 69 73 74 69 6e 67 | 20 66 69 6c 65 20 22 27 |existing| file "'|
|000001e0| 6e 65 74 6d 65 6d 5f 64 | 65 66 73 2e 68 27 22 0a |netmem_d|efs.h'".|
|000001f0| 65 6c 73 65 0a 63 61 74 | 20 3c 3c 20 5c 53 48 41 |else.cat| << \SHA|
|00000200| 52 5f 45 4f 46 20 3e 20 | 27 6e 65 74 6d 65 6d 5f |R_EOF > |'netmem_|
|00000210| 64 65 66 73 2e 68 27 0a | 2f 2a 0a 20 2a 20 20 20 |defs.h'.|/*. * |
|00000220| 20 20 20 46 69 6c 65 3a | 20 20 20 6e 65 74 6d 65 | File:| netme|
|00000230| 6d 5f 64 65 66 73 2e 68 | 0a 20 2a 20 20 20 20 20 |m_defs.h|. * |
|00000240| 20 41 75 74 68 6f 72 3a | 20 44 61 76 69 64 20 4c | Author:| David L|
|00000250| 2e 20 42 6c 61 63 6b 0a | 20 2a 0a 20 2a 20 20 20 |. Black.| *. * |
|00000260| 20 20 20 45 78 74 65 72 | 6e 61 6c 20 64 65 66 69 | Exter|nal defi|
|00000270| 6e 69 74 69 6f 6e 73 20 | 66 6f 72 20 6e 65 74 6d |nitions |for netm|
|00000280| 65 6d 5f 70 61 67 65 72 | 2e 0a 20 2a 2f 0a 0a 23 |em_pager|.. */..#|
|00000290| 69 6e 63 6c 75 64 65 20 | 3c 6d 61 63 68 2f 65 72 |include |<mach/er|
|000002a0| 72 6f 72 2e 68 3e 0a 0a | 2f 2a 0a 20 2a 09 4e 61 |ror.h>..|/*. *.Na|
|000002b0| 6d 65 20 6f 66 20 74 68 | 65 20 70 61 67 65 72 20 |me of th|e pager |
|000002c0| 66 6f 72 20 74 68 65 20 | 6e 61 6d 65 73 65 72 76 |for the |nameserv|
|000002d0| 69 63 65 2e 0a 20 2a 2f | 0a 0a 23 64 65 66 69 6e |ice.. */|..#defin|
|000002e0| 65 09 4e 45 54 4d 45 4d | 5f 4e 41 4d 45 09 09 22 |e.NETMEM|_NAME.."|
|000002f0| 6e 65 74 6d 65 6d 5f 70 | 61 67 65 72 22 0a 0a 2f |netmem_p|ager"../|
|00000300| 2a 0a 20 2a 09 46 61 69 | 6c 75 72 65 20 63 6f 64 |*. *.Fai|lure cod|
|00000310| 65 73 2e 20 20 55 73 65 | 20 75 73 65 72 2d 72 65 |es. Use| user-re|
|00000320| 73 65 72 76 65 64 20 65 | 72 72 6f 72 73 2e 0a 20 |served e|rrors.. |
|00000330| 2a 2f 0a 0a 23 64 65 66 | 69 6e 65 20 4e 45 54 4d |*/..#def|ine NETM|
|00000340| 45 4d 5f 42 41 44 5f 4f | 42 4a 45 43 54 09 28 65 |EM_BAD_O|BJECT.(e|
|00000350| 72 72 5f 6c 6f 63 61 6c | 7c 65 72 72 5f 73 75 62 |rr_local||err_sub|
|00000360| 28 31 33 29 7c 31 29 0a | 23 64 65 66 69 6e 65 20 |(13)|1).|#define |
|00000370| 4e 45 54 4d 45 4d 5f 42 | 41 44 5f 4f 46 46 53 45 |NETMEM_B|AD_OFFSE|
|00000380| 54 09 28 65 72 72 5f 6c | 6f 63 61 6c 7c 65 72 72 |T.(err_l|ocal|err|
|00000390| 5f 73 75 62 28 31 33 29 | 7c 32 29 0a 23 64 65 66 |_sub(13)||2).#def|
|000003a0| 69 6e 65 20 4e 45 54 4d | 45 4d 5f 46 41 49 4c 55 |ine NETM|EM_FAILU|
|000003b0| 52 45 09 09 28 65 72 72 | 5f 6c 6f 63 61 6c 7c 65 |RE..(err|_local|e|
|000003c0| 72 72 5f 73 75 62 28 31 | 33 29 7c 33 29 0a 53 48 |rr_sub(1|3)|3).SH|
|000003d0| 41 52 5f 45 4f 46 0a 66 | 69 20 23 20 65 6e 64 20 |AR_EOF.f|i # end |
|000003e0| 6f 66 20 6f 76 65 72 77 | 72 69 74 69 6e 67 20 63 |of overw|riting c|
|000003f0| 68 65 63 6b 0a 69 66 20 | 74 65 73 74 20 2d 66 20 |heck.if |test -f |
|00000400| 27 6e 65 74 6d 65 6d 5f | 6f 62 6a 2e 68 27 0a 74 |'netmem_|obj.h'.t|
|00000410| 68 65 6e 0a 09 65 63 68 | 6f 20 73 68 61 72 3a 20 |hen..ech|o shar: |
|00000420| 77 69 6c 6c 20 6e 6f 74 | 20 6f 76 65 72 2d 77 72 |will not| over-wr|
|00000430| 69 74 65 20 65 78 69 73 | 74 69 6e 67 20 66 69 6c |ite exis|ting fil|
|00000440| 65 20 22 27 6e 65 74 6d | 65 6d 5f 6f 62 6a 2e 68 |e "'netm|em_obj.h|
|00000450| 27 22 0a 65 6c 73 65 0a | 63 61 74 20 3c 3c 20 5c |'".else.|cat << \|
|00000460| 53 48 41 52 5f 45 4f 46 | 20 3e 20 27 6e 65 74 6d |SHAR_EOF| > 'netm|
|00000470| 65 6d 5f 6f 62 6a 2e 68 | 27 0a 2f 2a 0a 20 2a 20 |em_obj.h|'./*. * |
|00000480| 20 20 20 20 20 46 69 6c | 65 3a 20 20 20 6e 65 74 | Fil|e: net|
|00000490| 6d 65 6d 5f 6f 62 6a 2e | 68 0a 20 2a 20 20 20 20 |mem_obj.|h. * |
|000004a0| 20 20 41 75 74 68 6f 72 | 3a 20 44 61 76 69 64 20 | Author|: David |
|000004b0| 4c 2e 20 42 6c 61 63 6b | 0a 20 2a 0a 20 2a 20 20 |L. Black|. *. * |
|000004c0| 20 20 20 20 49 6e 74 65 | 72 6e 61 6c 20 64 65 66 | Inte|rnal def|
|000004d0| 69 6e 69 74 69 6f 6e 73 | 20 66 6f 72 20 6e 65 74 |initions| for net|
|000004e0| 6d 65 6d 5f 6d 73 67 20 | 73 65 72 76 65 72 2e 0a |mem_msg |server..|
|000004f0| 20 2a 2f 0a 23 69 6e 63 | 6c 75 64 65 20 3c 6d 61 | */.#inc|lude <ma|
|00000500| 63 68 2e 68 3e 0a 0a 2f | 2a 0a 20 2a 09 50 6f 73 |ch.h>../|*. *.Pos|
|00000510| 73 69 62 6c 65 20 6f 62 | 6a 65 63 74 20 73 74 61 |sible ob|ject sta|
|00000520| 74 65 73 0a 20 2a 2f 0a | 0a 23 64 65 66 69 6e 65 |tes. */.|.#define|
|00000530| 09 4e 45 54 4d 45 4d 5f | 4f 42 4a 5f 4e 4f 4e 45 |.NETMEM_|OBJ_NONE|
|00000540| 09 09 31 09 2f 2a 20 4e | 6f 20 6d 65 6d 6f 72 79 |..1./* N|o memory|
|00000550| 20 65 78 69 73 74 73 20 | 66 6f 72 20 74 68 65 20 | exists |for the |
|00000560| 6f 62 6a 65 63 74 20 2a | 2f 0a 23 64 65 66 69 6e |object *|/.#defin|
|00000570| 65 20 4e 45 54 4d 45 4d | 5f 4f 42 4a 5f 52 45 41 |e NETMEM|_OBJ_REA|
|00000580| 44 20 09 32 09 2f 2a 20 | 53 65 72 76 65 72 20 68 |D .2./* |Server h|
|00000590| 61 73 20 72 65 61 64 20 | 6f 6e 6c 79 20 63 6f 70 |as read |only cop|
|000005a0| 79 2c 20 6b 65 72 6e 65 | 6c 0a 09 09 09 09 20 20 |y, kerne|l..... |
|000005b0| 20 09 20 20 20 6d 61 79 | 20 68 61 76 65 20 72 65 | . may| have re|
|000005c0| 61 64 20 6f 6e 6c 79 20 | 63 6f 70 79 20 2a 2f 0a |ad only |copy */.|
|000005d0| 23 64 65 66 69 6e 65 20 | 4e 45 54 4d 45 4d 5f 4f |#define |NETMEM_O|
|000005e0| 42 4a 5f 53 45 52 56 45 | 52 5f 57 52 49 54 45 09 |BJ_SERVE|R_WRITE.|
|000005f0| 33 09 2f 2a 20 53 65 72 | 76 65 72 20 68 61 73 20 |3./* Ser|ver has |
|00000600| 77 72 69 74 61 62 6c 65 | 20 63 6f 70 79 2c 20 6e |writable| copy, n|
|00000610| 6f 0a 09 09 09 09 09 20 | 20 20 6b 65 72 6e 65 6c |o...... | kernel|
|00000620| 20 63 6f 70 79 20 2a 2f | 0a 23 64 65 66 69 6e 65 | copy */|.#define|
|00000630| 20 4e 45 54 4d 45 4d 5f | 4f 42 4a 5f 4b 45 52 4e | NETMEM_|OBJ_KERN|
|00000640| 45 4c 5f 57 52 49 54 45 | 20 34 09 2f 2a 20 4b 65 |EL_WRITE| 4./* Ke|
|00000650| 72 6e 65 6c 20 6d 61 79 | 20 68 61 76 65 20 77 72 |rnel may| have wr|
|00000660| 69 74 61 62 6c 65 20 63 | 6f 70 79 2c 0a 09 09 09 |itable c|opy,....|
|00000670| 09 09 20 20 20 73 65 72 | 76 65 72 20 68 61 73 20 |.. ser|ver has |
|00000680| 6e 6f 2d 61 63 63 65 73 | 73 20 63 6f 70 79 20 2a |no-acces|s copy *|
|00000690| 2f 0a 23 64 65 66 69 6e | 65 20 4e 45 54 4d 45 4d |/.#defin|e NETMEM|
|000006a0| 5f 4f 42 4a 5f 43 4c 45 | 41 4e 49 4e 47 09 35 09 |_OBJ_CLE|ANING.5.|
|000006b0| 2f 2a 20 50 65 6e 64 69 | 6e 67 20 72 65 71 75 65 |/* Pendi|ng reque|
|000006c0| 73 74 20 74 6f 20 6b 65 | 72 6e 65 6c 20 74 6f 0a |st to ke|rnel to.|
|000006d0| 09 09 09 09 09 20 20 20 | 63 6c 65 61 6e 20 70 61 |..... |clean pa|
|000006e0| 67 65 20 61 6e 64 20 73 | 65 74 20 72 65 61 64 2d |ge and s|et read-|
|000006f0| 6f 6e 6c 79 20 2a 2f 0a | 23 64 65 66 69 6e 65 20 |only */.|#define |
|00000700| 4e 45 54 4d 45 4d 5f 4f | 42 4a 5f 46 4c 55 53 48 |NETMEM_O|BJ_FLUSH|
|00000710| 49 4e 47 09 36 09 2f 2a | 20 50 65 6e 64 69 6e 67 |ING.6./*| Pending|
|00000720| 20 72 65 71 75 65 73 74 | 20 74 6f 20 6b 65 72 6e | request| to kern|
|00000730| 65 6c 20 74 6f 0a 09 09 | 09 09 09 20 20 20 63 6c |el to...|... cl|
|00000740| 65 61 6e 20 61 6e 64 20 | 66 6c 75 73 68 20 70 61 |ean and |flush pa|
|00000750| 67 65 20 2a 2f 0a 2f 2a | 0a 20 2a 09 53 74 72 75 |ge */./*|. *.Stru|
|00000760| 63 74 75 72 65 20 66 6f | 72 20 61 20 70 65 6e 64 |cture fo|r a pend|
|00000770| 69 6e 67 20 6d 65 73 73 | 61 67 65 20 6f 70 65 72 |ing mess|age oper|
|00000780| 61 74 69 6f 6e 0a 20 2a | 2f 0a 23 64 65 66 69 6e |ation. *|/.#defin|
|00000790| 65 20 50 45 4e 44 49 4e | 47 5f 52 45 41 44 09 31 |e PENDIN|G_READ.1|
|000007a0| 0a 23 64 65 66 69 6e 65 | 20 50 45 4e 44 49 4e 47 |.#define| PENDING|
|000007b0| 5f 57 52 49 54 45 09 32 | 0a 0a 73 74 72 75 63 74 |_WRITE.2|..struct|
|000007c0| 09 70 65 6e 64 69 6e 67 | 5f 6f 70 20 7b 0a 09 73 |.pending|_op {..s|
|000007d0| 74 72 75 63 74 20 70 65 | 6e 64 69 6e 67 5f 6f 70 |truct pe|nding_op|
|000007e0| 09 2a 6e 65 78 74 3b 0a | 09 69 6e 74 09 09 09 6f |.*next;.|.int...o|
|000007f0| 70 3b 09 09 2f 2a 20 72 | 65 61 64 20 6f 72 20 77 |p;../* r|ead or w|
|00000800| 72 69 74 65 20 2a 2f 0a | 09 76 6d 5f 61 64 64 72 |rite */.|.vm_addr|
|00000810| 65 73 73 5f 74 09 09 6f | 66 66 73 65 74 3b 0a 09 |ess_t..o|ffset;..|
|00000820| 69 6e 74 09 09 09 76 61 | 6c 75 65 3b 0a 09 6d 61 |int...va|lue;..ma|
|00000830| 63 68 5f 70 6f 72 74 5f | 74 09 09 72 65 70 6c 79 |ch_port_|t..reply|
|00000840| 5f 70 6f 72 74 3b 0a 7d | 3b 0a 0a 74 79 70 65 64 |_port;.}|;..typed|
|00000850| 65 66 20 73 74 72 75 63 | 74 20 70 65 6e 64 69 6e |ef struc|t pendin|
|00000860| 67 5f 6f 70 09 2a 70 65 | 6e 64 69 6e 67 5f 6f 70 |g_op.*pe|nding_op|
|00000870| 5f 74 2c 20 70 65 6e 64 | 69 6e 67 5f 6f 70 5f 64 |_t, pend|ing_op_d|
|00000880| 61 74 61 5f 74 3b 0a 0a | 23 64 65 66 69 6e 65 20 |ata_t;..|#define |
|00000890| 50 45 4e 44 49 4e 47 5f | 4f 50 5f 4e 55 4c 4c 09 |PENDING_|OP_NULL.|
|000008a0| 28 28 70 65 6e 64 69 6e | 67 5f 6f 70 5f 74 29 20 |((pendin|g_op_t) |
|000008b0| 30 29 0a 0a 2f 2a 0a 20 | 2a 09 4f 62 6a 65 63 74 |0)../*. |*.Object|
|000008c0| 20 64 61 74 61 20 73 74 | 72 75 63 74 75 72 65 0a | data st|ructure.|
|000008d0| 20 2a 2f 0a 73 74 72 75 | 63 74 20 6e 65 74 6d 65 | */.stru|ct netme|
|000008e0| 6d 5f 6f 62 6a 20 7b 0a | 09 6d 61 63 68 5f 70 6f |m_obj {.|.mach_po|
|000008f0| 72 74 5f 74 09 09 6f 62 | 6a 65 63 74 5f 70 6f 72 |rt_t..ob|ject_por|
|00000900| 74 3b 09 2f 2a 20 72 65 | 70 72 65 73 65 6e 74 73 |t;./* re|presents|
|00000910| 20 6f 62 6a 65 63 74 20 | 2a 2f 0a 09 6d 61 63 68 | object |*/..mach|
|00000920| 5f 70 6f 72 74 5f 74 09 | 09 63 6f 6e 74 72 6f 6c |_port_t.|.control|
|00000930| 5f 70 6f 72 74 3b 20 20 | 20 2f 2a 20 6b 65 72 6e |_port; | /* kern|
|00000940| 65 6c 20 63 6f 6e 74 72 | 6f 6c 20 70 6f 72 74 20 |el contr|ol port |
|00000950| 2a 2f 0a 09 69 6e 74 09 | 09 09 73 65 6e 64 5f 72 |*/..int.|..send_r|
|00000960| 69 67 68 74 73 3b 20 20 | 20 20 2f 2a 20 63 6f 6e |ights; | /* con|
|00000970| 74 72 6f 6c 20 73 65 6e | 64 20 72 69 67 68 74 20 |trol sen|d right |
|00000980| 63 6f 75 6e 74 20 2a 2f | 0a 09 69 6e 74 09 09 09 |count */|..int...|
|00000990| 73 74 61 74 65 3b 09 09 | 2f 2a 20 77 68 6f 20 63 |state;..|/* who c|
|000009a0| 61 6e 20 61 63 63 65 73 | 73 20 68 6f 77 20 2a 2f |an acces|s how */|
|000009b0| 0a 09 76 6d 5f 61 64 64 | 72 65 73 73 5f 74 09 09 |..vm_add|ress_t..|
|000009c0| 64 61 74 61 3b 09 09 2f | 2a 20 70 6f 69 6e 74 65 |data;../|* pointe|
|000009d0| 72 20 74 6f 20 63 6f 6e | 74 65 6e 74 73 20 2a 2f |r to con|tents */|
|000009e0| 0a 0a 09 2f 2a 0a 09 20 | 2a 09 4e 65 78 74 20 74 |.../*.. |*.Next t|
|000009f0| 68 72 65 65 20 66 69 65 | 6c 64 73 20 75 73 65 64 |hree fie|lds used|
|00000a00| 20 6f 6e 6c 79 20 69 6e | 20 63 6c 65 61 6e 69 6e | only in| cleanin|
|00000a10| 67 20 61 6e 64 20 66 6c | 75 73 68 69 6e 67 20 73 |g and fl|ushing s|
|00000a20| 74 61 74 65 73 2e 0a 09 | 20 2a 2f 0a 09 70 65 6e |tates...| */..pen|
|00000a30| 64 69 6e 67 5f 6f 70 5f | 74 09 09 70 65 6e 64 69 |ding_op_|t..pendi|
|00000a40| 6e 67 5f 6f 70 5f 71 75 | 65 75 65 3b 09 2f 2a 20 |ng_op_qu|eue;./* |
|00000a50| 70 65 6e 64 69 6e 67 20 | 6d 73 67 20 6f 70 73 20 |pending |msg ops |
|00000a60| 2a 2f 0a 09 76 6d 5f 70 | 72 6f 74 5f 74 09 09 70 |*/..vm_p|rot_t..p|
|00000a70| 65 6e 64 69 6e 67 5f 6b | 65 72 6e 65 6c 5f 61 63 |ending_k|ernel_ac|
|00000a80| 63 65 73 73 3b 20 20 2f | 2a 20 70 65 6e 64 69 6e |cess; /|* pendin|
|00000a90| 67 20 6b 65 72 6e 65 6c | 20 6f 70 20 2a 2f 0a 09 |g kernel| op */..|
|00000aa0| 69 6e 74 09 09 09 70 65 | 6e 64 69 6e 67 5f 6b 65 |int...pe|nding_ke|
|00000ab0| 72 6e 65 6c 5f 74 79 70 | 65 3b 20 20 20 20 2f 2a |rnel_typ|e; /*|
|00000ac0| 20 77 68 69 63 68 20 6b | 65 72 6e 65 6c 20 6f 70 | which k|ernel op|
|00000ad0| 20 2a 2f 0a 23 64 65 66 | 69 6e 65 20 50 45 4e 44 | */.#def|ine PEND|
|00000ae0| 49 4e 47 5f 54 59 50 45 | 5f 4c 4f 43 4b 09 31 0a |ING_TYPE|_LOCK.1.|
|00000af0| 23 64 65 66 69 6e 65 20 | 50 45 4e 44 49 4e 47 5f |#define |PENDING_|
|00000b00| 54 59 50 45 5f 44 41 54 | 41 09 32 0a 7d 3b 0a 0a |TYPE_DAT|A.2.};..|
|00000b10| 74 79 70 65 64 65 66 20 | 73 74 72 75 63 74 20 6e |typedef |struct n|
|00000b20| 65 74 6d 65 6d 5f 6f 62 | 6a 09 2a 6e 65 74 6d 65 |etmem_ob|j.*netme|
|00000b30| 6d 5f 6f 62 6a 5f 74 2c | 20 6e 65 74 6d 65 6d 5f |m_obj_t,| netmem_|
|00000b40| 6f 62 6a 5f 64 61 74 61 | 5f 74 3b 0a 0a 23 64 65 |obj_data|_t;..#de|
|00000b50| 66 69 6e 65 20 4e 45 54 | 4d 45 4d 5f 4f 42 4a 5f |fine NET|MEM_OBJ_|
|00000b60| 4e 55 4c 4c 09 09 28 28 | 6e 65 74 6d 65 6d 5f 6f |NULL..((|netmem_o|
|00000b70| 62 6a 5f 74 29 20 30 29 | 0a 53 48 41 52 5f 45 4f |bj_t) 0)|.SHAR_EO|
|00000b80| 46 0a 66 69 20 23 20 65 | 6e 64 20 6f 66 20 6f 76 |F.fi # e|nd of ov|
|00000b90| 65 72 77 72 69 74 69 6e | 67 20 63 68 65 63 6b 0a |erwritin|g check.|
|00000ba0| 69 66 20 74 65 73 74 20 | 2d 66 20 27 6e 65 74 6d |if test |-f 'netm|
|00000bb0| 65 6d 5f 63 6c 69 65 6e | 74 2e 63 27 0a 74 68 65 |em_clien|t.c'.the|
|00000bc0| 6e 0a 09 65 63 68 6f 20 | 73 68 61 72 3a 20 77 69 |n..echo |shar: wi|
|00000bd0| 6c 6c 20 6e 6f 74 20 6f | 76 65 72 2d 77 72 69 74 |ll not o|ver-writ|
|00000be0| 65 20 65 78 69 73 74 69 | 6e 67 20 66 69 6c 65 20 |e existi|ng file |
|00000bf0| 22 27 6e 65 74 6d 65 6d | 5f 63 6c 69 65 6e 74 2e |"'netmem|_client.|
|00000c00| 63 27 22 0a 65 6c 73 65 | 0a 63 61 74 20 3c 3c 20 |c'".else|.cat << |
|00000c10| 5c 53 48 41 52 5f 45 4f | 46 20 3e 20 27 6e 65 74 |\SHAR_EO|F > 'net|
|00000c20| 6d 65 6d 5f 63 6c 69 65 | 6e 74 2e 63 27 0a 2f 2a |mem_clie|nt.c'./*|
|00000c30| 0a 20 2a 09 46 69 6c 65 | 3a 20 6e 65 74 6d 65 6d |. *.File|: netmem|
|00000c40| 5f 63 6c 69 65 6e 74 2e | 63 0a 20 2a 09 41 75 74 |_client.|c. *.Aut|
|00000c50| 68 6f 72 3a 20 44 61 76 | 69 64 20 4c 2e 20 42 6c |hor: Dav|id L. Bl|
|00000c60| 61 63 6b 0a 20 2a 0a 20 | 2a 09 53 69 6d 70 6c 65 |ack. *. |*.Simple|
|00000c70| 20 63 6c 69 65 6e 74 20 | 74 6f 20 64 65 6d 6f 6e | client |to demon|
|00000c80| 73 74 72 61 74 65 20 6e | 65 74 6d 65 6d 20 73 65 |strate n|etmem se|
|00000c90| 72 76 65 72 2e 0a 20 2a | 2f 0a 0a 23 69 6e 63 6c |rver.. *|/..#incl|
|00000ca0| 75 64 65 20 3c 6d 61 63 | 68 2e 68 3e 0a 23 69 6e |ude <mac|h.h>.#in|
|00000cb0| 63 6c 75 64 65 20 3c 6d | 61 63 68 5f 69 6e 69 74 |clude <m|ach_init|
|00000cc0| 2e 68 3e 0a 23 69 6e 63 | 6c 75 64 65 20 3c 73 65 |.h>.#inc|lude <se|
|00000cd0| 72 76 65 72 73 2f 6e 65 | 74 6e 61 6d 65 2e 68 3e |rvers/ne|tname.h>|
|00000ce0| 0a 23 69 6e 63 6c 75 64 | 65 20 3c 73 74 64 69 6f |.#includ|e <stdio|
|00000cf0| 2e 68 3e 0a 0a 23 69 6e | 63 6c 75 64 65 20 22 6e |.h>..#in|clude "n|
|00000d00| 65 74 6d 65 6d 5f 64 65 | 66 73 2e 68 22 0a 0a 6d |etmem_de|fs.h"..m|
|00000d10| 61 69 6e 28 29 0a 7b 0a | 09 6b 65 72 6e 5f 72 65 |ain().{.|.kern_re|
|00000d20| 74 75 72 6e 5f 74 09 72 | 3b 0a 09 6d 61 63 68 5f |turn_t.r|;..mach_|
|00000d30| 70 6f 72 74 5f 74 09 73 | 65 72 76 65 72 5f 70 6f |port_t.s|erver_po|
|00000d40| 72 74 3b 0a 09 76 6d 5f | 61 64 64 72 65 73 73 5f |rt;..vm_|address_|
|00000d50| 74 09 6e 65 74 6d 65 6d | 5f 61 64 64 72 65 73 73 |t.netmem|_address|
|00000d60| 3b 0a 0a 09 72 20 3d 20 | 6e 65 74 6e 61 6d 65 5f |;...r = |netname_|
|00000d70| 6c 6f 6f 6b 5f 75 70 28 | 6e 61 6d 65 5f 73 65 72 |look_up(|name_ser|
|00000d80| 76 65 72 5f 70 6f 72 74 | 2c 20 22 22 2c 20 4e 45 |ver_port|, "", NE|
|00000d90| 54 4d 45 4d 5f 4e 41 4d | 45 2c 20 26 73 65 72 76 |TMEM_NAM|E, &serv|
|00000da0| 65 72 5f 70 6f 72 74 29 | 3b 0a 09 69 66 20 28 72 |er_port)|;..if (r|
|00000db0| 20 21 3d 20 4e 45 54 4e | 41 4d 45 5f 53 55 43 43 | != NETN|AME_SUCC|
|00000dc0| 45 53 53 29 20 7b 0a 09 | 09 6d 61 63 68 5f 65 72 |ESS) {..|.mach_er|
|00000dd0| 72 6f 72 28 22 53 65 72 | 76 65 72 20 4c 6f 6f 6b |ror("Ser|ver Look|
|00000de0| 20 55 70 22 2c 20 72 29 | 3b 0a 09 09 65 78 69 74 | Up", r)|;...exit|
|00000df0| 28 2d 31 29 3b 0a 09 7d | 0a 0a 09 2f 2a 0a 09 20 |(-1);..}|.../*.. |
|00000e00| 2a 09 44 65 6c 69 62 65 | 72 61 74 65 6c 79 20 6d |*.Delibe|rately m|
|00000e10| 61 70 20 69 6e 20 61 6e | 20 65 78 74 72 61 20 70 |ap in an| extra p|
|00000e20| 61 67 65 20 74 6f 20 65 | 78 65 72 63 69 73 65 20 |age to e|xercise |
|00000e30| 65 72 72 6f 72 20 70 61 | 74 68 2e 0a 09 20 2a 2f |error pa|th... */|
|00000e40| 0a 09 6e 65 74 6d 65 6d | 5f 61 64 64 72 65 73 73 |..netmem|_address|
|00000e50| 20 3d 20 30 3b 0a 09 72 | 20 3d 20 76 6d 5f 6d 61 | = 0;..r| = vm_ma|
|00000e60| 70 28 6d 61 63 68 5f 74 | 61 73 6b 5f 73 65 6c 66 |p(mach_t|ask_self|
|00000e70| 28 29 2c 20 26 6e 65 74 | 6d 65 6d 5f 61 64 64 72 |(), &net|mem_addr|
|00000e80| 65 73 73 2c 0a 09 09 20 | 20 20 32 2a 76 6d 5f 70 |ess,... | 2*vm_p|
|00000e90| 61 67 65 5f 73 69 7a 65 | 2c 20 30 2c 20 54 52 55 |age_size|, 0, TRU|
|00000ea0| 45 2c 20 73 65 72 76 65 | 72 5f 70 6f 72 74 2c 20 |E, serve|r_port, |
|00000eb0| 30 2c 20 46 41 4c 53 45 | 2c 0a 09 09 20 20 20 56 |0, FALSE|,... V|
|00000ec0| 4d 5f 50 52 4f 54 5f 41 | 4c 4c 2c 20 56 4d 5f 50 |M_PROT_A|LL, VM_P|
|00000ed0| 52 4f 54 5f 41 4c 4c 2c | 20 56 4d 5f 49 4e 48 45 |ROT_ALL,| VM_INHE|
|00000ee0| 52 49 54 5f 4e 4f 4e 45 | 29 3b 0a 09 69 66 20 28 |RIT_NONE|);..if (|
|00000ef0| 72 20 21 3d 20 4b 45 52 | 4e 5f 53 55 43 43 45 53 |r != KER|N_SUCCES|
|00000f00| 53 29 20 7b 0a 09 09 6d | 61 63 68 5f 65 72 72 6f |S) {...m|ach_erro|
|00000f10| 72 28 22 4f 62 6a 65 63 | 74 20 76 6d 5f 6d 61 70 |r("Objec|t vm_map|
|00000f20| 22 2c 20 72 29 3b 0a 09 | 09 65 78 69 74 28 2d 31 |", r);..|.exit(-1|
|00000f30| 29 3b 0a 09 7d 0a 09 70 | 72 69 6e 74 66 28 22 4d |);..}..p|rintf("M|
|00000f40| 61 70 70 65 64 20 61 74 | 20 30 78 25 78 5c 6e 22 |apped at| 0x%x\n"|
|00000f50| 2c 20 6e 65 74 6d 65 6d | 5f 61 64 64 72 65 73 73 |, netmem|_address|
|00000f60| 29 3b 0a 0c 0a 09 2f 2a | 0a 09 20 2a 09 53 69 6d |);..../*|.. *.Sim|
|00000f70| 70 6c 65 20 63 6f 6d 6d | 61 6e 64 20 66 6f 72 6d |ple comm|and form|
|00000f80| 61 74 3a 0a 09 20 2a 09 | 09 4c 65 74 74 65 72 20 |at:.. *.|.Letter |
|00000f90| 6f 66 66 73 65 74 20 64 | 61 74 61 0a 09 20 2a 09 |offset d|ata.. *.|
|00000fa0| 4c 65 74 74 65 72 3a 20 | 70 5b 75 74 5d 2c 20 67 |Letter: |p[ut], g|
|00000fb0| 5b 65 74 5d 2c 20 72 5b | 65 61 64 5d 2c 20 77 5b |[et], r[|ead], w[|
|00000fc0| 72 69 74 65 5d 0a 09 20 | 2a 09 70 75 74 20 61 6e |rite].. |*.put an|
|00000fd0| 64 20 67 65 74 20 61 72 | 65 20 6d 65 73 73 61 67 |d get ar|e messag|
|00000fe0| 65 73 2c 20 72 65 61 64 | 20 61 6e 64 20 77 72 69 |es, read| and wri|
|00000ff0| 74 65 20 61 72 65 20 6d | 65 6d 6f 72 79 2e 0a 09 |te are m|emory...|
|00001000| 20 2a 2f 0a 09 70 72 69 | 6e 74 66 28 22 53 65 72 | */..pri|ntf("Ser|
|00001010| 76 65 72 20 63 6f 6e 74 | 61 63 74 65 64 2e 20 20 |ver cont|acted. |
|00001020| 70 67 72 77 20 3d 20 70 | 75 74 2f 67 65 74 2f 72 |pgrw = p|ut/get/r|
|00001030| 65 61 64 2f 77 72 69 74 | 65 20 78 20 3d 20 65 78 |ead/writ|e x = ex|
|00001040| 69 74 5c 6e 22 29 3b 0a | 0a 09 66 6f 72 20 28 3b |it\n");.|..for (;|
|00001050| 3b 29 20 7b 0a 0a 09 09 | 63 68 61 72 20 63 6d 64 |;) {....|char cmd|
|00001060| 3b 0a 09 09 69 6e 74 20 | 20 63 2c 20 6f 66 66 73 |;...int | c, offs|
|00001070| 65 74 2c 20 64 61 74 61 | 3b 0a 0a 09 09 70 72 69 |et, data|;....pri|
|00001080| 6e 74 66 28 22 70 67 72 | 77 3e 20 22 29 3b 0a 09 |ntf("pgr|w> ");..|
|00001090| 09 28 76 6f 69 64 29 20 | 73 63 61 6e 66 28 22 25 |.(void) |scanf("%|
|000010a0| 63 20 25 64 22 2c 20 26 | 63 6d 64 2c 20 26 6f 66 |c %d", &|cmd, &of|
|000010b0| 66 73 65 74 29 3b 0a 09 | 09 73 77 69 74 63 68 20 |fset);..|.switch |
|000010c0| 28 63 6d 64 29 20 7b 0a | 09 09 20 20 20 20 63 61 |(cmd) {.|.. ca|
|000010d0| 73 65 20 27 70 27 3a 0a | 09 09 09 28 76 6f 69 64 |se 'p':.|...(void|
|000010e0| 29 20 73 63 61 6e 66 28 | 22 25 64 22 2c 20 26 64 |) scanf(|"%d", &d|
|000010f0| 61 74 61 29 3b 0a 09 09 | 09 70 72 69 6e 74 66 28 |ata);...|.printf(|
|00001100| 22 70 75 74 20 25 64 20 | 3d 20 25 64 22 2c 20 6f |"put %d |= %d", o|
|00001110| 66 66 73 65 74 2c 20 64 | 61 74 61 29 3b 0a 09 09 |ffset, d|ata);...|
|00001120| 09 72 20 3d 20 6e 65 74 | 6d 65 6d 5f 77 72 69 74 |.r = net|mem_writ|
|00001130| 65 28 73 65 72 76 65 72 | 5f 70 6f 72 74 2c 20 6f |e(server|_port, o|
|00001140| 66 66 73 65 74 2c 20 64 | 61 74 61 29 3b 0a 09 09 |ffset, d|ata);...|
|00001150| 09 70 72 69 6e 74 66 28 | 22 20 20 20 20 20 72 65 |.printf(|" re|
|00001160| 73 75 6c 74 20 25 64 5c | 6e 22 2c 20 72 29 3b 0a |sult %d\|n", r);.|
|00001170| 09 09 09 62 72 65 61 6b | 3b 0a 0a 09 09 20 20 20 |...break|;.... |
|00001180| 20 63 61 73 65 20 27 67 | 27 3a 0a 09 09 09 70 72 | case 'g|':....pr|
|00001190| 69 6e 74 66 28 22 67 65 | 74 20 25 64 22 2c 20 6f |intf("ge|t %d", o|
|000011a0| 66 66 73 65 74 29 3b 0a | 09 09 09 72 20 3d 20 6e |ffset);.|...r = n|
|000011b0| 65 74 6d 65 6d 5f 72 65 | 61 64 28 73 65 72 76 65 |etmem_re|ad(serve|
|000011c0| 72 5f 70 6f 72 74 2c 20 | 6f 66 66 73 65 74 2c 20 |r_port, |offset, |
|000011d0| 26 64 61 74 61 29 3b 0a | 09 09 09 70 72 69 6e 74 |&data);.|...print|
|000011e0| 66 28 22 20 3d 20 25 64 | 20 20 20 20 20 72 65 73 |f(" = %d| res|
|000011f0| 75 6c 74 20 25 64 5c 6e | 22 2c 20 64 61 74 61 2c |ult %d\n|", data,|
|00001200| 20 72 29 3b 0a 09 09 09 | 62 72 65 61 6b 3b 0a 0a | r);....|break;..|
|00001210| 09 09 20 20 20 20 63 61 | 73 65 20 27 72 27 3a 0a |.. ca|se 'r':.|
|00001220| 09 09 20 20 20 20 09 64 | 61 74 61 20 3d 20 2a 28 |.. .d|ata = *(|
|00001230| 20 28 28 69 6e 74 20 2a | 29 20 6e 65 74 6d 65 6d | ((int *|) netmem|
|00001240| 5f 61 64 64 72 65 73 73 | 29 20 2b 20 6f 66 66 73 |_address|) + offs|
|00001250| 65 74 29 3b 0a 09 09 09 | 70 72 69 6e 74 66 28 22 |et);....|printf("|
|00001260| 72 65 61 64 20 25 64 20 | 3d 20 25 64 5c 6e 22 2c |read %d |= %d\n",|
|00001270| 20 6f 66 66 73 65 74 2c | 20 64 61 74 61 29 3b 0a | offset,| data);.|
|00001280| 09 09 09 62 72 65 61 6b | 3b 0a 0a 09 09 20 20 20 |...break|;.... |
|00001290| 63 61 73 65 20 27 77 27 | 3a 0a 09 09 09 28 76 6f |case 'w'|:....(vo|
|000012a0| 69 64 29 20 73 63 61 6e | 66 28 22 25 64 22 2c 20 |id) scan|f("%d", |
|000012b0| 26 64 61 74 61 29 3b 0a | 09 09 20 20 20 20 20 20 |&data);.|.. |
|000012c0| 20 20 2a 28 20 28 28 69 | 6e 74 20 2a 29 6e 65 74 | *( ((i|nt *)net|
|000012d0| 6d 65 6d 5f 61 64 64 72 | 65 73 73 29 20 2b 20 6f |mem_addr|ess) + o|
|000012e0| 66 66 73 65 74 29 20 3d | 20 64 61 74 61 3b 0a 20 |ffset) =| data;. |
|000012f0| 20 20 20 09 09 09 70 72 | 69 6e 74 66 28 22 77 72 | ...pr|intf("wr|
|00001300| 69 74 65 20 25 64 20 3d | 20 25 64 5c 6e 22 2c 20 |ite %d =| %d\n", |
|00001310| 6f 66 66 73 65 74 2c 20 | 64 61 74 61 29 3b 0a 09 |offset, |data);..|
|00001320| 09 09 62 72 65 61 6b 3b | 0a 0a 09 09 20 20 20 20 |..break;|.... |
|00001330| 63 61 73 65 20 27 78 27 | 3a 0a 09 09 20 20 20 20 |case 'x'|:... |
|00001340| 09 65 78 69 74 28 31 29 | 3b 0a 0a 09 09 20 20 20 |.exit(1)|;.... |
|00001350| 20 64 65 66 61 75 6c 74 | 3a 0a 09 09 20 20 20 20 | default|:... |
|00001360| 20 20 20 20 70 72 69 6e | 74 66 28 22 3f 3f 3f 5c | prin|tf("???\|
|00001370| 6e 22 29 3b 0a 09 20 20 | 20 20 20 20 20 20 7d 0a |n");.. | }.|
|00001380| 0a 09 09 77 68 69 6c 65 | 20 28 28 63 20 3d 20 67 |...while| ((c = g|
|00001390| 65 74 63 28 73 74 64 69 | 6e 29 29 20 21 3d 20 27 |etc(stdi|n)) != '|
|000013a0| 5c 6e 27 29 3b 0a 09 7d | 0a 09 2f 2a 4e 4f 54 52 |\n');..}|../*NOTR|
|000013b0| 45 41 43 48 45 44 2a 2f | 0a 7d 0a 53 48 41 52 5f |EACHED*/|.}.SHAR_|
|000013c0| 45 4f 46 0a 66 69 20 23 | 20 65 6e 64 20 6f 66 20 |EOF.fi #| end of |
|000013d0| 6f 76 65 72 77 72 69 74 | 69 6e 67 20 63 68 65 63 |overwrit|ing chec|
|000013e0| 6b 0a 69 66 20 74 65 73 | 74 20 2d 66 20 27 6e 65 |k.if tes|t -f 'ne|
|000013f0| 74 6d 65 6d 5f 70 61 67 | 65 72 2e 63 27 0a 74 68 |tmem_pag|er.c'.th|
|00001400| 65 6e 0a 09 65 63 68 6f | 20 73 68 61 72 3a 20 77 |en..echo| shar: w|
|00001410| 69 6c 6c 20 6e 6f 74 20 | 6f 76 65 72 2d 77 72 69 |ill not |over-wri|
|00001420| 74 65 20 65 78 69 73 74 | 69 6e 67 20 66 69 6c 65 |te exist|ing file|
|00001430| 20 22 27 6e 65 74 6d 65 | 6d 5f 70 61 67 65 72 2e | "'netme|m_pager.|
|00001440| 63 27 22 0a 65 6c 73 65 | 0a 63 61 74 20 3c 3c 20 |c'".else|.cat << |
|00001450| 5c 53 48 41 52 5f 45 4f | 46 20 3e 20 27 6e 65 74 |\SHAR_EO|F > 'net|
|00001460| 6d 65 6d 5f 70 61 67 65 | 72 2e 63 27 0a 2f 2a 0a |mem_page|r.c'./*.|
|00001470| 20 2a 20 20 20 20 20 20 | 46 69 6c 65 3a 20 20 20 | * |File: |
|00001480| 6e 65 74 6d 65 6d 5f 70 | 61 67 65 72 2e 63 0a 20 |netmem_p|ager.c. |
|00001490| 2a 20 20 20 20 20 20 41 | 75 74 68 6f 72 3a 20 44 |* A|uthor: D|
|000014a0| 61 76 69 64 20 4c 2e 20 | 42 6c 61 63 6b 0a 20 2a |avid L. |Black. *|
|000014b0| 0a 20 2a 20 20 20 20 20 | 20 54 68 65 20 61 63 74 |. * | The act|
|000014c0| 75 61 6c 20 6e 65 74 6d | 65 6d 5f 6d 73 67 20 70 |ual netm|em_msg p|
|000014d0| 61 67 65 72 2e 20 20 54 | 68 69 73 20 69 73 20 61 |ager. T|his is a|
|000014e0| 20 73 69 6d 70 6c 65 20 | 70 61 67 65 72 20 74 68 | simple |pager th|
|000014f0| 61 74 20 70 72 6f 76 69 | 64 65 73 0a 20 2a 09 6f |at provi|des. *.o|
|00001500| 6e 65 20 70 61 67 65 20 | 6f 66 20 6d 65 6d 6f 72 |ne page |of memor|
|00001510| 79 2c 20 61 63 63 65 73 | 73 69 62 6c 65 20 65 69 |y, acces|sible ei|
|00001520| 74 68 65 72 20 76 69 61 | 20 6d 61 70 70 69 6e 67 |ther via| mapping|
|00001530| 20 6f 72 20 61 20 6d 65 | 73 73 61 67 65 0a 20 2a | or a me|ssage. *|
|00001540| 09 62 61 73 65 64 20 69 | 6e 74 65 72 66 61 63 65 |.based i|nterface|
|00001550| 2e 20 20 49 74 20 6f 6e | 6c 79 20 77 6f 72 6b 73 |. It on|ly works|
|00001560| 20 77 69 74 68 20 6f 6e | 65 20 6b 65 72 6e 65 6c | with on|e kernel|
|00001570| 2e 0a 20 2a 2f 0a 0a 23 | 69 6e 63 6c 75 64 65 20 |.. */..#|include |
|00001580| 3c 6d 61 63 68 2e 68 3e | 0a 23 69 6e 63 6c 75 64 |<mach.h>|.#includ|
|00001590| 65 20 3c 6d 61 63 68 5f | 69 6e 69 74 2e 68 3e 0a |e <mach_|init.h>.|
|000015a0| 23 69 6e 63 6c 75 64 65 | 20 3c 6d 69 67 5f 65 72 |#include| <mig_er|
|000015b0| 72 6f 72 73 2e 68 3e 0a | 23 69 6e 63 6c 75 64 65 |rors.h>.|#include|
|000015c0| 20 3c 73 65 72 76 65 72 | 73 2f 6e 65 74 6e 61 6d | <server|s/netnam|
|000015d0| 65 2e 68 3e 0a 0a 23 69 | 6e 63 6c 75 64 65 20 3c |e.h>..#i|nclude <|
|000015e0| 73 74 64 69 6f 2e 68 3e | 0a 0a 23 69 6e 63 6c 75 |stdio.h>|..#inclu|
|000015f0| 64 65 20 3c 6d 61 63 68 | 2f 6d 65 73 73 61 67 65 |de <mach|/message|
|00001600| 2e 68 3e 0a 0a 23 69 6e | 63 6c 75 64 65 20 22 6e |.h>..#in|clude "n|
|00001610| 65 74 6d 65 6d 5f 64 65 | 66 73 2e 68 22 0a 23 69 |etmem_de|fs.h".#i|
|00001620| 6e 63 6c 75 64 65 20 22 | 6e 65 74 6d 65 6d 5f 6f |nclude "|netmem_o|
|00001630| 62 6a 2e 68 22 0a 0a 23 | 69 6e 63 6c 75 64 65 20 |bj.h"..#|include |
|00001640| 22 6e 65 74 6d 65 6d 5f | 6d 73 67 2e 68 22 0a 23 |"netmem_|msg.h".#|
|00001650| 69 6e 63 6c 75 64 65 20 | 22 6e 65 74 6d 65 6d 5f |include |"netmem_|
|00001660| 6d 73 67 5f 72 65 70 6c | 79 2e 68 22 0a 0a 6e 65 |msg_repl|y.h"..ne|
|00001670| 74 6d 65 6d 5f 6f 62 6a | 5f 64 61 74 61 5f 74 09 |tmem_obj|_data_t.|
|00001680| 6d 61 73 74 65 72 5f 6f | 62 6a 3b 0a 0a 0c 0a 2f |master_o|bj;..../|
|00001690| 2a 0a 20 2a 09 49 6e 69 | 74 69 61 6c 69 7a 61 74 |*. *.Ini|tializat|
|000016a0| 69 6f 6e 20 72 6f 75 74 | 69 6e 65 20 66 6f 72 20 |ion rout|ine for |
|000016b0| 74 68 65 20 73 65 72 76 | 65 72 2e 0a 20 2a 2f 0a |the serv|er.. */.|
|000016c0| 76 6f 69 64 0a 69 6e 69 | 74 28 29 0a 7b 0a 09 6b |void.ini|t().{..k|
|000016d0| 65 72 6e 5f 72 65 74 75 | 72 6e 5f 74 09 72 3b 0a |ern_retu|rn_t.r;.|
|000016e0| 0a 09 2f 2a 0a 09 20 2a | 09 49 6e 69 74 69 61 6c |../*.. *|.Initial|
|000016f0| 69 7a 65 20 74 68 65 20 | 6f 62 6a 65 63 74 2e 20 |ize the |object. |
|00001700| 20 54 68 69 73 20 68 61 | 64 20 62 65 74 74 65 72 | This ha|d better|
|00001710| 20 77 6f 72 6b 2e 0a 09 | 20 2a 2f 0a 09 72 20 3d | work...| */..r =|
|00001720| 20 6d 61 63 68 5f 70 6f | 72 74 5f 61 6c 6c 6f 63 | mach_po|rt_alloc|
|00001730| 61 74 65 28 6d 61 63 68 | 5f 74 61 73 6b 5f 73 65 |ate(mach|_task_se|
|00001740| 6c 66 28 29 2c 20 4d 41 | 43 48 5f 50 4f 52 54 5f |lf(), MA|CH_PORT_|
|00001750| 52 49 47 48 54 5f 52 45 | 43 45 49 56 45 2c 0a 09 |RIGHT_RE|CEIVE,..|
|00001760| 09 09 20 20 20 20 20 20 | 20 26 6d 61 73 74 65 72 |.. | &master|
|00001770| 5f 6f 62 6a 2e 6f 62 6a | 65 63 74 5f 70 6f 72 74 |_obj.obj|ect_port|
|00001780| 29 3b 0a 09 69 66 20 28 | 72 20 21 3d 20 4b 45 52 |);..if (|r != KER|
|00001790| 4e 5f 53 55 43 43 45 53 | 53 29 20 7b 0a 09 09 70 |N_SUCCES|S) {...p|
|000017a0| 72 69 6e 74 66 28 22 43 | 61 6e 27 74 20 61 6c 6c |rintf("C|an't all|
|000017b0| 6f 63 61 74 65 20 6f 62 | 6a 65 63 74 2f 73 65 72 |ocate ob|ject/ser|
|000017c0| 76 69 63 65 20 70 6f 72 | 74 5c 6e 22 29 3b 0a 09 |vice por|t\n");..|
|000017d0| 09 65 78 69 74 28 2d 31 | 29 3b 0a 09 7d 0a 0a 09 |.exit(-1|);..}...|
|000017e0| 6d 61 73 74 65 72 5f 6f | 62 6a 2e 63 6f 6e 74 72 |master_o|bj.contr|
|000017f0| 6f 6c 5f 70 6f 72 74 20 | 3d 20 4d 41 43 48 5f 50 |ol_port |= MACH_P|
|00001800| 4f 52 54 5f 4e 55 4c 4c | 3b 0a 09 6d 61 73 74 65 |ORT_NULL|;..maste|
|00001810| 72 5f 6f 62 6a 2e 73 74 | 61 74 65 20 3d 20 4e 45 |r_obj.st|ate = NE|
|00001820| 54 4d 45 4d 5f 4f 42 4a | 5f 4e 4f 4e 45 3b 0a 09 |TMEM_OBJ|_NONE;..|
|00001830| 6d 61 73 74 65 72 5f 6f | 62 6a 2e 64 61 74 61 20 |master_o|bj.data |
|00001840| 3d 20 28 76 6d 5f 61 64 | 64 72 65 73 73 5f 74 29 |= (vm_ad|dress_t)|
|00001850| 20 30 3b 0a 09 6d 61 73 | 74 65 72 5f 6f 62 6a 2e | 0;..mas|ter_obj.|
|00001860| 70 65 6e 64 69 6e 67 5f | 6f 70 5f 71 75 65 75 65 |pending_|op_queue|
|00001870| 20 3d 20 50 45 4e 44 49 | 4e 47 5f 4f 50 5f 4e 55 | = PENDI|NG_OP_NU|
|00001880| 4c 4c 3b 0a 09 6d 61 73 | 74 65 72 5f 6f 62 6a 2e |LL;..mas|ter_obj.|
|00001890| 70 65 6e 64 69 6e 67 5f | 6b 65 72 6e 65 6c 5f 61 |pending_|kernel_a|
|000018a0| 63 63 65 73 73 20 3d 20 | 56 4d 5f 50 52 4f 54 5f |ccess = |VM_PROT_|
|000018b0| 4e 4f 4e 45 3b 0a 0a 09 | 2f 2a 0a 09 20 2a 09 4e |NONE;...|/*.. *.N|
|000018c0| 6f 77 20 63 68 65 63 6b | 20 69 74 20 69 6e 74 6f |ow check| it into|
|000018d0| 20 74 68 65 20 6e 61 6d | 65 20 73 65 72 76 69 63 | the nam|e servic|
|000018e0| 65 2e 20 20 4e 6f 20 73 | 69 67 6e 61 74 75 72 65 |e. No s|ignature|
|000018f0| 20 70 6f 72 74 0a 09 20 | 2a 09 6d 65 61 6e 73 20 | port.. |*.means |
|00001900| 74 68 69 73 20 69 73 20 | 75 6e 70 72 6f 74 65 63 |this is |unprotec|
|00001910| 74 65 64 2e 0a 09 20 2a | 2f 0a 09 72 20 3d 20 6e |ted... *|/..r = n|
|00001920| 65 74 6e 61 6d 65 5f 63 | 68 65 63 6b 5f 69 6e 28 |etname_c|heck_in(|
|00001930| 6e 61 6d 65 5f 73 65 72 | 76 65 72 5f 70 6f 72 74 |name_ser|ver_port|
|00001940| 2c 20 4e 45 54 4d 45 4d | 5f 4e 41 4d 45 2c 20 4d |, NETMEM|_NAME, M|
|00001950| 41 43 48 5f 50 4f 52 54 | 5f 4e 55 4c 4c 2c 0a 09 |ACH_PORT|_NULL,..|
|00001960| 09 09 6d 61 73 74 65 72 | 5f 6f 62 6a 2e 6f 62 6a |..master|_obj.obj|
|00001970| 65 63 74 5f 70 6f 72 74 | 29 3b 0a 09 69 66 20 28 |ect_port|);..if (|
|00001980| 72 20 21 3d 20 4e 45 54 | 4e 41 4d 45 5f 53 55 43 |r != NET|NAME_SUC|
|00001990| 43 45 53 53 29 20 7b 0a | 09 09 6d 61 63 68 5f 65 |CESS) {.|..mach_e|
|000019a0| 72 72 6f 72 28 22 43 68 | 65 63 6b 20 49 6e 3a 22 |rror("Ch|eck In:"|
|000019b0| 2c 20 72 29 3b 0a 09 09 | 65 78 69 74 28 2d 31 29 |, r);...|exit(-1)|
|000019c0| 3b 0a 09 7d 0a 7d 0a 0a | 0c 0a 2f 2a 0a 20 2a 09 |;..}.}..|../*. *.|
|000019d0| 43 6f 6e 76 65 72 73 69 | 6f 6e 20 72 6f 75 74 69 |Conversi|on routi|
|000019e0| 6e 65 20 66 72 6f 6d 20 | 70 6f 72 74 20 74 6f 20 |ne from |port to |
|000019f0| 6f 62 6a 65 63 74 2e 0a | 20 2a 09 56 65 72 79 20 |object..| *.Very |
|00001a00| 73 69 6d 70 6c 65 20 62 | 65 63 61 75 73 65 20 74 |simple b|ecause t|
|00001a10| 68 65 72 65 27 73 20 6f | 6e 6c 79 20 6f 6e 65 20 |here's o|nly one |
|00001a20| 6f 62 6a 65 63 74 2e 0a | 20 2a 2f 0a 6e 65 74 6d |object..| */.netm|
|00001a30| 65 6d 5f 6f 62 6a 5f 74 | 0a 6e 65 74 6d 65 6d 5f |em_obj_t|.netmem_|
|00001a40| 6c 6f 6f 6b 75 70 28 70 | 6f 72 74 29 0a 6d 65 6d |lookup(p|ort).mem|
|00001a50| 6f 72 79 5f 6f 62 6a 65 | 63 74 5f 74 09 70 6f 72 |ory_obje|ct_t.por|
|00001a60| 74 3b 0a 7b 0a 09 69 66 | 20 28 70 6f 72 74 20 21 |t;.{..if| (port !|
|00001a70| 3d 20 6d 61 73 74 65 72 | 5f 6f 62 6a 2e 6f 62 6a |= master|_obj.obj|
|00001a80| 65 63 74 5f 70 6f 72 74 | 29 20 7b 0a 09 09 70 72 |ect_port|) {...pr|
|00001a90| 69 6e 74 66 28 22 6f 62 | 6a 65 63 74 20 6d 69 73 |intf("ob|ject mis|
|00001aa0| 6d 61 74 63 68 5c 6e 22 | 29 3b 0a 09 09 72 65 74 |match\n"|);...ret|
|00001ab0| 75 72 6e 28 4e 45 54 4d | 45 4d 5f 4f 42 4a 5f 4e |urn(NETM|EM_OBJ_N|
|00001ac0| 55 4c 4c 29 3b 20 20 2f | 2a 20 43 61 6e 27 74 20 |ULL); /|* Can't |
|00001ad0| 68 61 70 70 65 6e 20 2a | 2f 0a 09 7d 0a 0a 09 72 |happen *|/..}...r|
|00001ae0| 65 74 75 72 6e 28 26 6d | 61 73 74 65 72 5f 6f 62 |eturn(&m|aster_ob|
|00001af0| 6a 29 3b 0a 7d 0a 0a 23 | 64 65 66 69 6e 65 09 09 |j);.}..#|define..|
|00001b00| 53 45 4e 44 5f 52 49 47 | 48 54 5f 4d 41 58 09 31 |SEND_RIG|HT_MAX.1|
|00001b10| 30 30 30 30 0a 0a 2f 2a | 0a 20 2a 09 52 6f 75 74 |0000../*|. *.Rout|
|00001b20| 69 6e 65 20 66 6f 72 20 | 6c 61 7a 79 20 64 69 73 |ine for |lazy dis|
|00001b30| 63 61 72 64 69 6e 67 20 | 6f 66 20 73 65 6e 64 20 |carding |of send |
|00001b40| 72 69 67 68 74 73 20 74 | 6f 20 63 6f 6e 74 72 6f |rights t|o contro|
|00001b50| 6c 20 70 6f 72 74 2e 0a | 20 2a 09 41 64 64 20 6f |l port..| *.Add o|
|00001b60| 6e 65 20 6d 6f 72 65 20 | 72 69 67 68 74 20 74 6f |ne more |right to|
|00001b70| 20 74 68 65 20 6e 75 6d | 62 65 72 20 77 65 20 68 | the num|ber we h|
|00001b80| 61 76 65 2e 20 20 49 66 | 20 6f 76 65 72 20 6c 69 |ave. If| over li|
|00001b90| 6d 69 74 2c 20 67 65 74 | 0a 20 2a 09 72 69 64 20 |mit, get|. *.rid |
|00001ba0| 6f 66 20 61 6c 6c 20 62 | 75 74 20 6f 6e 65 2e 20 |of all b|ut one. |
|00001bb0| 20 57 65 20 72 65 74 61 | 69 6e 20 6f 6e 65 20 72 | We reta|in one r|
|00001bc0| 69 67 68 74 20 74 6f 20 | 65 6e 73 75 72 65 20 74 |ight to |ensure t|
|00001bd0| 68 61 74 20 74 68 65 20 | 70 6f 72 74 27 73 0a 20 |hat the |port's. |
|00001be0| 2a 09 6e 61 6d 65 20 64 | 6f 65 73 6e 27 74 20 63 |*.name d|oesn't c|
|00001bf0| 68 61 6e 67 65 2e 0a 20 | 2a 2f 0a 76 6f 69 64 0a |hange.. |*/.void.|
|00001c00| 6e 65 74 6d 65 6d 5f 63 | 6f 6e 74 72 6f 6c 5f 63 |netmem_c|ontrol_c|
|00001c10| 6c 65 61 6e 75 70 28 6f | 62 6a 29 0a 6e 65 74 6d |leanup(o|bj).netm|
|00001c20| 65 6d 5f 6f 62 6a 5f 74 | 09 6f 62 6a 3b 0a 7b 0a |em_obj_t|.obj;.{.|
|00001c30| 09 6f 62 6a 2d 3e 73 65 | 6e 64 5f 72 69 67 68 74 |.obj->se|nd_right|
|00001c40| 73 2b 2b 3b 0a 0a 09 69 | 66 20 28 6f 62 6a 2d 3e |s++;...i|f (obj->|
|00001c50| 73 65 6e 64 5f 72 69 67 | 68 74 73 20 3e 20 53 45 |send_rig|hts > SE|
|00001c60| 4e 44 5f 52 49 47 48 54 | 5f 4d 41 58 29 20 7b 0a |ND_RIGHT|_MAX) {.|
|00001c70| 09 09 28 76 6f 69 64 29 | 20 6d 61 63 68 5f 70 6f |..(void)| mach_po|
|00001c80| 72 74 5f 6d 6f 64 5f 72 | 65 66 73 28 6d 61 63 68 |rt_mod_r|efs(mach|
|00001c90| 5f 74 61 73 6b 5f 73 65 | 6c 66 28 29 2c 20 6f 62 |_task_se|lf(), ob|
|00001ca0| 6a 2d 3e 63 6f 6e 74 72 | 6f 6c 5f 70 6f 72 74 2c |j->contr|ol_port,|
|00001cb0| 0a 09 09 09 09 20 20 20 | 4d 41 43 48 5f 50 4f 52 |..... |MACH_POR|
|00001cc0| 54 5f 52 49 47 48 54 5f | 53 45 4e 44 2c 20 2d 28 |T_RIGHT_|SEND, -(|
|00001cd0| 53 45 4e 44 5f 52 49 47 | 48 54 5f 4d 41 58 29 29 |SEND_RIG|HT_MAX))|
|00001ce0| 3b 0a 09 09 6f 62 6a 2d | 3e 73 65 6e 64 5f 72 69 |;...obj-|>send_ri|
|00001cf0| 67 68 74 73 20 2d 3d 20 | 53 45 4e 44 5f 52 49 47 |ghts -= |SEND_RIG|
|00001d00| 48 54 5f 4d 41 58 3b 0a | 09 7d 0a 7d 0a 09 09 09 |HT_MAX;.|.}.}....|
|00001d10| 09 20 20 20 0a 0c 0a 2f | 2a 0a 20 2a 09 52 6f 75 |. .../|*. *.Rou|
|00001d20| 74 69 6e 65 73 20 66 6f | 72 20 68 61 6e 64 6c 69 |tines fo|r handli|
|00001d30| 6e 67 20 70 65 6e 64 69 | 6e 67 20 6f 70 65 72 61 |ng pendi|ng opera|
|00001d40| 74 69 6f 6e 73 2e 0a 20 | 2a 2f 0a 76 6f 69 64 0a |tions.. |*/.void.|
|00001d50| 70 65 6e 64 69 6e 67 5f | 6f 70 5f 71 75 65 75 65 |pending_|op_queue|
|00001d60| 28 6f 62 6a 2c 20 6f 70 | 2c 20 6f 66 66 73 65 74 |(obj, op|, offset|
|00001d70| 2c 20 76 61 6c 75 65 2c | 20 72 65 70 6c 79 5f 74 |, value,| reply_t|
|00001d80| 6f 29 0a 6e 65 74 6d 65 | 6d 5f 6f 62 6a 5f 74 09 |o).netme|m_obj_t.|
|00001d90| 6f 62 6a 3b 0a 69 6e 74 | 09 09 6f 70 3b 0a 76 6d |obj;.int|..op;.vm|
|00001da0| 5f 61 64 64 72 65 73 73 | 5f 74 09 6f 66 66 73 65 |_address|_t.offse|
|00001db0| 74 3b 0a 69 6e 74 09 09 | 76 61 6c 75 65 3b 0a 6d |t;.int..|value;.m|
|00001dc0| 61 63 68 5f 70 6f 72 74 | 5f 74 09 72 65 70 6c 79 |ach_port|_t.reply|
|00001dd0| 5f 74 6f 3b 0a 7b 0a 09 | 70 65 6e 64 69 6e 67 5f |_to;.{..|pending_|
|00001de0| 6f 70 5f 74 09 70 65 6e | 64 3b 0a 0a 09 2f 2a 0a |op_t.pen|d;.../*.|
|00001df0| 09 20 2a 09 55 73 69 6e | 67 20 6d 61 6c 6c 6f 63 |. *.Usin|g malloc|
|00001e00| 28 29 20 68 65 72 65 20 | 69 73 20 6e 6f 74 20 70 |() here |is not p|
|00001e10| 61 72 74 69 63 75 6c 61 | 72 6c 79 20 65 66 66 69 |articula|rly effi|
|00001e20| 63 69 65 6e 74 2e 0a 09 | 20 2a 2f 0a 09 70 65 6e |cient...| */..pen|
|00001e30| 64 20 3d 20 28 70 65 6e | 64 69 6e 67 5f 6f 70 5f |d = (pen|ding_op_|
|00001e40| 74 29 20 6d 61 6c 6c 6f | 63 28 73 69 7a 65 6f 66 |t) mallo|c(sizeof|
|00001e50| 28 70 65 6e 64 69 6e 67 | 5f 6f 70 5f 64 61 74 61 |(pending|_op_data|
|00001e60| 5f 74 29 29 3b 0a 0a 09 | 2f 2a 0a 09 20 2a 09 49 |_t));...|/*.. *.I|
|00001e70| 6e 69 74 69 61 6c 69 7a | 65 20 70 65 6e 64 69 6e |nitializ|e pendin|
|00001e80| 67 20 6f 70 20 61 6e 64 | 20 61 64 64 20 74 6f 20 |g op and| add to |
|00001e90| 71 75 65 75 65 2e 20 20 | 54 68 69 73 20 72 65 73 |queue. |This res|
|00001ea0| 75 6c 74 73 20 69 6e 0a | 09 20 2a 09 4c 49 46 4f |ults in.|. *.LIFO|
|00001eb0| 20 70 65 6e 64 69 6e 67 | 20 6f 70 65 72 61 74 69 | pending| operati|
|00001ec0| 6f 6e 20 6f 72 64 65 72 | 2e 0a 09 20 2a 2f 0a 09 |on order|... */..|
|00001ed0| 70 65 6e 64 2d 3e 6f 70 | 20 3d 20 6f 70 3b 0a 09 |pend->op| = op;..|
|00001ee0| 70 65 6e 64 2d 3e 6f 66 | 66 73 65 74 20 3d 20 6f |pend->of|fset = o|
|00001ef0| 66 66 73 65 74 3b 0a 09 | 70 65 6e 64 2d 3e 76 61 |ffset;..|pend->va|
|00001f00| 6c 75 65 20 3d 20 76 61 | 6c 75 65 3b 0a 09 70 65 |lue = va|lue;..pe|
|00001f10| 6e 64 2d 3e 72 65 70 6c | 79 5f 70 6f 72 74 20 3d |nd->repl|y_port =|
|00001f20| 20 72 65 70 6c 79 5f 74 | 6f 3b 0a 09 70 65 6e 64 | reply_t|o;..pend|
|00001f30| 2d 3e 6e 65 78 74 20 3d | 20 6f 62 6a 2d 3e 70 65 |->next =| obj->pe|
|00001f40| 6e 64 69 6e 67 5f 6f 70 | 5f 71 75 65 75 65 3b 0a |nding_op|_queue;.|
|00001f50| 09 6f 62 6a 2d 3e 70 65 | 6e 64 69 6e 67 5f 6f 70 |.obj->pe|nding_op|
|00001f60| 5f 71 75 65 75 65 20 3d | 20 70 65 6e 64 3b 0a 7d |_queue =| pend;.}|
|00001f70| 0a 0a 2f 2a 0a 20 2a 09 | 45 78 65 63 75 74 65 20 |../*. *.|Execute |
|00001f80| 6f 70 65 72 61 74 69 6f | 6e 73 20 66 72 6f 6d 20 |operatio|ns from |
|00001f90| 70 65 6e 64 69 6e 67 20 | 6f 70 20 71 75 65 75 65 |pending |op queue|
|00001fa0| 2e 20 20 54 68 69 73 20 | 72 6f 75 74 69 6e 65 0a |. This |routine.|
|00001fb0| 20 2a 09 63 68 65 63 6b | 73 20 74 68 65 20 6f 62 | *.check|s the ob|
|00001fc0| 6a 65 63 74 20 73 74 61 | 74 65 20 74 6f 20 66 69 |ject sta|te to fi|
|00001fd0| 6e 64 20 6f 75 74 20 77 | 68 61 74 20 69 73 20 61 |nd out w|hat is a|
|00001fe0| 6c 6c 6f 77 65 64 2c 20 | 73 6f 20 61 6e 79 0a 20 |llowed, |so any. |
|00001ff0| 2a 09 73 74 61 74 65 20 | 74 72 61 6e 73 69 74 69 |*.state |transiti|
|00002000| 6f 6e 20 6d 75 73 74 20 | 6f 63 63 75 72 20 42 45 |on must |occur BE|
|00002010| 46 4f 52 45 20 63 61 6c | 6c 69 6e 67 20 74 68 69 |FORE cal|ling thi|
|00002020| 73 20 72 6f 75 74 69 6e | 65 2e 0a 20 2a 0a 20 2a |s routin|e.. *. *|
|00002030| 09 50 72 6f 63 65 73 73 | 69 6e 67 20 73 74 6f 70 |.Process|ing stop|
|00002040| 73 20 77 68 65 6e 20 74 | 68 65 20 71 75 65 75 65 |s when t|he queue|
|00002050| 20 69 73 20 65 6d 70 74 | 79 20 6f 72 20 61 20 77 | is empt|y or a w|
|00002060| 72 69 74 65 20 69 73 20 | 66 6f 75 6e 64 0a 20 2a |rite is |found. *|
|00002070| 09 74 68 61 74 20 63 61 | 6e 27 74 20 62 65 20 65 |.that ca|n't be e|
|00002080| 78 65 63 75 74 65 64 20 | 62 65 63 61 75 73 65 20 |xecuted |because |
|00002090| 74 68 65 20 73 65 72 76 | 65 72 20 6f 6e 6c 79 20 |the serv|er only |
|000020a0| 68 61 73 20 72 65 61 64 | 20 70 65 72 6d 69 73 73 |has read| permiss|
|000020b0| 69 6f 6e 2e 0a 20 2a 0a | 20 2a 09 43 61 6c 6c 65 |ion.. *.| *.Calle|
|000020c0| 72 20 69 73 20 72 65 73 | 70 6f 6e 73 69 62 6c 65 |r is res|ponsible|
|000020d0| 20 66 6f 72 20 68 61 6e | 64 6c 69 6e 67 20 70 65 | for han|dling pe|
|000020e0| 6e 64 69 6e 67 20 6b 65 | 72 6e 65 6c 20 61 63 63 |nding ke|rnel acc|
|000020f0| 65 73 73 2e 0a 20 2a 2f | 0a 0c 0a 76 6f 69 64 0a |ess.. */|...void.|
|00002100| 70 65 6e 64 69 6e 67 5f | 6f 70 5f 65 78 65 63 75 |pending_|op_execu|
|00002110| 74 65 28 6f 62 6a 29 0a | 6e 65 74 6d 65 6d 5f 6f |te(obj).|netmem_o|
|00002120| 62 6a 5f 74 09 6f 62 6a | 3b 0a 7b 0a 09 70 65 6e |bj_t.obj|;.{..pen|
|00002130| 64 69 6e 67 5f 6f 70 5f | 74 09 70 65 6e 64 2c 20 |ding_op_|t.pend, |
|00002140| 6e 65 77 5f 70 65 6e 64 | 3b 0a 09 6b 65 72 6e 5f |new_pend|;..kern_|
|00002150| 72 65 74 75 72 6e 5f 74 | 09 72 65 73 75 6c 74 3b |return_t|.result;|
|00002160| 0a 0a 09 70 65 6e 64 20 | 3d 20 6f 62 6a 2d 3e 70 |...pend |= obj->p|
|00002170| 65 6e 64 69 6e 67 5f 6f | 70 5f 71 75 65 75 65 3b |ending_o|p_queue;|
|00002180| 0a 0a 09 77 68 69 6c 65 | 20 28 70 65 6e 64 20 21 |...while| (pend !|
|00002190| 3d 20 50 45 4e 44 49 4e | 47 5f 4f 50 5f 4e 55 4c |= PENDIN|G_OP_NUL|
|000021a0| 4c 29 20 7b 0a 09 20 20 | 20 20 69 66 20 28 70 65 |L) {.. | if (pe|
|000021b0| 6e 64 2d 3e 6f 70 20 3d | 3d 20 50 45 4e 44 49 4e |nd->op =|= PENDIN|
|000021c0| 47 5f 52 45 41 44 29 20 | 7b 0a 0a 09 09 2f 2a 0a |G_READ) |{..../*.|
|000021d0| 09 09 20 2a 20 20 43 61 | 6e 20 61 6c 77 61 79 73 |.. * Ca|n always|
|000021e0| 20 64 6f 20 72 65 61 64 | 2e 20 20 4d 75 73 74 20 | do read|. Must |
|000021f0| 73 65 6e 64 20 72 65 70 | 6c 79 20 6f 75 72 73 65 |send rep|ly ourse|
|00002200| 6c 76 65 73 2e 0a 09 09 | 20 2a 2f 0a 09 20 20 20 |lves....| */.. |
|00002210| 20 09 72 65 73 75 6c 74 | 20 3d 20 6e 65 74 6d 65 | .result| = netme|
|00002220| 6d 5f 72 65 61 64 28 6f | 62 6a 2d 3e 6f 62 6a 65 |m_read(o|bj->obje|
|00002230| 63 74 5f 70 6f 72 74 2c | 20 4d 41 43 48 5f 50 4f |ct_port,| MACH_PO|
|00002240| 52 54 5f 4e 55 4c 4c 2c | 0a 09 09 09 09 20 20 20 |RT_NULL,|..... |
|00002250| 20 20 70 65 6e 64 2d 3e | 6f 66 66 73 65 74 2c 20 | pend->|offset, |
|00002260| 26 70 65 6e 64 2d 3e 76 | 61 6c 75 65 29 3b 0a 09 |&pend->v|alue);..|
|00002270| 09 70 72 69 6e 74 66 28 | 22 72 65 61 64 5f 72 65 |.printf(|"read_re|
|00002280| 70 6c 79 5c 6e 22 29 3b | 0a 09 09 72 65 73 75 6c |ply\n");|...resul|
|00002290| 74 20 3d 20 6e 65 74 6d | 65 6d 5f 72 65 61 64 5f |t = netm|em_read_|
|000022a0| 72 65 70 6c 79 28 70 65 | 6e 64 2d 3e 72 65 70 6c |reply(pe|nd->repl|
|000022b0| 79 5f 70 6f 72 74 2c 20 | 72 65 73 75 6c 74 2c 0a |y_port, |result,.|
|000022c0| 09 09 09 09 09 20 20 20 | 70 65 6e 64 2d 3e 76 61 |..... |pend->va|
|000022d0| 6c 75 65 29 3b 0a 09 20 | 20 20 20 7d 0a 09 20 20 |lue);.. | }.. |
|000022e0| 20 20 65 6c 73 65 20 7b | 0a 0a 09 09 2f 2a 0a 09 | else {|..../*..|
|000022f0| 09 20 2a 09 57 72 69 74 | 65 20 63 61 73 65 2e 20 |. *.Writ|e case. |
|00002300| 20 53 74 6f 70 20 69 66 | 20 72 65 61 64 20 6f 6e | Stop if| read on|
|00002310| 6c 79 2e 0a 09 09 20 2a | 2f 0a 09 09 69 66 20 28 |ly.... *|/...if (|
|00002320| 6f 62 6a 2d 3e 73 74 61 | 74 65 20 3d 3d 20 4e 45 |obj->sta|te == NE|
|00002330| 54 4d 45 4d 5f 4f 42 4a | 5f 52 45 41 44 29 0a 09 |TMEM_OBJ|_READ)..|
|00002340| 09 09 62 72 65 61 6b 3b | 0a 0a 09 09 72 65 73 75 |..break;|....resu|
|00002350| 6c 74 20 3d 20 6e 65 74 | 6d 65 6d 5f 77 72 69 74 |lt = net|mem_writ|
|00002360| 65 28 6f 62 6a 2d 3e 6f | 62 6a 65 63 74 5f 70 6f |e(obj->o|bject_po|
|00002370| 72 74 2c 20 4d 41 43 48 | 5f 50 4f 52 54 5f 4e 55 |rt, MACH|_PORT_NU|
|00002380| 4c 4c 2c 0a 09 09 09 09 | 20 20 20 20 20 20 70 65 |LL,.....| pe|
|00002390| 6e 64 2d 3e 6f 66 66 73 | 65 74 2c 20 70 65 6e 64 |nd->offs|et, pend|
|000023a0| 2d 3e 76 61 6c 75 65 29 | 3b 0a 09 09 70 72 69 6e |->value)|;...prin|
|000023b0| 74 66 28 22 77 72 69 74 | 65 5f 72 65 70 6c 79 5c |tf("writ|e_reply\|
|000023c0| 6e 22 29 3b 0a 09 09 72 | 65 73 75 6c 74 20 3d 20 |n");...r|esult = |
|000023d0| 6e 65 74 6d 65 6d 5f 77 | 72 69 74 65 5f 72 65 70 |netmem_w|rite_rep|
|000023e0| 6c 79 28 70 65 6e 64 2d | 3e 72 65 70 6c 79 5f 70 |ly(pend-|>reply_p|
|000023f0| 6f 72 74 2c 20 72 65 73 | 75 6c 74 29 3b 0a 09 20 |ort, res|ult);.. |
|00002400| 20 20 20 7d 0a 0a 09 20 | 20 20 20 2f 2a 0a 09 20 | }... | /*.. |
|00002410| 20 20 20 20 2a 09 52 65 | 70 6c 79 20 6d 69 67 68 | *.Re|ply migh|
|00002420| 74 20 66 61 69 6c 20 69 | 66 20 63 6c 69 65 6e 74 |t fail i|f client|
|00002430| 20 64 69 65 64 2e 20 20 | 49 4e 56 41 4c 49 44 5f | died. |INVALID_|
|00002440| 44 45 53 54 20 69 73 20 | 74 68 65 20 6f 6e 6c 79 |DEST is |the only|
|00002450| 0a 09 20 20 20 20 20 2a | 09 70 6f 73 73 69 62 6c |.. *|.possibl|
|00002460| 65 20 65 72 72 6f 72 2e | 0a 09 20 20 20 20 20 2a |e error.|.. *|
|00002470| 2f 0a 0a 09 20 20 20 20 | 69 66 20 28 72 65 73 75 |/... |if (resu|
|00002480| 6c 74 20 3d 3d 20 4d 41 | 43 48 5f 53 45 4e 44 5f |lt == MA|CH_SEND_|
|00002490| 49 4e 56 41 4c 49 44 5f | 44 45 53 54 29 20 7b 0a |INVALID_|DEST) {.|
|000024a0| 09 09 6d 61 63 68 5f 70 | 6f 72 74 5f 64 65 61 6c |..mach_p|ort_deal|
|000024b0| 6c 6f 63 61 74 65 28 6d | 61 63 68 5f 74 61 73 6b |locate(m|ach_task|
|000024c0| 5f 73 65 6c 66 28 29 2c | 20 70 65 6e 64 2d 3e 72 |_self(),| pend->r|
|000024d0| 65 70 6c 79 5f 70 6f 72 | 74 29 3b 0a 09 20 20 20 |eply_por|t);.. |
|000024e0| 20 7d 0a 0a 09 20 20 20 | 20 2f 2a 0a 09 20 20 20 | }... | /*.. |
|000024f0| 20 20 2a 09 4f 6e 77 61 | 72 64 20 74 6f 20 6e 65 | *.Onwa|rd to ne|
|00002500| 78 74 20 70 65 6e 64 69 | 6e 67 20 6f 70 65 72 61 |xt pendi|ng opera|
|00002510| 74 69 6f 6e 2e 0a 09 20 | 20 20 20 20 2a 2f 0a 0a |tion... | */..|
|00002520| 09 20 20 20 20 6e 65 77 | 5f 70 65 6e 64 20 3d 20 |. new|_pend = |
|00002530| 70 65 6e 64 2d 3e 6e 65 | 78 74 3b 0a 09 20 20 20 |pend->ne|xt;.. |
|00002540| 20 66 72 65 65 28 70 65 | 6e 64 29 3b 0a 09 20 20 | free(pe|nd);.. |
|00002550| 20 20 70 65 6e 64 20 3d | 20 6e 65 77 5f 70 65 6e | pend =| new_pen|
|00002560| 64 3b 0a 09 7d 0a 0a 09 | 2f 2a 0a 09 20 2a 09 52 |d;..}...|/*.. *.R|
|00002570| 65 73 65 74 20 70 65 6e | 64 69 6e 67 20 6f 70 20 |eset pen|ding op |
|00002580| 71 75 65 75 65 2e 20 20 | 54 68 69 73 20 73 65 74 |queue. |This set|
|00002590| 73 20 69 74 20 74 6f 20 | 6e 75 6c 6c 20 69 66 0a |s it to |null if.|
|000025a0| 09 20 2a 09 77 65 20 72 | 61 6e 20 69 74 20 63 6f |. *.we r|an it co|
|000025b0| 6d 70 6c 65 74 65 6c 79 | 2c 20 65 6c 73 65 20 74 |mpletely|, else t|
|000025c0| 6f 20 74 68 65 20 66 69 | 72 73 74 20 77 72 69 74 |o the fi|rst writ|
|000025d0| 65 20 74 68 61 74 0a 09 | 20 2a 09 73 74 6f 70 70 |e that..| *.stopp|
|000025e0| 65 64 20 75 73 2e 0a 09 | 20 2a 2f 0a 09 6f 62 6a |ed us...| */..obj|
|000025f0| 2d 3e 70 65 6e 64 69 6e | 67 5f 6f 70 5f 71 75 65 |->pendin|g_op_que|
|00002600| 75 65 20 3d 20 70 65 6e | 64 3b 0a 7d 0a 0c 0a 0a |ue = pen|d;.}....|
|00002610| 2f 2a 0a 20 2a 09 52 6f | 75 74 69 6e 65 73 20 66 |/*. *.Ro|utines f|
|00002620| 6f 72 20 68 61 6e 64 6c | 69 6e 67 20 6d 65 73 73 |or handl|ing mess|
|00002630| 61 67 65 73 20 66 72 6f | 6d 20 63 6c 69 65 6e 74 |ages fro|m client|
|00002640| 73 0a 20 2a 2f 0a 0a 6d | 61 63 68 5f 65 72 72 6f |s. */..m|ach_erro|
|00002650| 72 5f 74 0a 6e 65 74 6d | 65 6d 5f 72 65 61 64 28 |r_t.netm|em_read(|
|00002660| 6f 62 6a 65 63 74 2c 20 | 72 65 70 6c 79 5f 74 6f |object, |reply_to|
|00002670| 2c 20 6f 66 66 73 65 74 | 2c 20 76 61 6c 75 65 29 |, offset|, value)|
|00002680| 0a 6d 61 63 68 5f 70 6f | 72 74 5f 74 09 6f 62 6a |.mach_po|rt_t.obj|
|00002690| 65 63 74 3b 0a 6d 61 63 | 68 5f 70 6f 72 74 5f 74 |ect;.mac|h_port_t|
|000026a0| 09 72 65 70 6c 79 5f 74 | 6f 3b 0a 76 6d 5f 61 64 |.reply_t|o;.vm_ad|
|000026b0| 64 72 65 73 73 5f 74 09 | 6f 66 66 73 65 74 3b 0a |dress_t.|offset;.|
|000026c0| 69 6e 74 09 09 2a 76 61 | 6c 75 65 3b 0a 7b 0a 09 |int..*va|lue;.{..|
|000026d0| 6e 65 74 6d 65 6d 5f 6f | 62 6a 5f 74 09 6d 79 5f |netmem_o|bj_t.my_|
|000026e0| 6f 62 6a 3b 0a 0a 09 70 | 72 69 6e 74 66 28 22 72 |obj;...p|rintf("r|
|000026f0| 65 61 64 5c 6e 22 29 3b | 0a 0a 09 2f 2a 0a 09 20 |ead\n");|.../*.. |
|00002700| 2a 09 43 68 65 63 6b 20 | 61 72 67 75 6d 65 6e 74 |*.Check |argument|
|00002710| 73 2e 0a 09 20 2a 2f 0a | 09 69 66 20 28 28 6d 79 |s... */.|.if ((my|
|00002720| 5f 6f 62 6a 20 3d 20 6e | 65 74 6d 65 6d 5f 6c 6f |_obj = n|etmem_lo|
|00002730| 6f 6b 75 70 28 6f 62 6a | 65 63 74 29 29 20 3d 3d |okup(obj|ect)) ==|
|00002740| 20 4e 45 54 4d 45 4d 5f | 4f 42 4a 5f 4e 55 4c 4c | NETMEM_|OBJ_NULL|
|00002750| 29 0a 09 09 72 65 74 75 | 72 6e 20 28 4e 45 54 4d |)...retu|rn (NETM|
|00002760| 45 4d 5f 42 41 44 5f 4f | 42 4a 45 43 54 29 3b 0a |EM_BAD_O|BJECT);.|
|00002770| 0a 09 69 66 20 28 6f 66 | 66 73 65 74 20 3e 3d 20 |..if (of|fset >= |
|00002780| 28 76 6d 5f 70 61 67 65 | 5f 73 69 7a 65 2f 73 69 |(vm_page|_size/si|
|00002790| 7a 65 6f 66 28 69 6e 74 | 29 29 29 0a 09 09 72 65 |zeof(int|)))...re|
|000027a0| 74 75 72 6e 20 28 4e 45 | 54 4d 45 4d 5f 42 41 44 |turn (NE|TMEM_BAD|
|000027b0| 5f 4f 46 46 53 45 54 29 | 3b 0a 0a 09 2f 2a 0a 09 |_OFFSET)|;.../*..|
|000027c0| 20 2a 09 45 78 65 63 75 | 74 65 20 74 68 65 20 72 | *.Execu|te the r|
|000027d0| 65 61 64 2e 0a 09 20 2a | 2f 0a 09 73 77 69 74 63 |ead... *|/..switc|
|000027e0| 68 28 6d 79 5f 6f 62 6a | 2d 3e 73 74 61 74 65 29 |h(my_obj|->state)|
|000027f0| 20 7b 0a 0a 09 20 20 20 | 20 63 61 73 65 20 4e 45 | {... | case NE|
|00002800| 54 4d 45 4d 5f 4f 42 4a | 5f 4e 4f 4e 45 3a 0a 0a |TMEM_OBJ|_NONE:..|
|00002810| 09 09 2f 2a 0a 09 09 20 | 2a 09 4e 65 65 64 20 74 |../*... |*.Need t|
|00002820| 6f 20 69 6e 69 74 69 61 | 6c 69 7a 65 2e 20 20 53 |o initia|lize. S|
|00002830| 65 72 76 65 72 20 68 61 | 73 20 65 78 63 6c 75 73 |erver ha|s exclus|
|00002840| 69 76 65 20 61 63 63 65 | 73 73 0a 09 09 20 2a 09 |ive acce|ss... *.|
|00002850| 28 77 72 69 74 65 29 20 | 77 68 65 6e 20 77 65 27 |(write) |when we'|
|00002860| 72 65 20 64 6f 6e 65 2e | 0a 09 09 20 2a 2f 0a 20 |re done.|... */. |
|00002870| 20 20 20 20 20 20 09 09 | 28 76 6f 69 64 29 20 76 | ..|(void) v|
|00002880| 6d 5f 61 6c 6c 6f 63 61 | 74 65 28 6d 61 63 68 5f |m_alloca|te(mach_|
|00002890| 74 61 73 6b 5f 73 65 6c | 66 28 29 2c 20 26 6d 79 |task_sel|f(), &my|
|000028a0| 5f 6f 62 6a 2d 3e 64 61 | 74 61 2c 0a 09 09 09 20 |_obj->da|ta,.... |
|000028b0| 20 20 20 76 6d 5f 70 61 | 67 65 5f 73 69 7a 65 2c | vm_pa|ge_size,|
|000028c0| 20 54 52 55 45 29 3b 0a | 09 09 6d 79 5f 6f 62 6a | TRUE);.|..my_obj|
|000028d0| 2d 3e 73 74 61 74 65 20 | 3d 20 4e 45 54 4d 45 4d |->state |= NETMEM|
|000028e0| 5f 4f 42 4a 5f 53 45 52 | 56 45 52 5f 57 52 49 54 |_OBJ_SER|VER_WRIT|
|000028f0| 45 3b 0a 0a 09 09 2f 2a | 0a 09 09 20 2a 20 20 46 |E;..../*|... * F|
|00002900| 61 6c 6c 20 74 68 72 6f | 75 67 68 20 2e 2e 2e 0a |all thro|ugh ....|
|00002910| 09 09 20 2a 2f 0a 09 20 | 20 20 20 63 61 73 65 20 |.. */.. | case |
|00002920| 4e 45 54 4d 45 4d 5f 4f | 42 4a 5f 52 45 41 44 3a |NETMEM_O|BJ_READ:|
|00002930| 0a 09 20 20 20 20 63 61 | 73 65 20 4e 45 54 4d 45 |.. ca|se NETME|
|00002940| 4d 5f 4f 42 4a 5f 53 45 | 52 56 45 52 5f 57 52 49 |M_OBJ_SE|RVER_WRI|
|00002950| 54 45 3a 0a 0a 09 09 2f | 2a 0a 09 09 20 2a 09 52 |TE:..../|*... *.R|
|00002960| 65 61 64 20 74 68 65 20 | 76 61 6c 75 65 2e 0a 09 |ead the |value...|
|00002970| 09 20 2a 2f 0a 09 09 2a | 76 61 6c 75 65 20 3d 20 |. */...*|value = |
|00002980| 2a 28 28 28 69 6e 74 20 | 2a 29 20 28 6d 79 5f 6f |*(((int |*) (my_o|
|00002990| 62 6a 2d 3e 64 61 74 61 | 29 29 20 2b 20 6f 66 66 |bj->data|)) + off|
|000029a0| 73 65 74 29 3b 0a 0a 09 | 09 72 65 74 75 72 6e 28 |set);...|.return(|
|000029b0| 45 52 52 5f 53 55 43 43 | 45 53 53 29 3b 0a 0c 0a |ERR_SUCC|ESS);...|
|000029c0| 09 20 20 20 20 63 61 73 | 65 20 4e 45 54 4d 45 4d |. cas|e NETMEM|
|000029d0| 5f 4f 42 4a 5f 4b 45 52 | 4e 45 4c 5f 57 52 49 54 |_OBJ_KER|NEL_WRIT|
|000029e0| 45 3a 0a 0a 09 09 2f 2a | 0a 09 09 20 2a 09 52 65 |E:..../*|... *.Re|
|000029f0| 71 75 65 73 74 20 6b 65 | 72 6e 65 6c 20 74 6f 20 |quest ke|rnel to |
|00002a00| 67 69 76 65 20 75 70 20 | 77 72 69 74 65 20 61 63 |give up |write ac|
|00002a10| 63 65 73 73 20 74 6f 20 | 70 61 67 65 2e 0a 09 09 |cess to |page....|
|00002a20| 20 2a 09 41 73 6b 20 66 | 6f 72 20 61 20 72 65 70 | *.Ask f|or a rep|
|00002a30| 6c 79 20 77 68 65 6e 20 | 69 74 27 73 20 66 69 6e |ly when |it's fin|
|00002a40| 69 73 68 65 64 2e 0a 09 | 09 20 2a 2f 0a 09 09 70 |ished...|. */...p|
|00002a50| 72 69 6e 74 66 28 22 6c | 6f 63 6b 5f 72 65 71 75 |rintf("l|ock_requ|
|00002a60| 65 73 74 3a 20 63 6c 65 | 61 6e 2c 20 6c 6f 63 6b |est: cle|an, lock|
|00002a70| 20 25 64 5c 6e 22 2c 20 | 56 4d 5f 50 52 4f 54 5f | %d\n", |VM_PROT_|
|00002a80| 57 52 49 54 45 29 3b 0a | 09 09 28 76 6f 69 64 29 |WRITE);.|..(void)|
|00002a90| 20 6d 65 6d 6f 72 79 5f | 6f 62 6a 65 63 74 5f 6c | memory_|object_l|
|00002aa0| 6f 63 6b 5f 72 65 71 75 | 65 73 74 28 6d 79 5f 6f |ock_requ|est(my_o|
|00002ab0| 62 6a 2d 3e 63 6f 6e 74 | 72 6f 6c 5f 70 6f 72 74 |bj->cont|rol_port|
|00002ac0| 2c 0a 09 09 09 09 09 20 | 20 20 28 76 6d 5f 61 64 |,...... | (vm_ad|
|00002ad0| 64 72 65 73 73 5f 74 29 | 30 2c 20 76 6d 5f 70 61 |dress_t)|0, vm_pa|
|00002ae0| 67 65 5f 73 69 7a 65 2c | 0a 09 09 20 20 20 20 20 |ge_size,|... |
|00002af0| 20 20 20 20 20 20 09 09 | 20 20 20 4d 45 4d 4f 52 | ..| MEMOR|
|00002b00| 59 5f 4f 42 4a 45 43 54 | 5f 52 45 54 55 52 4e 5f |Y_OBJECT|_RETURN_|
|00002b10| 44 49 52 54 59 2c 0a 09 | 09 09 09 09 20 20 20 46 |DIRTY,..|.... F|
|00002b20| 41 4c 53 45 2c 20 56 4d | 5f 50 52 4f 54 5f 57 52 |ALSE, VM|_PROT_WR|
|00002b30| 49 54 45 2c 0a 09 09 09 | 09 09 20 20 20 6d 79 5f |ITE,....|.. my_|
|00002b40| 6f 62 6a 2d 3e 6f 62 6a | 65 63 74 5f 70 6f 72 74 |obj->obj|ect_port|
|00002b50| 29 3b 0a 09 09 6d 79 5f | 6f 62 6a 2d 3e 73 74 61 |);...my_|obj->sta|
|00002b60| 74 65 20 3d 20 4e 45 54 | 4d 45 4d 5f 4f 42 4a 5f |te = NET|MEM_OBJ_|
|00002b70| 43 4c 45 41 4e 49 4e 47 | 3b 0a 0a 09 09 2f 2a 0a |CLEANING|;..../*.|
|00002b80| 09 09 20 2a 20 20 46 61 | 6c 6c 20 74 68 72 6f 75 |.. * Fa|ll throu|
|00002b90| 67 68 20 2e 2e 2e 0a 09 | 09 20 2a 2f 0a 0a 09 20 |gh .....|. */... |
|00002ba0| 20 20 20 63 61 73 65 20 | 4e 45 54 4d 45 4d 5f 4f | case |NETMEM_O|
|00002bb0| 42 4a 5f 43 4c 45 41 4e | 49 4e 47 3a 0a 09 20 20 |BJ_CLEAN|ING:.. |
|00002bc0| 20 20 63 61 73 65 20 4e | 45 54 4d 45 4d 5f 4f 42 | case N|ETMEM_OB|
|00002bd0| 4a 5f 46 4c 55 53 48 49 | 4e 47 3a 0a 0a 09 09 2f |J_FLUSHI|NG:..../|
|00002be0| 2a 0a 09 09 20 2a 09 57 | 61 69 74 20 66 6f 72 20 |*... *.W|ait for |
|00002bf0| 74 68 69 73 20 63 68 61 | 6e 67 65 20 74 6f 20 63 |this cha|nge to c|
|00002c00| 6f 6d 70 6c 65 74 65 2e | 20 20 45 6e 71 75 65 75 |omplete.| Enqueu|
|00002c10| 65 0a 09 09 20 2a 09 74 | 68 69 73 20 6f 70 65 72 |e... *.t|his oper|
|00002c20| 61 74 69 6f 6e 20 74 6f | 20 62 65 20 68 61 6e 64 |ation to| be hand|
|00002c30| 6c 65 64 20 6c 61 74 65 | 72 2e 0a 09 09 20 2a 2f |led late|r.... */|
|00002c40| 0a 09 09 70 65 6e 64 69 | 6e 67 5f 6f 70 5f 71 75 |...pendi|ng_op_qu|
|00002c50| 65 75 65 28 6d 79 5f 6f | 62 6a 2c 20 50 45 4e 44 |eue(my_o|bj, PEND|
|00002c60| 49 4e 47 5f 52 45 41 44 | 2c 20 6f 66 66 73 65 74 |ING_READ|, offset|
|00002c70| 2c 20 30 2c 20 72 65 70 | 6c 79 5f 74 6f 29 3b 0a |, 0, rep|ly_to);.|
|00002c80| 0a 09 09 2f 2a 0a 09 09 | 20 2a 09 52 65 70 6c 79 |.../*...| *.Reply|
|00002c90| 20 77 69 6c 6c 20 68 61 | 70 70 65 6e 20 77 68 65 | will ha|ppen whe|
|00002ca0| 6e 20 6c 6f 63 6b 5f 72 | 65 71 75 65 73 74 20 63 |n lock_r|equest c|
|00002cb0| 6f 6d 70 6c 65 74 65 73 | 2e 0a 09 09 20 2a 2f 0a |ompletes|.... */.|
|00002cc0| 09 09 72 65 74 75 72 6e | 28 4d 49 47 5f 4e 4f 5f |..return|(MIG_NO_|
|00002cd0| 52 45 50 4c 59 29 3b 0a | 0a 09 20 20 20 20 64 65 |REPLY);.|.. de|
|00002ce0| 66 61 75 6c 74 3a 0a 09 | 09 70 72 69 6e 74 66 28 |fault:..|.printf(|
|00002cf0| 22 42 61 64 20 73 74 61 | 74 65 20 25 64 5c 6e 22 |"Bad sta|te %d\n"|
|00002d00| 2c 20 6d 79 5f 6f 62 6a | 2d 3e 73 74 61 74 65 29 |, my_obj|->state)|
|00002d10| 3b 0a 09 09 72 65 74 75 | 72 6e 28 4e 45 54 4d 45 |;...retu|rn(NETME|
|00002d20| 4d 5f 46 41 49 4c 55 52 | 45 29 3b 09 09 0a 09 7d |M_FAILUR|E);....}|
|00002d30| 0a 09 2f 2a 4e 4f 54 52 | 45 41 43 48 45 44 2a 2f |../*NOTR|EACHED*/|
|00002d40| 0a 7d 0a 0a 0c 0a 6d 61 | 63 68 5f 65 72 72 6f 72 |.}....ma|ch_error|
|00002d50| 5f 74 0a 6e 65 74 6d 65 | 6d 5f 77 72 69 74 65 28 |_t.netme|m_write(|
|00002d60| 6f 62 6a 65 63 74 2c 20 | 72 65 70 6c 79 5f 74 6f |object, |reply_to|
|00002d70| 2c 20 6f 66 66 73 65 74 | 2c 20 76 61 6c 75 65 29 |, offset|, value)|
|00002d80| 0a 6d 61 63 68 5f 70 6f | 72 74 5f 74 09 6f 62 6a |.mach_po|rt_t.obj|
|00002d90| 65 63 74 3b 0a 6d 61 63 | 68 5f 70 6f 72 74 5f 74 |ect;.mac|h_port_t|
|00002da0| 09 72 65 70 6c 79 5f 74 | 6f 3b 0a 76 6d 5f 61 64 |.reply_t|o;.vm_ad|
|00002db0| 64 72 65 73 73 5f 74 09 | 6f 66 66 73 65 74 3b 0a |dress_t.|offset;.|
|00002dc0| 69 6e 74 09 09 76 61 6c | 75 65 3b 0a 7b 0a 09 6e |int..val|ue;.{..n|
|00002dd0| 65 74 6d 65 6d 5f 6f 62 | 6a 5f 74 09 6d 79 5f 6f |etmem_ob|j_t.my_o|
|00002de0| 62 6a 3b 0a 0a 09 70 72 | 69 6e 74 66 28 22 77 72 |bj;...pr|intf("wr|
|00002df0| 69 74 65 5c 6e 22 29 3b | 0a 0a 09 2f 2a 0a 09 20 |ite\n");|.../*.. |
|00002e00| 2a 09 43 68 65 63 6b 20 | 61 72 67 75 6d 65 6e 74 |*.Check |argument|
|00002e10| 73 2e 20 0a 09 20 2a 2f | 0a 09 69 66 20 28 28 6d |s. .. */|..if ((m|
|00002e20| 79 5f 6f 62 6a 20 3d 20 | 6e 65 74 6d 65 6d 5f 6c |y_obj = |netmem_l|
|00002e30| 6f 6f 6b 75 70 28 6f 62 | 6a 65 63 74 29 29 20 3d |ookup(ob|ject)) =|
|00002e40| 3d 20 4e 45 54 4d 45 4d | 5f 4f 42 4a 5f 4e 55 4c |= NETMEM|_OBJ_NUL|
|00002e50| 4c 29 0a 09 09 72 65 74 | 75 72 6e 20 28 4e 45 54 |L)...ret|urn (NET|
|00002e60| 4d 45 4d 5f 42 41 44 5f | 4f 42 4a 45 43 54 29 3b |MEM_BAD_|OBJECT);|
|00002e70| 0a 0a 09 69 66 20 28 6f | 66 66 73 65 74 20 3e 3d |...if (o|ffset >=|
|00002e80| 20 28 76 6d 5f 70 61 67 | 65 5f 73 69 7a 65 2f 73 | (vm_pag|e_size/s|
|00002e90| 69 7a 65 6f 66 28 69 6e | 74 29 29 29 0a 09 09 72 |izeof(in|t)))...r|
|00002ea0| 65 74 75 72 6e 20 28 4e | 45 54 4d 45 4d 5f 42 41 |eturn (N|ETMEM_BA|
|00002eb0| 44 5f 4f 46 46 53 45 54 | 29 3b 20 20 0a 0a 09 2f |D_OFFSET|); .../|
|00002ec0| 2a 0a 09 20 2a 09 45 78 | 65 63 75 74 65 20 74 68 |*.. *.Ex|ecute th|
|00002ed0| 65 20 77 72 69 74 65 2e | 0a 09 20 2a 2f 0a 09 73 |e write.|.. */..s|
|00002ee0| 77 69 74 63 68 28 6d 79 | 5f 6f 62 6a 2d 3e 73 74 |witch(my|_obj->st|
|00002ef0| 61 74 65 29 20 7b 0a 09 | 20 20 20 20 63 61 73 65 |ate) {..| case|
|00002f00| 20 4e 45 54 4d 45 4d 5f | 4f 42 4a 5f 4e 4f 4e 45 | NETMEM_|OBJ_NONE|
|00002f10| 3a 0a 0a 09 09 2f 2a 0a | 09 09 20 2a 09 4e 65 65 |:..../*.|.. *.Nee|
|00002f20| 64 20 74 6f 20 69 6e 69 | 74 69 61 6c 69 7a 65 2e |d to ini|tialize.|
|00002f30| 20 20 53 65 72 76 65 72 | 20 68 61 73 20 65 78 63 | Server| has exc|
|00002f40| 6c 75 73 69 76 65 20 61 | 63 63 65 73 73 0a 09 09 |lusive a|ccess...|
|00002f50| 20 2a 09 28 77 72 69 74 | 65 29 20 77 68 65 6e 20 | *.(writ|e) when |
|00002f60| 77 65 27 72 65 20 64 6f | 6e 65 2e 0a 09 09 20 2a |we're do|ne.... *|
|00002f70| 2f 0a 20 20 20 20 20 20 | 20 09 09 28 76 6f 69 64 |/. | ..(void|
|00002f80| 29 20 76 6d 5f 61 6c 6c | 6f 63 61 74 65 28 6d 61 |) vm_all|ocate(ma|
|00002f90| 63 68 5f 74 61 73 6b 5f | 73 65 6c 66 28 29 2c 20 |ch_task_|self(), |
|00002fa0| 26 6d 79 5f 6f 62 6a 2d | 3e 64 61 74 61 2c 0a 09 |&my_obj-|>data,..|
|00002fb0| 09 09 20 20 20 20 76 6d | 5f 70 61 67 65 5f 73 69 |.. vm|_page_si|
|00002fc0| 7a 65 2c 20 54 52 55 45 | 29 3b 0a 09 09 6d 79 5f |ze, TRUE|);...my_|
|00002fd0| 6f 62 6a 2d 3e 73 74 61 | 74 65 20 3d 20 4e 45 54 |obj->sta|te = NET|
|00002fe0| 4d 45 4d 5f 4f 42 4a 5f | 53 45 52 56 45 52 5f 57 |MEM_OBJ_|SERVER_W|
|00002ff0| 52 49 54 45 3b 0a 0a 09 | 09 2f 2a 0a 09 09 20 2a |RITE;...|./*... *|
|00003000| 20 20 46 61 6c 6c 20 74 | 68 72 6f 75 67 68 20 2e | Fall t|hrough .|
|00003010| 2e 2e 0a 09 09 20 2a 2f | 0a 09 20 20 20 20 63 61 |..... */|.. ca|
|00003020| 73 65 20 4e 45 54 4d 45 | 4d 5f 4f 42 4a 5f 53 45 |se NETME|M_OBJ_SE|
|00003030| 52 56 45 52 5f 57 52 49 | 54 45 3a 0a 0a 09 09 2f |RVER_WRI|TE:..../|
|00003040| 2a 0a 09 09 20 2a 09 57 | 72 69 74 65 20 74 68 65 |*... *.W|rite the|
|00003050| 20 76 61 6c 75 65 2e 0a | 09 09 20 2a 2f 0a 09 09 | value..|.. */...|
|00003060| 2a 28 28 69 6e 74 20 2a | 29 20 28 6d 79 5f 6f 62 |*((int *|) (my_ob|
|00003070| 6a 2d 3e 64 61 74 61 29 | 20 2b 20 6f 66 66 73 65 |j->data)| + offse|
|00003080| 74 29 20 3d 20 76 61 6c | 75 65 3b 0a 0a 09 09 72 |t) = val|ue;....r|
|00003090| 65 74 75 72 6e 28 45 52 | 52 5f 53 55 43 43 45 53 |eturn(ER|R_SUCCES|
|000030a0| 53 29 3b 0a 0c 0a 09 20 | 20 20 20 63 61 73 65 20 |S);.... | case |
|000030b0| 4e 45 54 4d 45 4d 5f 4f | 42 4a 5f 52 45 41 44 3a |NETMEM_O|BJ_READ:|
|000030c0| 0a 09 20 20 20 20 63 61 | 73 65 20 4e 45 54 4d 45 |.. ca|se NETME|
|000030d0| 4d 5f 4f 42 4a 5f 4b 45 | 52 4e 45 4c 5f 57 52 49 |M_OBJ_KE|RNEL_WRI|
|000030e0| 54 45 3a 0a 0a 09 09 2f | 2a 0a 09 09 20 2a 09 52 |TE:..../|*... *.R|
|000030f0| 65 71 75 65 73 74 20 6b | 65 72 6e 65 6c 20 74 6f |equest k|ernel to|
|00003100| 20 67 69 76 65 20 75 70 | 20 61 6c 6c 20 61 63 63 | give up| all acc|
|00003110| 65 73 73 20 74 6f 20 70 | 61 67 65 2e 0a 09 09 20 |ess to p|age.... |
|00003120| 2a 09 41 73 6b 20 66 6f | 72 20 61 20 72 65 70 6c |*.Ask fo|r a repl|
|00003130| 79 20 77 68 65 6e 20 69 | 74 27 73 20 66 69 6e 69 |y when i|t's fini|
|00003140| 73 68 65 64 2e 0a 09 09 | 20 2a 2f 0a 09 09 70 72 |shed....| */...pr|
|00003150| 69 6e 74 66 28 22 6c 6f | 63 6b 5f 72 65 71 75 65 |intf("lo|ck_reque|
|00003160| 73 74 3a 20 63 6c 65 61 | 6e 2c 20 66 6c 75 73 68 |st: clea|n, flush|
|00003170| 2c 20 6c 6f 63 6b 20 25 | 64 5c 6e 22 2c 0a 09 09 |, lock %|d\n",...|
|00003180| 20 20 20 20 20 20 20 56 | 4d 5f 50 52 4f 54 5f 41 | V|M_PROT_A|
|00003190| 4c 4c 29 3b 0a 09 09 28 | 76 6f 69 64 29 20 6d 65 |LL);...(|void) me|
|000031a0| 6d 6f 72 79 5f 6f 62 6a | 65 63 74 5f 6c 6f 63 6b |mory_obj|ect_lock|
|000031b0| 5f 72 65 71 75 65 73 74 | 28 6d 79 5f 6f 62 6a 2d |_request|(my_obj-|
|000031c0| 3e 63 6f 6e 74 72 6f 6c | 5f 70 6f 72 74 2c 0a 09 |>control|_port,..|
|000031d0| 09 09 09 09 20 20 20 28 | 76 6d 5f 61 64 64 72 65 |.... (|vm_addre|
|000031e0| 73 73 5f 74 29 30 2c 20 | 76 6d 5f 70 61 67 65 5f |ss_t)0, |vm_page_|
|000031f0| 73 69 7a 65 2c 0a 09 09 | 20 20 20 20 20 20 20 20 |size,...| |
|00003200| 20 20 20 09 09 20 20 20 | 4d 45 4d 4f 52 59 5f 4f | .. |MEMORY_O|
|00003210| 42 4a 45 43 54 5f 52 45 | 54 55 52 4e 5f 44 49 52 |BJECT_RE|TURN_DIR|
|00003220| 54 59 2c 0a 09 09 09 09 | 09 20 20 20 54 52 55 45 |TY,.....|. TRUE|
|00003230| 2c 20 56 4d 5f 50 52 4f | 54 5f 41 4c 4c 2c 0a 09 |, VM_PRO|T_ALL,..|
|00003240| 09 09 09 09 20 20 20 6d | 79 5f 6f 62 6a 2d 3e 6f |.... m|y_obj->o|
|00003250| 62 6a 65 63 74 5f 70 6f | 72 74 29 3b 0a 09 09 6d |bject_po|rt);...m|
|00003260| 79 5f 6f 62 6a 2d 3e 73 | 74 61 74 65 20 3d 20 4e |y_obj->s|tate = N|
|00003270| 45 54 4d 45 4d 5f 4f 42 | 4a 5f 46 4c 55 53 48 49 |ETMEM_OB|J_FLUSHI|
|00003280| 4e 47 3b 0a 0a 09 09 2f | 2a 0a 09 09 20 2a 20 20 |NG;..../|*... * |
|00003290| 46 61 6c 6c 20 74 68 72 | 6f 75 67 68 20 2e 2e 2e |Fall thr|ough ...|
|000032a0| 0a 09 09 20 2a 2f 0a 09 | 20 20 20 20 63 61 73 65 |... */..| case|
|000032b0| 20 4e 45 54 4d 45 4d 5f | 4f 42 4a 5f 43 4c 45 41 | NETMEM_|OBJ_CLEA|
|000032c0| 4e 49 4e 47 3a 0a 09 20 | 20 20 20 63 61 73 65 20 |NING:.. | case |
|000032d0| 4e 45 54 4d 45 4d 5f 4f | 42 4a 5f 46 4c 55 53 48 |NETMEM_O|BJ_FLUSH|
|000032e0| 49 4e 47 3a 0a 0a 09 09 | 2f 2a 0a 09 09 20 2a 09 |ING:....|/*... *.|
|000032f0| 57 61 69 74 20 66 6f 72 | 20 74 68 69 73 20 63 68 |Wait for| this ch|
|00003300| 61 6e 67 65 20 74 6f 20 | 63 6f 6d 70 6c 65 74 65 |ange to |complete|
|00003310| 2e 20 20 45 6e 71 75 65 | 75 65 0a 09 09 20 2a 09 |. Enque|ue... *.|
|00003320| 74 68 69 73 20 6f 70 65 | 72 61 74 69 6f 6e 20 74 |this ope|ration t|
|00003330| 6f 20 62 65 20 68 61 6e | 64 6c 65 64 20 6c 61 74 |o be han|dled lat|
|00003340| 65 72 2e 0a 09 09 20 2a | 2f 0a 09 09 70 65 6e 64 |er.... *|/...pend|
|00003350| 69 6e 67 5f 6f 70 5f 71 | 75 65 75 65 28 6d 79 5f |ing_op_q|ueue(my_|
|00003360| 6f 62 6a 2c 20 50 45 4e | 44 49 4e 47 5f 57 52 49 |obj, PEN|DING_WRI|
|00003370| 54 45 2c 20 6f 66 66 73 | 65 74 2c 20 76 61 6c 75 |TE, offs|et, valu|
|00003380| 65 2c 0a 09 09 09 09 20 | 72 65 70 6c 79 5f 74 6f |e,..... |reply_to|
|00003390| 29 3b 0a 0a 09 09 2f 2a | 0a 09 09 20 2a 09 52 65 |);..../*|... *.Re|
|000033a0| 70 6c 79 20 77 69 6c 6c | 20 68 61 70 70 65 6e 20 |ply will| happen |
|000033b0| 77 68 65 6e 20 6c 6f 63 | 6b 5f 72 65 71 75 65 73 |when loc|k_reques|
|000033c0| 74 20 63 6f 6d 70 6c 65 | 74 65 73 2e 0a 09 09 20 |t comple|tes.... |
|000033d0| 2a 2f 0a 09 09 72 65 74 | 75 72 6e 28 4d 49 47 5f |*/...ret|urn(MIG_|
|000033e0| 4e 4f 5f 52 45 50 4c 59 | 29 3b 0a 0a 09 20 20 20 |NO_REPLY|);... |
|000033f0| 20 64 65 66 61 75 6c 74 | 3a 0a 09 09 70 72 69 6e | default|:...prin|
|00003400| 74 66 28 22 42 61 64 20 | 73 74 61 74 65 20 25 64 |tf("Bad |state %d|
|00003410| 5c 6e 22 2c 20 6d 79 5f | 6f 62 6a 2d 3e 73 74 61 |\n", my_|obj->sta|
|00003420| 74 65 29 3b 0a 09 09 72 | 65 74 75 72 6e 28 4e 45 |te);...r|eturn(NE|
|00003430| 54 4d 45 4d 5f 46 41 49 | 4c 55 52 45 29 3b 09 09 |TMEM_FAI|LURE);..|
|00003440| 0a 09 7d 0a 09 2f 2a 4e | 4f 54 52 45 41 43 48 45 |..}../*N|OTREACHE|
|00003450| 44 2a 2f 0a 7d 0a 0c 0a | 0a 2f 2a 0a 20 2a 09 52 |D*/.}...|./*. *.R|
|00003460| 6f 75 74 69 6e 65 73 20 | 66 6f 72 20 68 61 6e 64 |outines |for hand|
|00003470| 6c 69 6e 67 20 70 61 67 | 69 6e 67 20 6d 65 73 73 |ling pag|ing mess|
|00003480| 61 67 65 73 20 66 72 6f | 6d 20 74 68 65 20 6b 65 |ages fro|m the ke|
|00003490| 72 6e 65 6c 2e 0a 20 2a | 2f 0a 0a 2f 2a 0a 20 2a |rnel.. *|/../*. *|
|000034a0| 09 4b 65 72 6e 65 6c 20 | 72 65 71 75 65 73 74 20 |.Kernel |request |
|000034b0| 74 6f 20 69 6e 69 74 69 | 61 6c 69 7a 65 20 6f 62 |to initi|alize ob|
|000034c0| 6a 65 63 74 2e 0a 20 2a | 2f 0a 6b 65 72 6e 5f 72 |ject.. *|/.kern_r|
|000034d0| 65 74 75 72 6e 5f 74 0a | 6d 65 6d 6f 72 79 5f 6f |eturn_t.|memory_o|
|000034e0| 62 6a 65 63 74 5f 69 6e | 69 74 28 6f 62 6a 65 63 |bject_in|it(objec|
|000034f0| 74 2c 20 63 6f 6e 74 72 | 6f 6c 2c 20 6e 61 6d 65 |t, contr|ol, name|
|00003500| 2c 20 6f 62 6a 5f 70 61 | 67 65 5f 73 69 7a 65 29 |, obj_pa|ge_size)|
|00003510| 0a 6d 65 6d 6f 72 79 5f | 6f 62 6a 65 63 74 5f 74 |.memory_|object_t|
|00003520| 09 09 6f 62 6a 65 63 74 | 3b 0a 6d 65 6d 6f 72 79 |..object|;.memory|
|00003530| 5f 6f 62 6a 65 63 74 5f | 63 6f 6e 74 72 6f 6c 5f |_object_|control_|
|00003540| 74 09 63 6f 6e 74 72 6f | 6c 3b 0a 6d 65 6d 6f 72 |t.contro|l;.memor|
|00003550| 79 5f 6f 62 6a 65 63 74 | 5f 6e 61 6d 65 5f 74 09 |y_object|_name_t.|
|00003560| 6e 61 6d 65 3b 0a 76 6d | 5f 73 69 7a 65 5f 74 09 |name;.vm|_size_t.|
|00003570| 20 20 20 20 20 20 20 20 | 6f 62 6a 5f 70 61 67 65 | |obj_page|
|00003580| 5f 73 69 7a 65 3b 0a 7b | 0a 09 6e 65 74 6d 65 6d |_size;.{|..netmem|
|00003590| 5f 6f 62 6a 5f 74 09 6d | 79 5f 6f 62 6a 3b 0a 0a |_obj_t.m|y_obj;..|
|000035a0| 09 70 72 69 6e 74 66 28 | 22 69 6e 69 74 5c 6e 22 |.printf(|"init\n"|
|000035b0| 29 3b 0a 09 0a 09 2f 2a | 0a 09 20 2a 09 43 68 65 |);..../*|.. *.Che|
|000035c0| 63 6b 20 74 68 65 20 6f | 62 6a 65 63 74 27 73 20 |ck the o|bject's |
|000035d0| 70 61 67 65 20 73 69 7a | 65 2e 0a 09 20 2a 2f 0a |page siz|e... */.|
|000035e0| 09 69 66 20 28 6f 62 6a | 5f 70 61 67 65 5f 73 69 |.if (obj|_page_si|
|000035f0| 7a 65 20 21 3d 20 76 6d | 5f 70 61 67 65 5f 73 69 |ze != vm|_page_si|
|00003600| 7a 65 29 20 7b 0a 09 09 | 70 72 69 6e 74 66 28 22 |ze) {...|printf("|
|00003610| 70 61 67 65 20 73 69 7a | 65 20 6d 69 73 6d 61 74 |page siz|e mismat|
|00003620| 63 68 5c 6e 22 29 3b 0a | 09 09 72 65 74 75 72 6e |ch\n");.|..return|
|00003630| 28 4b 45 52 4e 5f 46 41 | 49 4c 55 52 45 29 3b 0a |(KERN_FA|ILURE);.|
|00003640| 09 7d 0a 0a 09 2f 2a 0a | 09 20 2a 09 43 68 65 63 |.}.../*.|. *.Chec|
|00003650| 6b 20 74 68 61 74 20 69 | 74 27 73 20 6f 75 72 20 |k that i|t's our |
|00003660| 6f 62 6a 65 63 74 2e 0a | 09 20 2a 2f 0a 09 69 66 |object..|. */..if|
|00003670| 20 28 28 6d 79 5f 6f 62 | 6a 20 3d 20 6e 65 74 6d | ((my_ob|j = netm|
|00003680| 65 6d 5f 6c 6f 6f 6b 75 | 70 28 6f 62 6a 65 63 74 |em_looku|p(object|
|00003690| 29 29 20 3d 3d 20 4e 45 | 54 4d 45 4d 5f 4f 42 4a |)) == NE|TMEM_OBJ|
|000036a0| 5f 4e 55 4c 4c 29 20 7b | 0a 09 09 72 65 74 75 72 |_NULL) {|...retur|
|000036b0| 6e 28 4b 45 52 4e 5f 46 | 41 49 4c 55 52 45 29 3b |n(KERN_F|AILURE);|
|000036c0| 0a 09 7d 0a 0a 09 2f 2a | 0a 09 20 2a 09 53 65 74 |..}.../*|.. *.Set|
|000036d0| 20 75 70 20 63 6f 6e 74 | 72 6f 6c 20 70 6f 72 74 | up cont|rol port|
|000036e0| 2e 20 20 49 66 20 69 74 | 27 73 20 6e 6f 74 20 4e |. If it|'s not N|
|000036f0| 55 4c 4c 2c 20 77 65 20 | 68 61 76 65 0a 09 20 2a |ULL, we |have.. *|
|00003700| 09 72 65 63 65 69 76 65 | 64 20 61 6e 20 69 6e 69 |.receive|d an ini|
|00003710| 74 20 62 65 66 6f 72 65 | 20 61 20 74 65 72 6d 69 |t before| a termi|
|00003720| 6e 61 74 65 2e 20 20 54 | 68 69 73 20 63 61 6e 27 |nate. T|his can'|
|00003730| 74 0a 09 20 2a 09 68 61 | 70 70 65 6e 20 61 6e 79 |t.. *.ha|ppen any|
|00003740| 20 6c 6f 6e 67 65 72 2e | 0a 09 20 2a 2f 0a 09 69 | longer.|.. */..i|
|00003750| 66 20 28 6d 79 5f 6f 62 | 6a 2d 3e 63 6f 6e 74 72 |f (my_ob|j->contr|
|00003760| 6f 6c 5f 70 6f 72 74 20 | 21 3d 20 4d 41 43 48 5f |ol_port |!= MACH_|
|00003770| 50 4f 52 54 5f 4e 55 4c | 4c 29 20 7b 0a 09 09 70 |PORT_NUL|L) {...p|
|00003780| 72 69 6e 74 66 28 22 69 | 6e 69 74 20 62 65 66 6f |rintf("i|nit befo|
|00003790| 72 65 20 74 65 72 6d 69 | 6e 61 74 65 5c 6e 22 29 |re termi|nate\n")|
|000037a0| 3b 0a 09 09 72 65 74 75 | 72 6e 28 4b 45 52 4e 5f |;...retu|rn(KERN_|
|000037b0| 46 41 49 4c 55 52 45 29 | 3b 0a 09 7d 0a 0a 09 6d |FAILURE)|;..}...m|
|000037c0| 79 5f 6f 62 6a 2d 3e 63 | 6f 6e 74 72 6f 6c 5f 70 |y_obj->c|ontrol_p|
|000037d0| 6f 72 74 20 3d 20 63 6f | 6e 74 72 6f 6c 3b 0a 09 |ort = co|ntrol;..|
|000037e0| 6d 79 5f 6f 62 6a 2d 3e | 73 65 6e 64 5f 72 69 67 |my_obj->|send_rig|
|000037f0| 68 74 73 20 3d 20 31 3b | 0a 0a 09 2f 2a 0a 09 20 |hts = 1;|.../*.. |
|00003800| 2a 09 52 65 70 6c 79 3a | 20 74 68 65 20 6f 62 6a |*.Reply:| the obj|
|00003810| 65 63 74 20 69 73 20 72 | 65 61 64 79 2e 20 20 4e |ect is r|eady. N|
|00003820| 6f 74 20 63 61 63 68 65 | 61 62 6c 65 2c 20 6e 6f |ot cache|able, no|
|00003830| 20 73 70 65 63 69 61 6c | 0a 09 20 2a 09 63 6f 70 | special|.. *.cop|
|00003840| 79 20 73 74 72 61 74 65 | 67 79 2e 0a 09 20 2a 2f |y strate|gy... */|
|00003850| 0a 09 70 72 69 6e 74 66 | 28 22 72 65 61 64 79 5c |..printf|("ready\|
|00003860| 6e 22 29 3b 0a 09 28 76 | 6f 69 64 29 20 6d 65 6d |n");..(v|oid) mem|
|00003870| 6f 72 79 5f 6f 62 6a 65 | 63 74 5f 72 65 61 64 79 |ory_obje|ct_ready|
|00003880| 28 63 6f 6e 74 72 6f 6c | 2c 20 46 41 4c 53 45 2c |(control|, FALSE,|
|00003890| 20 4d 45 4d 4f 52 59 5f | 4f 42 4a 45 43 54 5f 43 | MEMORY_|OBJECT_C|
|000038a0| 4f 50 59 5f 4e 4f 4e 45 | 29 3b 0a 0a 09 2f 2a 0a |OPY_NONE|);.../*.|
|000038b0| 09 20 2a 09 53 65 6e 64 | 20 72 69 67 68 74 20 6f |. *.Send| right o|
|000038c0| 6e 20 63 6f 6e 74 72 6f | 6c 20 70 6f 72 74 20 69 |n contro|l port i|
|000038d0| 73 20 68 65 6c 64 20 62 | 79 20 6f 62 6a 65 63 74 |s held b|y object|
|000038e0| 20 64 61 74 61 0a 09 20 | 2a 09 73 74 72 75 63 74 | data.. |*.struct|
|000038f0| 75 72 65 20 75 6e 74 69 | 6c 20 74 65 72 6d 69 6e |ure unti|l termin|
|00003900| 61 74 69 6f 6e 2e 20 20 | 47 65 74 20 72 69 64 20 |ation. |Get rid |
|00003910| 6f 66 20 6e 61 6d 65 20 | 70 6f 72 74 20 72 69 67 |of name |port rig|
|00003920| 68 74 2e 0a 09 20 2a 09 | 6d 61 63 68 5f 70 6f 72 |ht... *.|mach_por|
|00003930| 74 5f 64 65 61 6c 6c 6f | 63 61 74 65 20 63 6f 75 |t_deallo|cate cou|
|00003940| 6c 64 20 61 6c 73 6f 20 | 62 65 20 75 73 65 64 20 |ld also |be used |
|00003950| 68 65 72 65 2e 0a 09 20 | 2a 2f 0a 09 28 76 6f 69 |here... |*/..(voi|
|00003960| 64 29 20 6d 61 63 68 5f | 70 6f 72 74 5f 6d 6f 64 |d) mach_|port_mod|
|00003970| 5f 72 65 66 73 28 6d 61 | 63 68 5f 74 61 73 6b 5f |_refs(ma|ch_task_|
|00003980| 73 65 6c 66 28 29 2c 20 | 6e 61 6d 65 2c 0a 09 09 |self(), |name,...|
|00003990| 09 09 20 20 4d 41 43 48 | 5f 50 4f 52 54 5f 52 49 |.. MACH|_PORT_RI|
|000039a0| 47 48 54 5f 53 45 4e 44 | 2c 20 2d 31 29 3b 0a 09 |GHT_SEND|, -1);..|
|000039b0| 72 65 74 75 72 6e 28 4b | 45 52 4e 5f 53 55 43 43 |return(K|ERN_SUCC|
|000039c0| 45 53 53 29 3b 0a 7d 0a | 0c 0a 0a 2f 2a 0a 20 2a |ESS);.}.|.../*. *|
|000039d0| 09 4b 65 72 6e 65 6c 20 | 6f 62 6a 65 63 74 20 74 |.Kernel |object t|
|000039e0| 65 72 6d 69 6e 61 74 69 | 6f 6e 2e 0a 20 2a 2f 0a |erminati|on.. */.|
|000039f0| 6b 65 72 6e 5f 72 65 74 | 75 72 6e 5f 74 0a 6d 65 |kern_ret|urn_t.me|
|00003a00| 6d 6f 72 79 5f 6f 62 6a | 65 63 74 5f 74 65 72 6d |mory_obj|ect_term|
|00003a10| 69 6e 61 74 65 28 6f 62 | 6a 65 63 74 2c 20 63 6f |inate(ob|ject, co|
|00003a20| 6e 74 72 6f 6c 2c 20 6e | 61 6d 65 29 0a 6d 65 6d |ntrol, n|ame).mem|
|00003a30| 6f 72 79 5f 6f 62 6a 65 | 63 74 5f 74 09 09 6f 62 |ory_obje|ct_t..ob|
|00003a40| 6a 65 63 74 3b 0a 6d 65 | 6d 6f 72 79 5f 6f 62 6a |ject;.me|mory_obj|
|00003a50| 65 63 74 5f 63 6f 6e 74 | 72 6f 6c 5f 74 09 63 6f |ect_cont|rol_t.co|
|00003a60| 6e 74 72 6f 6c 3b 0a 6d | 65 6d 6f 72 79 5f 6f 62 |ntrol;.m|emory_ob|
|00003a70| 6a 65 63 74 5f 6e 61 6d | 65 5f 74 09 6e 61 6d 65 |ject_nam|e_t.name|
|00003a80| 3b 0a 7b 0a 09 6e 65 74 | 6d 65 6d 5f 6f 62 6a 5f |;.{..net|mem_obj_|
|00003a90| 74 09 6d 79 5f 6f 62 6a | 3b 0a 0a 09 70 72 69 6e |t.my_obj|;...prin|
|00003aa0| 74 66 28 22 74 65 72 6d | 69 6e 61 74 65 5c 6e 22 |tf("term|inate\n"|
|00003ab0| 29 3b 0a 09 0a 09 2f 2a | 0a 09 20 2a 09 43 68 65 |);..../*|.. *.Che|
|00003ac0| 63 6b 20 74 68 61 74 20 | 69 74 27 73 20 6f 75 72 |ck that |it's our|
|00003ad0| 20 6f 62 6a 65 63 74 2e | 0a 09 20 2a 2f 0a 09 69 | object.|.. */..i|
|00003ae0| 66 20 28 28 6d 79 5f 6f | 62 6a 20 3d 20 6e 65 74 |f ((my_o|bj = net|
|00003af0| 6d 65 6d 5f 6c 6f 6f 6b | 75 70 28 6f 62 6a 65 63 |mem_look|up(objec|
|00003b00| 74 29 29 20 3d 3d 20 4e | 45 54 4d 45 4d 5f 4f 42 |t)) == N|ETMEM_OB|
|00003b10| 4a 5f 4e 55 4c 4c 29 0a | 09 09 72 65 74 75 72 6e |J_NULL).|..return|
|00003b20| 28 4b 45 52 4e 5f 46 41 | 49 4c 55 52 45 29 3b 0a |(KERN_FA|ILURE);.|
|00003b30| 0a 09 2f 2a 0a 09 20 2a | 09 43 6c 65 61 72 20 63 |../*.. *|.Clear c|
|00003b40| 6f 6e 74 72 6f 6c 20 70 | 6f 72 74 2c 20 61 6e 64 |ontrol p|ort, and|
|00003b50| 20 72 65 6d 6f 76 65 20 | 61 6e 79 20 73 65 6e 64 | remove |any send|
|00003b60| 20 72 69 67 68 74 73 20 | 77 65 20 68 61 76 65 2e | rights |we have.|
|00003b70| 0a 09 20 2a 2f 0a 09 69 | 66 20 28 6d 79 5f 6f 62 |.. */..i|f (my_ob|
|00003b80| 6a 2d 3e 63 6f 6e 74 72 | 6f 6c 5f 70 6f 72 74 20 |j->contr|ol_port |
|00003b90| 3d 3d 20 63 6f 6e 74 72 | 6f 6c 29 20 7b 0a 09 09 |== contr|ol) {...|
|00003ba0| 6d 79 5f 6f 62 6a 2d 3e | 63 6f 6e 74 72 6f 6c 5f |my_obj->|control_|
|00003bb0| 70 6f 72 74 20 3d 20 4d | 41 43 48 5f 50 4f 52 54 |port = M|ACH_PORT|
|00003bc0| 5f 4e 55 4c 4c 3b 0a 09 | 09 28 76 6f 69 64 29 20 |_NULL;..|.(void) |
|00003bd0| 6d 61 63 68 5f 70 6f 72 | 74 5f 6d 6f 64 5f 72 65 |mach_por|t_mod_re|
|00003be0| 66 73 28 6d 61 63 68 5f | 74 61 73 6b 5f 73 65 6c |fs(mach_|task_sel|
|00003bf0| 66 28 29 2c 20 63 6f 6e | 74 72 6f 6c 2c 0a 09 09 |f(), con|trol,...|
|00003c00| 09 20 20 20 4d 41 43 48 | 5f 50 4f 52 54 5f 52 49 |. MACH|_PORT_RI|
|00003c10| 47 48 54 5f 53 45 4e 44 | 2c 2d 28 6d 79 5f 6f 62 |GHT_SEND|,-(my_ob|
|00003c20| 6a 2d 3e 73 65 6e 64 5f | 72 69 67 68 74 73 29 29 |j->send_|rights))|
|00003c30| 3b 0a 09 09 6d 79 5f 6f | 62 6a 2d 3e 73 65 6e 64 |;...my_o|bj->send|
|00003c40| 5f 72 69 67 68 74 73 20 | 3d 20 30 3b 0a 09 7d 0a |_rights |= 0;..}.|
|00003c50| 0a 09 2f 2a 0a 09 20 2a | 09 52 65 73 65 74 20 6f |../*.. *|.Reset o|
|00003c60| 62 6a 65 63 74 20 73 74 | 61 74 65 3a 20 6e 6f 20 |bject st|ate: no |
|00003c70| 6b 65 72 6e 65 6c 20 63 | 6f 70 79 2c 20 73 6f 20 |kernel c|opy, so |
|00003c80| 73 65 72 76 65 72 20 77 | 72 69 74 65 20 6f 6b 2e |server w|rite ok.|
|00003c90| 0a 09 20 2a 2f 0a 09 6d | 79 5f 6f 62 6a 2d 3e 73 |.. */..m|y_obj->s|
|00003ca0| 74 61 74 65 20 3d 20 4e | 45 54 4d 45 4d 5f 4f 42 |tate = N|ETMEM_OB|
|00003cb0| 4a 5f 53 45 52 56 45 52 | 5f 57 52 49 54 45 3b 0a |J_SERVER|_WRITE;.|
|00003cc0| 0a 09 2f 2a 0a 09 20 2a | 09 4e 6f 77 20 67 65 74 |../*.. *|.Now get|
|00003cd0| 20 72 69 64 20 6f 66 20 | 74 68 65 20 72 65 63 65 | rid of |the rece|
|00003ce0| 69 76 65 20 72 69 67 68 | 74 73 20 74 68 61 74 20 |ive righ|ts that |
|00003cf0| 63 61 6d 65 20 69 6e 20 | 74 68 69 73 20 6d 65 73 |came in |this mes|
|00003d00| 73 61 67 65 2e 0a 09 20 | 2a 2f 0a 09 28 76 6f 69 |sage... |*/..(voi|
|00003d10| 64 29 20 6d 61 63 68 5f | 70 6f 72 74 5f 6d 6f 64 |d) mach_|port_mod|
|00003d20| 5f 72 65 66 73 28 6d 61 | 63 68 5f 74 61 73 6b 5f |_refs(ma|ch_task_|
|00003d30| 73 65 6c 66 28 29 2c 20 | 63 6f 6e 74 72 6f 6c 2c |self(), |control,|
|00003d40| 0a 09 09 09 20 20 20 4d | 41 43 48 5f 50 4f 52 54 |.... M|ACH_PORT|
|00003d50| 5f 52 49 47 48 54 5f 52 | 45 43 45 49 56 45 2c 2d |_RIGHT_R|ECEIVE,-|
|00003d60| 31 29 3b 0a 09 28 76 6f | 69 64 29 20 6d 61 63 68 |1);..(vo|id) mach|
|00003d70| 5f 70 6f 72 74 5f 6d 6f | 64 5f 72 65 66 73 28 6d |_port_mo|d_refs(m|
|00003d80| 61 63 68 5f 74 61 73 6b | 5f 73 65 6c 66 28 29 2c |ach_task|_self(),|
|00003d90| 20 6e 61 6d 65 2c 0a 09 | 09 09 20 20 20 4d 41 43 | name,..|.. MAC|
|00003da0| 48 5f 50 4f 52 54 5f 52 | 49 47 48 54 5f 52 45 43 |H_PORT_R|IGHT_REC|
|00003db0| 45 49 56 45 2c 2d 31 29 | 3b 0a 0a 09 72 65 74 75 |EIVE,-1)|;...retu|
|00003dc0| 72 6e 28 4b 45 52 4e 5f | 53 55 43 43 45 53 53 29 |rn(KERN_|SUCCESS)|
|00003dd0| 3b 0a 7d 0a 0c 0a 0a 2f | 2a 0a 20 2a 09 50 61 67 |;.}..../|*. *.Pag|
|00003de0| 65 69 6e 0a 20 2a 2f 0a | 6b 65 72 6e 5f 72 65 74 |ein. */.|kern_ret|
|00003df0| 75 72 6e 5f 74 0a 6d 65 | 6d 6f 72 79 5f 6f 62 6a |urn_t.me|mory_obj|
|00003e00| 65 63 74 5f 64 61 74 61 | 5f 72 65 71 75 65 73 74 |ect_data|_request|
|00003e10| 28 6f 62 6a 65 63 74 2c | 20 63 6f 6e 74 72 6f 6c |(object,| control|
|00003e20| 2c 20 6f 66 66 73 65 74 | 2c 20 6c 65 6e 67 74 68 |, offset|, length|
|00003e30| 2c 20 61 63 63 65 73 73 | 29 0a 6d 65 6d 6f 72 79 |, access|).memory|
|00003e40| 5f 6f 62 6a 65 63 74 5f | 74 20 09 6f 62 6a 65 63 |_object_|t .objec|
|00003e50| 74 3b 0a 6d 65 6d 6f 72 | 79 5f 6f 62 6a 65 63 74 |t;.memor|y_object|
|00003e60| 5f 63 6f 6e 74 72 6f 6c | 5f 74 09 63 6f 6e 74 72 |_control|_t.contr|
|00003e70| 6f 6c 3b 0a 76 6d 5f 61 | 64 64 72 65 73 73 5f 74 |ol;.vm_a|ddress_t|
|00003e80| 09 09 6f 66 66 73 65 74 | 3b 0a 76 6d 5f 73 69 7a |..offset|;.vm_siz|
|00003e90| 65 5f 74 09 09 6c 65 6e | 67 74 68 3b 0a 76 6d 5f |e_t..len|gth;.vm_|
|00003ea0| 70 72 6f 74 5f 74 09 09 | 61 63 63 65 73 73 3b 0a |prot_t..|access;.|
|00003eb0| 7b 0a 09 6e 65 74 6d 65 | 6d 5f 6f 62 6a 5f 74 09 |{..netme|m_obj_t.|
|00003ec0| 6d 79 5f 6f 62 6a 3b 0a | 09 76 6d 5f 70 72 6f 74 |my_obj;.|.vm_prot|
|00003ed0| 5f 74 09 6c 6f 63 6b 5f | 76 61 6c 75 65 3b 0a 0a |_t.lock_|value;..|
|00003ee0| 09 70 72 69 6e 74 66 28 | 22 64 61 74 61 5f 72 65 |.printf(|"data_re|
|00003ef0| 71 75 65 73 74 20 25 64 | 5c 6e 22 2c 20 61 63 63 |quest %d|\n", acc|
|00003f00| 65 73 73 29 3b 0a 0a 09 | 2f 2a 0a 09 20 2a 09 43 |ess);...|/*.. *.C|
|00003f10| 68 65 63 6b 20 74 68 61 | 74 20 69 74 27 73 20 6f |heck tha|t it's o|
|00003f20| 75 72 20 6f 62 6a 65 63 | 74 2e 0a 09 20 2a 2f 0a |ur objec|t... */.|
|00003f30| 09 69 66 20 28 28 6d 79 | 5f 6f 62 6a 20 3d 20 6e |.if ((my|_obj = n|
|00003f40| 65 74 6d 65 6d 5f 6c 6f | 6f 6b 75 70 28 6f 62 6a |etmem_lo|okup(obj|
|00003f50| 65 63 74 29 29 20 3d 3d | 20 4e 45 54 4d 45 4d 5f |ect)) ==| NETMEM_|
|00003f60| 4f 42 4a 5f 4e 55 4c 4c | 29 0a 09 09 72 65 74 75 |OBJ_NULL|)...retu|
|00003f70| 72 6e 28 4b 45 52 4e 5f | 46 41 49 4c 55 52 45 29 |rn(KERN_|FAILURE)|
|00003f80| 3b 0a 0a 09 2f 2a 0a 09 | 20 2a 09 43 68 65 63 6b |;.../*..| *.Check|
|00003f90| 20 6f 66 66 73 65 74 20 | 61 6e 64 20 6c 65 6e 67 | offset |and leng|
|00003fa0| 74 68 20 61 72 67 75 6d | 65 6e 74 73 2e 0a 09 20 |th argum|ents... |
|00003fb0| 2a 2f 0a 09 69 66 20 28 | 6f 66 66 73 65 74 20 3e |*/..if (|offset >|
|00003fc0| 20 30 20 7c 7c 20 6f 66 | 66 73 65 74 20 2b 20 6c | 0 || of|fset + l|
|00003fd0| 65 6e 67 74 68 20 3e 20 | 76 6d 5f 70 61 67 65 5f |ength > |vm_page_|
|00003fe0| 73 69 7a 65 29 20 7b 0a | 0a 09 09 2f 2a 0a 09 09 |size) {.|.../*...|
|00003ff0| 20 2a 09 41 63 63 65 73 | 73 69 6e 67 20 74 68 69 | *.Acces|sing thi|
|00004000| 73 20 72 65 67 69 6f 6e | 20 6f 66 20 74 68 65 20 |s region| of the |
|00004010| 6f 62 6a 65 63 74 20 69 | 73 20 61 6e 20 65 72 72 |object i|s an err|
|00004020| 6f 72 2e 0a 09 09 20 2a | 0a 09 09 20 2a 09 4e 4f |or.... *|... *.NO|
|00004030| 54 45 3a 20 54 68 69 73 | 20 63 6f 64 65 20 61 73 |TE: This| code as|
|00004040| 73 75 6d 65 73 20 74 68 | 61 74 20 74 68 65 72 65 |sumes th|at there|
|00004050| 20 77 69 6c 6c 20 6e 6f | 74 20 62 65 0a 09 09 20 | will no|t be... |
|00004060| 2a 09 6d 75 6c 74 69 2d | 70 61 67 65 20 72 65 71 |*.multi-|page req|
|00004070| 75 65 73 74 73 20 74 68 | 61 74 20 69 6e 63 6c 75 |uests th|at inclu|
|00004080| 64 65 20 62 6f 74 68 20 | 76 61 6c 69 64 0a 09 09 |de both |valid...|
|00004090| 20 2a 09 61 6e 64 20 69 | 6e 76 61 6c 69 64 20 72 | *.and i|nvalid r|
|000040a0| 65 67 69 6f 6e 73 2e 20 | 20 43 75 72 72 65 6e 74 |egions. | Current|
|000040b0| 20 6b 65 72 6e 65 6c 73 | 20 64 6f 20 6e 6f 74 0a | kernels| do not.|
|000040c0| 09 09 20 2a 09 6d 61 6b | 65 20 73 75 63 68 20 72 |.. *.mak|e such r|
|000040d0| 65 71 75 65 73 74 73 2e | 20 20 41 20 72 65 71 75 |equests.| A requ|
|000040e0| 65 73 74 20 6c 69 6b 65 | 20 74 68 61 74 20 77 6f |est like| that wo|
|000040f0| 75 6c 64 0a 09 09 20 2a | 09 62 65 20 73 70 6c 69 |uld... *|.be spli|
|00004100| 74 20 69 6e 74 6f 20 69 | 74 73 20 63 6f 6d 70 6f |t into i|ts compo|
|00004110| 6e 65 6e 74 73 20 68 65 | 72 65 2e 0a 09 09 20 2a |nents he|re.... *|
|00004120| 2f 0a 09 09 70 72 69 6e | 74 66 28 22 64 61 74 61 |/...prin|tf("data|
|00004130| 5f 65 72 72 6f 72 5c 6e | 22 29 3b 0a 09 09 28 76 |_error\n|");...(v|
|00004140| 6f 69 64 29 20 6d 65 6d | 6f 72 79 5f 6f 62 6a 65 |oid) mem|ory_obje|
|00004150| 63 74 5f 64 61 74 61 5f | 65 72 72 6f 72 28 63 6f |ct_data_|error(co|
|00004160| 6e 74 72 6f 6c 2c 20 6f | 66 66 73 65 74 2c 20 6c |ntrol, o|ffset, l|
|00004170| 65 6e 67 74 68 2c 0a 09 | 09 09 09 09 20 4e 45 54 |ength,..|.... NET|
|00004180| 4d 45 4d 5f 42 41 44 5f | 4f 46 46 53 45 54 29 3b |MEM_BAD_|OFFSET);|
|00004190| 0a 09 09 72 65 74 75 72 | 6e 28 4b 45 52 4e 5f 46 |...retur|n(KERN_F|
|000041a0| 41 49 4c 55 52 45 29 3b | 0a 09 7d 0a 0a 09 2f 2a |AILURE);|..}.../*|
|000041b0| 0a 09 20 2a 09 4e 6f 77 | 20 64 6f 20 73 6f 6d 65 |.. *.Now| do some|
|000041c0| 74 68 69 6e 67 20 61 62 | 6f 75 74 20 69 74 2e 0a |thing ab|out it..|
|000041d0| 09 20 2a 2f 0a 09 73 77 | 69 74 63 68 20 28 6d 79 |. */..sw|itch (my|
|000041e0| 5f 6f 62 6a 2d 3e 73 74 | 61 74 65 29 20 7b 0a 09 |_obj->st|ate) {..|
|000041f0| 20 20 20 20 63 61 73 65 | 20 4e 45 54 4d 45 4d 5f | case| NETMEM_|
|00004200| 4f 42 4a 5f 4e 4f 4e 45 | 3a 0a 0a 09 09 2f 2a 0a |OBJ_NONE|:..../*.|
|00004210| 09 09 20 2a 09 4e 65 65 | 64 20 74 6f 20 69 6e 69 |.. *.Nee|d to ini|
|00004220| 74 69 61 6c 69 7a 65 2e | 20 20 49 6e 69 74 69 61 |tialize.| Initia|
|00004230| 6c 69 7a 65 20 6b 65 72 | 6e 65 6c 20 74 6f 20 7a |lize ker|nel to z|
|00004240| 65 72 6f 73 0a 09 09 20 | 2a 09 77 69 74 68 20 64 |eros... |*.with d|
|00004250| 61 74 61 5f 75 6e 61 76 | 61 69 6c 61 62 6c 65 2e |ata_unav|ailable.|
|00004260| 20 20 4b 65 72 6e 65 6c | 20 67 65 74 73 20 77 72 | Kernel| gets wr|
|00004270| 69 74 65 20 61 63 63 65 | 73 73 2e 0a 09 09 20 2a |ite acce|ss.... *|
|00004280| 2f 0a 20 20 20 20 20 20 | 20 09 09 28 76 6f 69 64 |/. | ..(void|
|00004290| 29 20 76 6d 5f 61 6c 6c | 6f 63 61 74 65 28 6d 61 |) vm_all|ocate(ma|
|000042a0| 63 68 5f 74 61 73 6b 5f | 73 65 6c 66 28 29 2c 20 |ch_task_|self(), |
|000042b0| 26 6d 79 5f 6f 62 6a 2d | 3e 64 61 74 61 2c 0a 09 |&my_obj-|>data,..|
|000042c0| 09 09 20 20 20 20 76 6d | 5f 70 61 67 65 5f 73 69 |.. vm|_page_si|
|000042d0| 7a 65 2c 20 54 52 55 45 | 29 3b 0a 09 09 70 72 69 |ze, TRUE|);...pri|
|000042e0| 6e 74 66 28 22 64 61 74 | 61 5f 75 6e 61 76 61 69 |ntf("dat|a_unavai|
|000042f0| 6c 61 62 6c 65 5c 6e 22 | 29 3b 0a 09 09 28 76 6f |lable\n"|);...(vo|
|00004300| 69 64 29 20 6d 65 6d 6f | 72 79 5f 6f 62 6a 65 63 |id) memo|ry_objec|
|00004310| 74 5f 64 61 74 61 5f 75 | 6e 61 76 61 69 6c 61 62 |t_data_u|navailab|
|00004320| 6c 65 28 63 6f 6e 74 72 | 6f 6c 2c 20 6f 66 66 73 |le(contr|ol, offs|
|00004330| 65 74 2c 20 6c 65 6e 67 | 74 68 29 3b 0a 09 09 6d |et, leng|th);...m|
|00004340| 79 5f 6f 62 6a 2d 3e 73 | 74 61 74 65 20 3d 20 4e |y_obj->s|tate = N|
|00004350| 45 54 4d 45 4d 5f 4f 42 | 4a 5f 4b 45 52 4e 45 4c |ETMEM_OB|J_KERNEL|
|00004360| 5f 57 52 49 54 45 3b 0a | 09 09 62 72 65 61 6b 3b |_WRITE;.|..break;|
|00004370| 0a 0c 0a 09 20 20 20 20 | 63 61 73 65 20 4e 45 54 |.... |case NET|
|00004380| 4d 45 4d 5f 4f 42 4a 5f | 52 45 41 44 3a 0a 09 20 |MEM_OBJ_|READ:.. |
|00004390| 20 20 20 63 61 73 65 20 | 4e 45 54 4d 45 4d 5f 4f | case |NETMEM_O|
|000043a0| 42 4a 5f 53 45 52 56 45 | 52 5f 57 52 49 54 45 3a |BJ_SERVE|R_WRITE:|
|000043b0| 0a 09 20 20 20 20 63 61 | 73 65 20 4e 45 54 4d 45 |.. ca|se NETME|
|000043c0| 4d 5f 4f 42 4a 5f 4b 45 | 52 4e 45 4c 5f 57 52 49 |M_OBJ_KE|RNEL_WRI|
|000043d0| 54 45 3a 0a 0a 09 09 2f | 2a 0a 09 09 20 2a 09 4b |TE:..../|*... *.K|
|000043e0| 65 72 6e 65 6c 20 64 6f | 65 73 20 6e 6f 74 20 68 |ernel do|es not h|
|000043f0| 61 76 65 20 61 20 63 6f | 70 79 2e 20 20 47 69 76 |ave a co|py. Giv|
|00004400| 65 20 69 74 20 6f 6e 65 | 2e 0a 09 09 20 2a 09 49 |e it one|.... *.I|
|00004410| 66 20 77 72 69 74 65 20 | 70 65 72 6d 69 73 73 69 |f write |permissi|
|00004420| 6f 6e 20 77 61 73 6e 27 | 74 20 72 65 71 75 65 73 |on wasn'|t reques|
|00004430| 74 65 64 2c 20 64 6f 6e | 27 74 0a 09 09 20 2a 09 |ted, don|'t... *.|
|00004440| 67 72 61 6e 74 20 69 74 | 2e 0a 09 09 20 2a 2f 0a |grant it|.... */.|
|00004450| 09 09 69 66 20 28 61 63 | 63 65 73 73 20 26 20 56 |..if (ac|cess & V|
|00004460| 4d 5f 50 52 4f 54 5f 57 | 52 49 54 45 29 20 7b 0a |M_PROT_W|RITE) {.|
|00004470| 09 09 09 6c 6f 63 6b 5f | 76 61 6c 75 65 20 3d 20 |...lock_|value = |
|00004480| 56 4d 5f 50 52 4f 54 5f | 4e 4f 4e 45 3b 0a 09 09 |VM_PROT_|NONE;...|
|00004490| 09 6d 79 5f 6f 62 6a 2d | 3e 73 74 61 74 65 20 3d |.my_obj-|>state =|
|000044a0| 20 4e 45 54 4d 45 4d 5f | 4f 42 4a 5f 4b 45 52 4e | NETMEM_|OBJ_KERN|
|000044b0| 45 4c 5f 57 52 49 54 45 | 3b 0a 09 09 7d 0a 09 09 |EL_WRITE|;...}...|
|000044c0| 65 6c 73 65 20 7b 0a 09 | 09 09 6c 6f 63 6b 5f 76 |else {..|..lock_v|
|000044d0| 61 6c 75 65 20 3d 20 56 | 4d 5f 50 52 4f 54 5f 57 |alue = V|M_PROT_W|
|000044e0| 52 49 54 45 3b 0a 09 09 | 09 6d 79 5f 6f 62 6a 2d |RITE;...|.my_obj-|
|000044f0| 3e 73 74 61 74 65 20 3d | 20 4e 45 54 4d 45 4d 5f |>state =| NETMEM_|
|00004500| 4f 42 4a 5f 52 45 41 44 | 3b 0a 09 09 7d 09 09 09 |OBJ_READ|;...}...|
|00004510| 0a 09 09 70 72 69 6e 74 | 66 28 22 64 61 74 61 5f |...print|f("data_|
|00004520| 73 75 70 70 6c 79 3a 20 | 6c 6f 63 6b 20 25 64 5c |supply: |lock %d\|
|00004530| 6e 22 2c 20 6c 6f 63 6b | 5f 76 61 6c 75 65 29 3b |n", lock|_value);|
|00004540| 0a 09 09 28 76 6f 69 64 | 29 20 6d 65 6d 6f 72 79 |...(void|) memory|
|00004550| 5f 6f 62 6a 65 63 74 5f | 64 61 74 61 5f 73 75 70 |_object_|data_sup|
|00004560| 70 6c 79 28 63 6f 6e 74 | 72 6f 6c 2c 20 6f 66 66 |ply(cont|rol, off|
|00004570| 73 65 74 2c 0a 09 09 09 | 09 09 20 20 20 20 6d 79 |set,....|.. my|
|00004580| 5f 6f 62 6a 2d 3e 64 61 | 74 61 2c 20 6c 65 6e 67 |_obj->da|ta, leng|
|00004590| 74 68 2c 20 46 41 4c 53 | 45 2c 0a 09 09 09 09 09 |th, FALS|E,......|
|000045a0| 20 20 20 20 6c 6f 63 6b | 5f 76 61 6c 75 65 2c 20 | lock|_value, |
|000045b0| 46 41 4c 53 45 2c 0a 09 | 09 09 09 09 20 20 20 20 |FALSE,..|.... |
|000045c0| 4d 41 43 48 5f 50 4f 52 | 54 5f 4e 55 4c 4c 29 3b |MACH_POR|T_NULL);|
|000045d0| 0a 09 09 62 72 65 61 6b | 3b 0a 0a 09 20 20 20 20 |...break|;... |
|000045e0| 63 61 73 65 20 4e 45 54 | 4d 45 4d 5f 4f 42 4a 5f |case NET|MEM_OBJ_|
|000045f0| 43 4c 45 41 4e 49 4e 47 | 3a 0a 09 20 20 20 20 63 |CLEANING|:.. c|
|00004600| 61 73 65 20 4e 45 54 4d | 45 4d 5f 4f 42 4a 5f 46 |ase NETM|EM_OBJ_F|
|00004610| 4c 55 53 48 49 4e 47 3a | 0a 0a 09 09 2f 2a 0a 09 |LUSHING:|..../*..|
|00004620| 09 20 2a 09 54 68 69 73 | 20 77 69 6c 6c 20 62 65 |. *.This| will be|
|00004630| 20 68 61 6e 64 6c 65 64 | 20 77 68 65 6e 20 74 68 | handled| when th|
|00004640| 65 20 63 6c 65 61 6e 69 | 6e 67 20 6f 72 20 66 6c |e cleani|ng or fl|
|00004650| 75 73 68 69 6e 67 0a 09 | 09 20 2a 09 63 6f 6d 70 |ushing..|. *.comp|
|00004660| 6c 65 74 65 73 2e 0a 09 | 09 20 2a 2f 0a 09 09 6d |letes...|. */...m|
|00004670| 79 5f 6f 62 6a 2d 3e 70 | 65 6e 64 69 6e 67 5f 6b |y_obj->p|ending_k|
|00004680| 65 72 6e 65 6c 5f 61 63 | 63 65 73 73 20 7c 3d 20 |ernel_ac|cess |= |
|00004690| 61 63 63 65 73 73 3b 0a | 09 09 6d 79 5f 6f 62 6a |access;.|..my_obj|
|000046a0| 2d 3e 70 65 6e 64 69 6e | 67 5f 6b 65 72 6e 65 6c |->pendin|g_kernel|
|000046b0| 5f 74 79 70 65 20 3d 20 | 50 45 4e 44 49 4e 47 5f |_type = |PENDING_|
|000046c0| 54 59 50 45 5f 44 41 54 | 41 3b 0a 09 09 62 72 65 |TYPE_DAT|A;...bre|
|000046d0| 61 6b 3b 0a 0a 09 20 20 | 20 20 64 65 66 61 75 6c |ak;... | defaul|
|000046e0| 74 3a 0a 09 09 70 72 69 | 6e 74 66 28 22 42 61 64 |t:...pri|ntf("Bad|
|000046f0| 20 73 74 61 74 65 20 25 | 64 5c 6e 22 2c 20 6d 79 | state %|d\n", my|
|00004700| 5f 6f 62 6a 2d 3e 73 74 | 61 74 65 29 3b 0a 09 09 |_obj->st|ate);...|
|00004710| 62 72 65 61 6b 3b 0a 09 | 7d 0a 0a 09 2f 2a 0a 09 |break;..|}.../*..|
|00004720| 20 2a 09 47 65 74 20 72 | 69 64 20 6f 66 20 73 65 | *.Get r|id of se|
|00004730| 6e 64 20 72 69 67 68 74 | 20 6f 6e 20 63 6f 6e 74 |nd right| on cont|
|00004740| 72 6f 6c 20 70 6f 72 74 | 2e 0a 09 20 2a 2f 0a 09 |rol port|... */..|
|00004750| 6e 65 74 6d 65 6d 5f 63 | 6f 6e 74 72 6f 6c 5f 63 |netmem_c|ontrol_c|
|00004760| 6c 65 61 6e 75 70 28 6d | 79 5f 6f 62 6a 29 3b 0a |leanup(m|y_obj);.|
|00004770| 09 72 65 74 75 72 6e 28 | 4b 45 52 4e 5f 53 55 43 |.return(|KERN_SUC|
|00004780| 43 45 53 53 29 3b 0a 7d | 0a 0c 0a 0a 2f 2a 0a 20 |CESS);.}|..../*. |
|00004790| 2a 20 20 20 20 20 20 55 | 6e 6c 6f 63 6b 20 72 65 |* U|nlock re|
|000047a0| 71 75 65 73 74 2e 20 20 | 54 68 65 20 6b 65 72 6e |quest. |The kern|
|000047b0| 65 6c 20 68 61 73 20 61 | 20 72 65 61 64 20 6f 6e |el has a| read on|
|000047c0| 6c 79 20 70 61 67 65 20 | 61 6e 64 20 77 61 6e 74 |ly page |and want|
|000047d0| 73 20 74 6f 20 77 72 69 | 74 65 2e 0a 20 2a 2f 0a |s to wri|te.. */.|
|000047e0| 6b 65 72 6e 5f 72 65 74 | 75 72 6e 5f 74 0a 6d 65 |kern_ret|urn_t.me|
|000047f0| 6d 6f 72 79 5f 6f 62 6a | 65 63 74 5f 64 61 74 61 |mory_obj|ect_data|
|00004800| 5f 75 6e 6c 6f 63 6b 28 | 6f 62 6a 65 63 74 2c 20 |_unlock(|object, |
|00004810| 63 6f 6e 74 72 6f 6c 2c | 20 6f 66 66 73 65 74 2c |control,| offset,|
|00004820| 20 6c 65 6e 67 74 68 2c | 20 61 63 63 65 73 73 29 | length,| access)|
|00004830| 0a 6d 65 6d 6f 72 79 5f | 6f 62 6a 65 63 74 5f 74 |.memory_|object_t|
|00004840| 20 09 6f 62 6a 65 63 74 | 3b 0a 6d 65 6d 6f 72 79 | .object|;.memory|
|00004850| 5f 6f 62 6a 65 63 74 5f | 63 6f 6e 74 72 6f 6c 5f |_object_|control_|
|00004860| 74 09 63 6f 6e 74 72 6f | 6c 3b 0a 76 6d 5f 61 64 |t.contro|l;.vm_ad|
|00004870| 64 72 65 73 73 5f 74 09 | 09 6f 66 66 73 65 74 3b |dress_t.|.offset;|
|00004880| 0a 76 6d 5f 73 69 7a 65 | 5f 74 09 09 6c 65 6e 67 |.vm_size|_t..leng|
|00004890| 74 68 3b 0a 76 6d 5f 70 | 72 6f 74 5f 74 09 09 61 |th;.vm_p|rot_t..a|
|000048a0| 63 63 65 73 73 3b 0a 7b | 0a 09 6e 65 74 6d 65 6d |ccess;.{|..netmem|
|000048b0| 5f 6f 62 6a 5f 74 09 6d | 79 5f 6f 62 6a 3b 0a 09 |_obj_t.m|y_obj;..|
|000048c0| 76 6d 5f 70 72 6f 74 5f | 74 09 6c 6f 63 6b 5f 76 |vm_prot_|t.lock_v|
|000048d0| 61 6c 75 65 3b 0a 0a 09 | 70 72 69 6e 74 66 28 22 |alue;...|printf("|
|000048e0| 64 61 74 61 5f 75 6e 6c | 6f 63 6b 20 25 64 5c 6e |data_unl|ock %d\n|
|000048f0| 22 2c 20 61 63 63 65 73 | 73 29 3b 0a 0a 09 2f 2a |", acces|s);.../*|
|00004900| 0a 09 20 2a 09 43 68 65 | 63 6b 20 74 68 61 74 20 |.. *.Che|ck that |
|00004910| 69 74 27 73 20 6f 75 72 | 20 6f 62 6a 65 63 74 2e |it's our| object.|
|00004920| 0a 09 20 2a 2f 0a 09 69 | 66 20 28 28 6d 79 5f 6f |.. */..i|f ((my_o|
|00004930| 62 6a 20 3d 20 6e 65 74 | 6d 65 6d 5f 6c 6f 6f 6b |bj = net|mem_look|
|00004940| 75 70 28 6f 62 6a 65 63 | 74 29 29 20 3d 3d 20 4e |up(objec|t)) == N|
|00004950| 45 54 4d 45 4d 5f 4f 42 | 4a 5f 4e 55 4c 4c 29 0a |ETMEM_OB|J_NULL).|
|00004960| 09 09 72 65 74 75 72 6e | 28 4b 45 52 4e 5f 46 41 |..return|(KERN_FA|
|00004970| 49 4c 55 52 45 29 3b 0a | 0a 09 2f 2a 0a 09 20 2a |ILURE);.|../*.. *|
|00004980| 09 43 68 65 63 6b 20 6f | 66 66 73 65 74 20 61 6e |.Check o|ffset an|
|00004990| 64 20 6c 65 6e 67 74 68 | 20 61 72 67 75 6d 65 6e |d length| argumen|
|000049a0| 74 73 2e 0a 09 20 2a 2f | 0a 09 69 66 20 28 6f 66 |ts... */|..if (of|
|000049b0| 66 73 65 74 20 3e 20 30 | 20 7c 7c 20 6f 66 66 73 |fset > 0| || offs|
|000049c0| 65 74 20 2b 20 6c 65 6e | 67 74 68 20 3e 20 76 6d |et + len|gth > vm|
|000049d0| 5f 70 61 67 65 5f 73 69 | 7a 65 29 20 7b 0a 09 09 |_page_si|ze) {...|
|000049e0| 72 65 74 75 72 6e 28 4b | 45 52 4e 5f 46 41 49 4c |return(K|ERN_FAIL|
|000049f0| 55 52 45 29 3b 0a 09 7d | 0a 0a 09 2f 2a 0a 09 20 |URE);..}|.../*.. |
|00004a00| 2a 09 43 61 6e 20 68 61 | 6e 64 6c 65 20 69 6e 20 |*.Can ha|ndle in |
|00004a10| 72 65 61 64 20 73 74 61 | 74 65 2c 20 6f 74 68 65 |read sta|te, othe|
|00004a20| 72 77 69 73 65 20 6d 61 | 72 6b 20 61 73 20 70 65 |rwise ma|rk as pe|
|00004a30| 6e 64 69 6e 67 2e 0a 09 | 20 2a 2f 0a 09 69 66 20 |nding...| */..if |
|00004a40| 28 6d 79 5f 6f 62 6a 2d | 3e 73 74 61 74 65 20 3d |(my_obj-|>state =|
|00004a50| 3d 20 4e 45 54 4d 45 4d | 5f 4f 42 4a 5f 52 45 41 |= NETMEM|_OBJ_REA|
|00004a60| 44 29 20 7b 0a 09 09 2f | 2a 0a 09 09 20 2a 09 44 |D) {.../|*... *.D|
|00004a70| 72 6f 70 20 74 68 65 20 | 72 65 61 64 20 70 61 67 |rop the |read pag|
|00004a80| 65 20 6c 6f 63 6b 2e 0a | 09 09 20 2a 2f 0a 09 09 |e lock..|.. */...|
|00004a90| 70 72 69 6e 74 66 28 22 | 6c 6f 63 6b 5f 72 65 71 |printf("|lock_req|
|00004aa0| 75 65 73 74 3a 20 6c 6f | 63 6b 20 25 64 5c 6e 22 |uest: lo|ck %d\n"|
|00004ab0| 2c 20 56 4d 5f 50 52 4f | 54 5f 4e 4f 4e 45 29 3b |, VM_PRO|T_NONE);|
|00004ac0| 0a 09 09 28 76 6f 69 64 | 29 20 6d 65 6d 6f 72 79 |...(void|) memory|
|00004ad0| 5f 6f 62 6a 65 63 74 5f | 6c 6f 63 6b 5f 72 65 71 |_object_|lock_req|
|00004ae0| 75 65 73 74 28 63 6f 6e | 74 72 6f 6c 2c 20 6f 66 |uest(con|trol, of|
|00004af0| 66 73 65 74 2c 20 6c 65 | 6e 67 74 68 2c 0a 09 09 |fset, le|ngth,...|
|00004b00| 20 20 20 20 20 20 20 20 | 20 20 20 09 09 20 20 20 | | .. |
|00004b10| 4d 45 4d 4f 52 59 5f 4f | 42 4a 45 43 54 5f 52 45 |MEMORY_O|BJECT_RE|
|00004b20| 54 55 52 4e 5f 4e 4f 4e | 45 2c 0a 09 09 09 09 09 |TURN_NON|E,......|
|00004b30| 20 20 20 46 41 4c 53 45 | 2c 20 56 4d 5f 50 52 4f | FALSE|, VM_PRO|
|00004b40| 54 5f 4e 4f 4e 45 2c 0a | 09 09 09 09 09 20 20 20 |T_NONE,.|..... |
|00004b50| 4d 41 43 48 5f 50 4f 52 | 54 5f 4e 55 4c 4c 29 3b |MACH_POR|T_NULL);|
|00004b60| 0a 09 09 6d 79 5f 6f 62 | 6a 2d 3e 73 74 61 74 65 |...my_ob|j->state|
|00004b70| 20 3d 20 4e 45 54 4d 45 | 4d 5f 4f 42 4a 5f 4b 45 | = NETME|M_OBJ_KE|
|00004b80| 52 4e 45 4c 5f 57 52 49 | 54 45 3b 0a 09 7d 0a 09 |RNEL_WRI|TE;..}..|
|00004b90| 65 6c 73 65 20 69 66 20 | 28 6d 79 5f 6f 62 6a 2d |else if |(my_obj-|
|00004ba0| 3e 73 74 61 74 65 20 3d | 3d 20 4e 45 54 4d 45 4d |>state =|= NETMEM|
|00004bb0| 5f 4f 42 4a 5f 43 4c 45 | 41 4e 49 4e 47 20 7c 7c |_OBJ_CLE|ANING |||
|00004bc0| 0a 09 09 20 6d 79 5f 6f | 62 6a 2d 3e 73 74 61 74 |... my_o|bj->stat|
|00004bd0| 65 20 3d 3d 20 4e 45 54 | 4d 45 4d 5f 4f 42 4a 5f |e == NET|MEM_OBJ_|
|00004be0| 46 4c 55 53 48 49 4e 47 | 29 20 7b 0a 0a 09 20 20 |FLUSHING|) {... |
|00004bf0| 09 6d 79 5f 6f 62 6a 2d | 3e 70 65 6e 64 69 6e 67 |.my_obj-|>pending|
|00004c00| 5f 6b 65 72 6e 65 6c 5f | 61 63 63 65 73 73 20 7c |_kernel_|access ||
|00004c10| 3d 20 61 63 63 65 73 73 | 3b 0a 09 09 6d 79 5f 6f |= access|;...my_o|
|00004c20| 62 6a 2d 3e 70 65 6e 64 | 69 6e 67 5f 6b 65 72 6e |bj->pend|ing_kern|
|00004c30| 65 6c 5f 74 79 70 65 20 | 3d 20 50 45 4e 44 49 4e |el_type |= PENDIN|
|00004c40| 47 5f 54 59 50 45 5f 4c | 4f 43 4b 3b 0a 09 7d 0a |G_TYPE_L|OCK;..}.|
|00004c50| 09 65 6c 73 65 20 7b 0a | 09 09 70 72 69 6e 74 66 |.else {.|..printf|
|00004c60| 28 22 55 6e 65 78 70 65 | 63 74 65 64 20 73 74 61 |("Unexpe|cted sta|
|00004c70| 74 65 20 25 64 5c 6e 22 | 2c 20 6d 79 5f 6f 62 6a |te %d\n"|, my_obj|
|00004c80| 2d 3e 73 74 61 74 65 29 | 3b 0a 09 7d 0a 0a 09 2f |->state)|;..}.../|
|00004c90| 2a 0a 09 20 2a 09 47 65 | 74 20 72 69 64 20 6f 66 |*.. *.Ge|t rid of|
|00004ca0| 20 73 65 6e 64 20 72 69 | 67 68 74 20 6f 6e 20 63 | send ri|ght on c|
|00004cb0| 6f 6e 74 72 6f 6c 20 70 | 6f 72 74 2e 0a 09 20 2a |ontrol p|ort... *|
|00004cc0| 2f 0a 09 6e 65 74 6d 65 | 6d 5f 63 6f 6e 74 72 6f |/..netme|m_contro|
|00004cd0| 6c 5f 63 6c 65 61 6e 75 | 70 28 6d 79 5f 6f 62 6a |l_cleanu|p(my_obj|
|00004ce0| 29 3b 0a 09 72 65 74 75 | 72 6e 28 4b 45 52 4e 5f |);..retu|rn(KERN_|
|00004cf0| 53 55 43 43 45 53 53 29 | 3b 09 0a 7d 0a 0c 0a 0a |SUCCESS)|;..}....|
|00004d00| 2f 2a 0a 20 2a 09 50 61 | 67 65 6f 75 74 0a 20 2a |/*. *.Pa|geout. *|
|00004d10| 2f 0a 6d 65 6d 6f 72 79 | 5f 6f 62 6a 65 63 74 5f |/.memory|_object_|
|00004d20| 64 61 74 61 5f 72 65 74 | 75 72 6e 28 6f 62 6a 65 |data_ret|urn(obje|
|00004d30| 63 74 2c 20 63 6f 6e 74 | 72 6f 6c 2c 20 6f 66 66 |ct, cont|rol, off|
|00004d40| 73 65 74 2c 20 64 61 74 | 61 2c 20 63 6f 75 6e 74 |set, dat|a, count|
|00004d50| 2c 0a 09 09 09 20 20 64 | 69 72 74 79 2c 20 6b 65 |,.... d|irty, ke|
|00004d60| 72 6e 65 6c 5f 63 6f 70 | 79 29 0a 6d 65 6d 6f 72 |rnel_cop|y).memor|
|00004d70| 79 5f 6f 62 6a 65 63 74 | 5f 74 20 09 6f 62 6a 65 |y_object|_t .obje|
|00004d80| 63 74 3b 0a 6d 65 6d 6f | 72 79 5f 6f 62 6a 65 63 |ct;.memo|ry_objec|
|00004d90| 74 5f 63 6f 6e 74 72 6f | 6c 5f 74 09 63 6f 6e 74 |t_contro|l_t.cont|
|00004da0| 72 6f 6c 3b 0a 76 6d 5f | 61 64 64 72 65 73 73 5f |rol;.vm_|address_|
|00004db0| 74 09 09 6f 66 66 73 65 | 74 3b 0a 70 6f 69 6e 74 |t..offse|t;.point|
|00004dc0| 65 72 5f 74 09 09 64 61 | 74 61 3b 0a 62 6f 6f 6c |er_t..da|ta;.bool|
|00004dd0| 65 61 6e 5f 74 09 09 64 | 69 72 74 79 3b 0a 62 6f |ean_t..d|irty;.bo|
|00004de0| 6f 6c 65 61 6e 5f 74 09 | 09 6b 65 72 6e 65 6c 5f |olean_t.|.kernel_|
|00004df0| 63 6f 70 79 3b 0a 7b 0a | 09 6e 65 74 6d 65 6d 5f |copy;.{.|.netmem_|
|00004e00| 6f 62 6a 5f 74 09 6d 79 | 5f 6f 62 6a 3b 0a 0a 09 |obj_t.my|_obj;...|
|00004e10| 70 72 69 6e 74 66 28 22 | 64 61 74 61 5f 72 65 74 |printf("|data_ret|
|00004e20| 75 72 6e 5c 6e 22 29 3b | 0a 0a 09 2f 2a 0a 09 20 |urn\n");|.../*.. |
|00004e30| 2a 09 43 68 65 63 6b 20 | 74 68 61 74 20 69 74 27 |*.Check |that it'|
|00004e40| 73 20 6f 75 72 20 6f 62 | 6a 65 63 74 2e 0a 09 20 |s our ob|ject... |
|00004e50| 2a 2f 0a 09 69 66 20 28 | 28 6d 79 5f 6f 62 6a 20 |*/..if (|(my_obj |
|00004e60| 3d 20 6e 65 74 6d 65 6d | 5f 6c 6f 6f 6b 75 70 28 |= netmem|_lookup(|
|00004e70| 6f 62 6a 65 63 74 29 29 | 20 3d 3d 20 4e 45 54 4d |object))| == NETM|
|00004e80| 45 4d 5f 4f 42 4a 5f 4e | 55 4c 4c 29 0a 09 09 72 |EM_OBJ_N|ULL)...r|
|00004e90| 65 74 75 72 6e 28 4b 45 | 52 4e 5f 46 41 49 4c 55 |eturn(KE|RN_FAILU|
|00004ea0| 52 45 29 3b 0a 0a 09 2f | 2a 0a 09 20 2a 09 43 68 |RE);.../|*.. *.Ch|
|00004eb0| 65 63 6b 20 6f 66 66 73 | 65 74 20 61 6e 64 20 6c |eck offs|et and l|
|00004ec0| 65 6e 67 74 68 20 61 72 | 67 75 6d 65 6e 74 73 2e |ength ar|guments.|
|00004ed0| 20 20 46 61 69 6c 75 72 | 65 20 72 65 74 75 72 6e | Failur|e return|
|00004ee0| 0a 09 20 2a 09 63 61 75 | 73 65 73 20 6d 61 63 68 |.. *.cau|ses mach|
|00004ef0| 5f 6d 73 67 5f 73 65 72 | 76 65 72 20 74 6f 20 64 |_msg_ser|ver to d|
|00004f00| 65 61 6c 6c 6f 63 61 74 | 65 20 64 61 74 61 20 66 |eallocat|e data f|
|00004f10| 6f 72 20 75 73 2e 0a 09 | 20 2a 2f 0a 09 69 66 20 |or us...| */..if |
|00004f20| 28 6f 66 66 73 65 74 20 | 3e 20 30 20 7c 7c 20 6f |(offset |> 0 || o|
|00004f30| 66 66 73 65 74 20 2b 20 | 63 6f 75 6e 74 20 3e 20 |ffset + |count > |
|00004f40| 76 6d 5f 70 61 67 65 5f | 73 69 7a 65 29 20 7b 0a |vm_page_|size) {.|
|00004f50| 09 09 70 72 69 6e 74 66 | 28 22 77 72 6f 6e 67 20 |..printf|("wrong |
|00004f60| 64 61 74 61 5c 6e 22 29 | 3b 0a 09 09 72 65 74 75 |data\n")|;...retu|
|00004f70| 72 6e 28 4b 45 52 4e 5f | 46 41 49 4c 55 52 45 29 |rn(KERN_|FAILURE)|
|00004f80| 3b 0a 09 7d 0a 0a 09 2f | 2a 0a 09 20 2a 09 48 61 |;..}.../|*.. *.Ha|
|00004f90| 6e 64 6c 65 20 74 68 65 | 20 77 72 69 74 65 2e 20 |ndle the| write. |
|00004fa0| 20 53 77 61 70 20 74 68 | 65 20 64 61 74 61 20 66 | Swap th|e data f|
|00004fb0| 6f 72 20 6f 75 72 20 6f | 6c 64 20 63 6f 70 79 2e |or our o|ld copy.|
|00004fc0| 0a 09 20 2a 2f 0a 09 28 | 76 6f 69 64 29 20 76 6d |.. */..(|void) vm|
|00004fd0| 5f 64 65 61 6c 6c 6f 63 | 61 74 65 28 6d 61 63 68 |_dealloc|ate(mach|
|00004fe0| 5f 74 61 73 6b 5f 73 65 | 6c 66 28 29 2c 20 6d 79 |_task_se|lf(), my|
|00004ff0| 5f 6f 62 6a 2d 3e 64 61 | 74 61 2c 20 76 6d 5f 70 |_obj->da|ta, vm_p|
|00005000| 61 67 65 5f 73 69 7a 65 | 29 3b 0a 09 6d 79 5f 6f |age_size|);..my_o|
|00005010| 62 6a 2d 3e 64 61 74 61 | 20 3d 20 64 61 74 61 3b |bj->data| = data;|
|00005020| 0a 0a 09 2f 2a 0a 09 20 | 2a 09 45 69 74 68 65 72 |.../*.. |*.Either|
|00005030| 20 69 6e 20 6b 65 72 6e | 65 6c 20 77 72 69 74 65 | in kern|el write|
|00005040| 20 73 74 61 74 65 2c 20 | 6f 72 20 6d 69 64 64 6c | state, |or middl|
|00005050| 65 20 6f 66 20 61 20 63 | 6c 65 61 6e 20 6f 72 20 |e of a c|lean or |
|00005060| 66 6c 75 73 68 2e 0a 09 | 20 2a 09 49 6e 20 6c 61 |flush...| *.In la|
|00005070| 74 74 65 72 20 63 61 73 | 65 2c 20 73 74 61 74 65 |tter cas|e, state|
|00005080| 20 63 68 61 6e 67 65 73 | 20 77 68 65 6e 20 74 68 | changes| when th|
|00005090| 61 74 20 6f 70 65 72 61 | 74 69 6f 6e 20 63 6f 6d |at opera|tion com|
|000050a0| 70 6c 65 74 65 73 2e 0a | 09 20 2a 2f 0a 09 69 66 |pletes..|. */..if|
|000050b0| 20 28 6d 79 5f 6f 62 6a | 2d 3e 73 74 61 74 65 20 | (my_obj|->state |
|000050c0| 3d 3d 20 4e 45 54 4d 45 | 4d 5f 4f 42 4a 5f 4b 45 |== NETME|M_OBJ_KE|
|000050d0| 52 4e 45 4c 5f 57 52 49 | 54 45 29 20 7b 0a 09 09 |RNEL_WRI|TE) {...|
|000050e0| 6d 79 5f 6f 62 6a 2d 3e | 73 74 61 74 65 20 3d 20 |my_obj->|state = |
|000050f0| 4e 45 54 4d 45 4d 5f 4f | 42 4a 5f 53 45 52 56 45 |NETMEM_O|BJ_SERVE|
|00005100| 52 5f 57 52 49 54 45 3b | 0a 09 7d 0a 09 65 6c 73 |R_WRITE;|..}..els|
|00005110| 65 20 69 66 20 28 6d 79 | 5f 6f 62 6a 2d 3e 73 74 |e if (my|_obj->st|
|00005120| 61 74 65 20 21 3d 20 4e | 45 54 4d 45 4d 5f 4f 42 |ate != N|ETMEM_OB|
|00005130| 4a 5f 43 4c 45 41 4e 49 | 4e 47 20 26 26 0a 09 09 |J_CLEANI|NG &&...|
|00005140| 20 6d 79 5f 6f 62 6a 2d | 3e 73 74 61 74 65 20 21 | my_obj-|>state !|
|00005150| 3d 20 4e 45 54 4d 45 4d | 5f 4f 42 4a 5f 46 4c 55 |= NETMEM|_OBJ_FLU|
|00005160| 53 48 49 4e 47 29 20 7b | 0a 09 09 09 70 72 69 6e |SHING) {|....prin|
|00005170| 74 66 28 22 55 6e 65 78 | 70 65 63 74 65 64 20 73 |tf("Unex|pected s|
|00005180| 74 61 74 65 20 25 64 5c | 6e 22 2c 20 6d 79 5f 6f |tate %d\|n", my_o|
|00005190| 62 6a 2d 3e 73 74 61 74 | 65 29 3b 0a 09 7d 0a 0a |bj->stat|e);..}..|
|000051a0| 09 2f 2a 0a 09 20 2a 09 | 47 65 74 20 72 69 64 20 |./*.. *.|Get rid |
|000051b0| 6f 66 20 73 65 6e 64 20 | 72 69 67 68 74 20 6f 6e |of send |right on|
|000051c0| 20 63 6f 6e 74 72 6f 6c | 20 70 6f 72 74 2e 0a 09 | control| port...|
|000051d0| 20 2a 2f 0a 09 6e 65 74 | 6d 65 6d 5f 63 6f 6e 74 | */..net|mem_cont|
|000051e0| 72 6f 6c 5f 63 6c 65 61 | 6e 75 70 28 6d 79 5f 6f |rol_clea|nup(my_o|
|000051f0| 62 6a 29 3b 0a 09 72 65 | 74 75 72 6e 28 4b 45 52 |bj);..re|turn(KER|
|00005200| 4e 5f 53 55 43 43 45 53 | 53 29 3b 0a 7d 09 0a 0c |N_SUCCES|S);.}...|
|00005210| 0a 0a 2f 2a 0a 20 2a 09 | 43 6f 6d 70 6c 65 74 69 |../*. *.|Completi|
|00005220| 6f 6e 20 6f 66 20 61 20 | 63 6c 65 61 6e 20 6f 72 |on of a |clean or|
|00005230| 20 66 6c 75 73 68 20 6f | 70 65 72 61 74 69 6f 6e | flush o|peration|
|00005240| 2e 0a 20 2a 2f 0a 6b 65 | 72 6e 5f 72 65 74 75 72 |.. */.ke|rn_retur|
|00005250| 6e 5f 74 0a 6d 65 6d 6f | 72 79 5f 6f 62 6a 65 63 |n_t.memo|ry_objec|
|00005260| 74 5f 6c 6f 63 6b 5f 63 | 6f 6d 70 6c 65 74 65 64 |t_lock_c|ompleted|
|00005270| 28 6f 62 6a 65 63 74 2c | 20 63 6f 6e 74 72 6f 6c |(object,| control|
|00005280| 2c 20 6f 66 66 73 65 74 | 2c 20 6c 65 6e 67 74 68 |, offset|, length|
|00005290| 29 0a 6d 65 6d 6f 72 79 | 5f 6f 62 6a 65 63 74 5f |).memory|_object_|
|000052a0| 74 20 09 6f 62 6a 65 63 | 74 3b 0a 6d 65 6d 6f 72 |t .objec|t;.memor|
|000052b0| 79 5f 6f 62 6a 65 63 74 | 5f 63 6f 6e 74 72 6f 6c |y_object|_control|
|000052c0| 5f 74 09 63 6f 6e 74 72 | 6f 6c 3b 0a 76 6d 5f 61 |_t.contr|ol;.vm_a|
|000052d0| 64 64 72 65 73 73 5f 74 | 09 09 6f 66 66 73 65 74 |ddress_t|..offset|
|000052e0| 3b 0a 76 6d 5f 73 69 7a | 65 5f 74 09 09 6c 65 6e |;.vm_siz|e_t..len|
|000052f0| 67 74 68 3b 0a 7b 0a 09 | 6e 65 74 6d 65 6d 5f 6f |gth;.{..|netmem_o|
|00005300| 62 6a 5f 74 09 6d 79 5f | 6f 62 6a 3b 0a 09 76 6d |bj_t.my_|obj;..vm|
|00005310| 5f 70 72 6f 74 5f 74 09 | 6c 6f 63 6b 5f 76 61 6c |_prot_t.|lock_val|
|00005320| 75 65 3b 0a 0a 20 20 09 | 70 72 69 6e 74 66 28 22 |ue;.. .|printf("|
|00005330| 6c 6f 63 6b 5f 63 6f 6d | 70 6c 65 74 65 64 5c 6e |lock_com|pleted\n|
|00005340| 22 29 3b 0a 0a 09 2f 2a | 0a 09 20 2a 09 43 68 65 |");.../*|.. *.Che|
|00005350| 63 6b 20 74 68 61 74 20 | 69 74 27 73 20 6f 75 72 |ck that |it's our|
|00005360| 20 6f 62 6a 65 63 74 2e | 0a 09 20 2a 2f 0a 09 69 | object.|.. */..i|
|00005370| 66 20 28 28 6d 79 5f 6f | 62 6a 20 3d 20 6e 65 74 |f ((my_o|bj = net|
|00005380| 6d 65 6d 5f 6c 6f 6f 6b | 75 70 28 6f 62 6a 65 63 |mem_look|up(objec|
|00005390| 74 29 29 20 3d 3d 20 4e | 45 54 4d 45 4d 5f 4f 42 |t)) == N|ETMEM_OB|
|000053a0| 4a 5f 4e 55 4c 4c 29 0a | 09 09 72 65 74 75 72 6e |J_NULL).|..return|
|000053b0| 28 4b 45 52 4e 5f 46 41 | 49 4c 55 52 45 29 3b 0a |(KERN_FA|ILURE);.|
|000053c0| 0a 09 2f 2a 0a 09 20 2a | 09 43 68 65 63 6b 20 6f |../*.. *|.Check o|
|000053d0| 66 66 73 65 74 20 61 6e | 64 20 6c 65 6e 67 74 68 |ffset an|d length|
|000053e0| 20 61 72 67 75 6d 65 6e | 74 73 2e 0a 09 20 2a 2f | argumen|ts... */|
|000053f0| 0a 09 69 66 20 28 6f 66 | 66 73 65 74 20 3e 20 30 |..if (of|fset > 0|
|00005400| 20 7c 7c 20 6f 66 66 73 | 65 74 20 2b 20 6c 65 6e | || offs|et + len|
|00005410| 67 74 68 20 3e 20 76 6d | 5f 70 61 67 65 5f 73 69 |gth > vm|_page_si|
|00005420| 7a 65 29 20 7b 0a 09 09 | 72 65 74 75 72 6e 28 4b |ze) {...|return(K|
|00005430| 45 52 4e 5f 46 41 49 4c | 55 52 45 29 3b 0a 09 7d |ERN_FAIL|URE);..}|
|00005440| 0a 09 0a 09 2f 2a 0a 09 | 20 2a 09 41 63 74 69 6f |..../*..| *.Actio|
|00005450| 6e 20 64 65 70 65 6e 64 | 73 20 6f 6e 20 77 68 61 |n depend|s on wha|
|00005460| 74 20 73 74 61 74 65 20 | 77 65 20 77 65 72 65 20 |t state |we were |
|00005470| 69 6e 2c 20 62 75 74 20 | 63 6c 65 61 6e 69 6e 67 |in, but |cleaning|
|00005480| 0a 09 20 2a 09 61 6e 64 | 20 66 6c 75 73 68 69 6e |.. *.and| flushin|
|00005490| 67 20 61 72 65 20 73 69 | 6d 69 6c 61 72 2e 0a 09 |g are si|milar...|
|000054a0| 20 2a 2f 0a 09 69 66 20 | 28 6d 79 5f 6f 62 6a 2d | */..if |(my_obj-|
|000054b0| 3e 73 74 61 74 65 20 3d | 3d 20 4e 45 54 4d 45 4d |>state =|= NETMEM|
|000054c0| 5f 4f 42 4a 5f 43 4c 45 | 41 4e 49 4e 47 29 20 7b |_OBJ_CLE|ANING) {|
|000054d0| 0a 0a 09 20 20 09 2f 2a | 0a 09 09 20 2a 09 4b 65 |... ./*|... *.Ke|
|000054e0| 72 6e 65 6c 20 6d 61 79 | 20 68 61 76 65 20 72 65 |rnel may| have re|
|000054f0| 61 64 20 6f 6e 6c 79 20 | 63 6f 70 79 20 6f 66 20 |ad only |copy of |
|00005500| 70 61 67 65 2e 0a 09 09 | 20 2a 2f 0a 09 09 6d 79 |page....| */...my|
|00005510| 5f 6f 62 6a 2d 3e 73 74 | 61 74 65 20 3d 20 4e 45 |_obj->st|ate = NE|
|00005520| 54 4d 45 4d 5f 4f 42 4a | 5f 52 45 41 44 3b 0a 09 |TMEM_OBJ|_READ;..|
|00005530| 7d 0a 09 65 6c 73 65 20 | 69 66 20 28 6d 79 5f 6f |}..else |if (my_o|
|00005540| 62 6a 2d 3e 73 74 61 74 | 65 20 3d 3d 20 4e 45 54 |bj->stat|e == NET|
|00005550| 4d 45 4d 5f 4f 42 4a 5f | 46 4c 55 53 48 49 4e 47 |MEM_OBJ_|FLUSHING|
|00005560| 29 20 7b 0a 0a 09 20 20 | 09 2f 2a 0a 09 09 20 2a |) {... |./*... *|
|00005570| 09 4b 65 72 6e 65 6c 20 | 6e 6f 20 6c 6f 6e 67 65 |.Kernel |no longe|
|00005580| 72 20 68 61 73 20 70 61 | 67 65 2e 0a 09 09 20 2a |r has pa|ge.... *|
|00005590| 2f 0a 09 09 6d 79 5f 6f | 62 6a 2d 3e 73 74 61 74 |/...my_o|bj->stat|
|000055a0| 65 20 3d 20 4e 45 54 4d | 45 4d 5f 4f 42 4a 5f 53 |e = NETM|EM_OBJ_S|
|000055b0| 45 52 56 45 52 5f 57 52 | 49 54 45 3b 0a 09 09 6d |ERVER_WR|ITE;...m|
|000055c0| 79 5f 6f 62 6a 2d 3e 70 | 65 6e 64 69 6e 67 5f 6b |y_obj->p|ending_k|
|000055d0| 65 72 6e 65 6c 5f 74 79 | 70 65 20 3d 20 50 45 4e |ernel_ty|pe = PEN|
|000055e0| 44 49 4e 47 5f 54 59 50 | 45 5f 44 41 54 41 3b 0a |DING_TYP|E_DATA;.|
|000055f0| 09 7d 0a 09 65 6c 73 65 | 20 7b 0a 09 09 70 72 69 |.}..else| {...pri|
|00005600| 6e 74 66 28 22 75 6e 65 | 78 70 65 63 74 65 64 20 |ntf("une|xpected |
|00005610| 73 74 61 74 65 3a 20 25 | 64 5c 6e 22 2c 20 6d 79 |state: %|d\n", my|
|00005620| 5f 6f 62 6a 2d 3e 73 74 | 61 74 65 29 3b 0a 09 09 |_obj->st|ate);...|
|00005630| 72 65 74 75 72 6e 28 4b | 45 52 4e 5f 46 41 49 4c |return(K|ERN_FAIL|
|00005640| 55 52 45 29 3b 0a 09 7d | 0a 0a 09 2f 2a 0a 09 20 |URE);..}|.../*.. |
|00005650| 2a 09 48 61 6e 64 6c 65 | 20 70 65 6e 64 69 6e 67 |*.Handle| pending|
|00005660| 20 63 6c 69 65 6e 74 20 | 6d 65 73 73 61 67 65 20 | client |message |
|00005670| 6f 70 65 72 61 74 69 6f | 6e 73 2e 0a 09 20 2a 2f |operatio|ns... */|
|00005680| 0a 09 70 65 6e 64 69 6e | 67 5f 6f 70 5f 65 78 65 |..pendin|g_op_exe|
|00005690| 63 75 74 65 28 6d 79 5f | 6f 62 6a 29 3b 0a 0c 0a |cute(my_|obj);...|
|000056a0| 09 2f 2a 0a 09 20 2a 09 | 50 65 6e 64 69 6e 67 20 |./*.. *.|Pending |
|000056b0| 6d 65 73 73 61 67 65 20 | 77 72 69 74 65 20 74 61 |message |write ta|
|000056c0| 6b 65 73 20 70 72 69 6f | 72 69 74 79 20 28 63 6c |kes prio|rity (cl|
|000056d0| 65 61 6e 69 6e 67 20 73 | 74 61 74 65 20 6f 6e 6c |eaning s|tate onl|
|000056e0| 79 29 2e 0a 09 20 2a 2f | 0a 09 69 66 20 28 6d 79 |y)... */|..if (my|
|000056f0| 5f 6f 62 6a 2d 3e 70 65 | 6e 64 69 6e 67 5f 6f 70 |_obj->pe|nding_op|
|00005700| 5f 71 75 65 75 65 20 21 | 3d 20 50 45 4e 44 49 4e |_queue !|= PENDIN|
|00005710| 47 5f 4f 50 5f 4e 55 4c | 4c 29 20 7b 0a 0a 09 09 |G_OP_NUL|L) {....|
|00005720| 2f 2a 0a 09 09 20 2a 09 | 52 65 71 75 65 73 74 20 |/*... *.|Request |
|00005730| 6b 65 72 6e 65 6c 20 74 | 6f 20 67 69 76 65 20 75 |kernel t|o give u|
|00005740| 70 20 61 6c 6c 20 61 63 | 63 65 73 73 20 74 6f 20 |p all ac|cess to |
|00005750| 70 61 67 65 2e 0a 09 09 | 20 2a 09 41 73 6b 20 66 |page....| *.Ask f|
|00005760| 6f 72 20 61 20 72 65 70 | 6c 79 20 77 68 65 6e 20 |or a rep|ly when |
|00005770| 69 74 27 73 20 66 69 6e | 69 73 68 65 64 2e 0a 09 |it's fin|ished...|
|00005780| 09 20 2a 2f 0a 09 09 70 | 72 69 6e 74 66 28 22 6c |. */...p|rintf("l|
|00005790| 6f 63 6b 5f 72 65 71 75 | 65 73 74 3a 20 63 6c 65 |ock_requ|est: cle|
|000057a0| 61 6e 2c 20 66 6c 75 73 | 68 2c 20 6c 6f 63 6b 20 |an, flus|h, lock |
|000057b0| 25 64 5c 6e 22 2c 0a 09 | 09 20 20 20 20 20 20 20 |%d\n",..|. |
|000057c0| 56 4d 5f 50 52 4f 54 5f | 41 4c 4c 29 3b 0a 09 09 |VM_PROT_|ALL);...|
|000057d0| 28 76 6f 69 64 29 20 6d | 65 6d 6f 72 79 5f 6f 62 |(void) m|emory_ob|
|000057e0| 6a 65 63 74 5f 6c 6f 63 | 6b 5f 72 65 71 75 65 73 |ject_loc|k_reques|
|000057f0| 74 28 63 6f 6e 74 72 6f | 6c 2c 0a 09 09 09 09 09 |t(contro|l,......|
|00005800| 20 20 20 28 76 6d 5f 61 | 64 64 72 65 73 73 5f 74 | (vm_a|ddress_t|
|00005810| 29 30 2c 20 76 6d 5f 70 | 61 67 65 5f 73 69 7a 65 |)0, vm_p|age_size|
|00005820| 2c 0a 09 09 20 20 20 20 | 20 20 20 20 20 20 20 09 |,... | .|
|00005830| 09 20 20 20 4d 45 4d 4f | 52 59 5f 4f 42 4a 45 43 |. MEMO|RY_OBJEC|
|00005840| 54 5f 52 45 54 55 52 4e | 5f 44 49 52 54 59 2c 0a |T_RETURN|_DIRTY,.|
|00005850| 09 09 09 09 09 20 20 20 | 54 52 55 45 2c 20 56 4d |..... |TRUE, VM|
|00005860| 5f 50 52 4f 54 5f 41 4c | 4c 2c 0a 09 09 09 09 09 |_PROT_AL|L,......|
|00005870| 20 20 20 6d 79 5f 6f 62 | 6a 2d 3e 6f 62 6a 65 63 | my_ob|j->objec|
|00005880| 74 5f 70 6f 72 74 29 3b | 0a 09 09 6d 79 5f 6f 62 |t_port);|...my_ob|
|00005890| 6a 2d 3e 73 74 61 74 65 | 20 3d 20 4e 45 54 4d 45 |j->state| = NETME|
|000058a0| 4d 5f 4f 42 4a 5f 46 4c | 55 53 48 49 4e 47 3b 0a |M_OBJ_FL|USHING;.|
|000058b0| 0a 09 7d 0a 0a 09 2f 2a | 0a 09 20 2a 09 44 6f 65 |..}.../*|.. *.Doe|
|000058c0| 73 20 74 68 65 20 6b 65 | 72 6e 65 6c 20 77 61 6e |s the ke|rnel wan|
|000058d0| 74 20 74 68 65 20 70 61 | 67 65 3f 0a 09 20 2a 2f |t the pa|ge?.. */|
|000058e0| 0a 20 09 65 6c 73 65 20 | 69 66 20 28 6d 79 5f 6f |. .else |if (my_o|
|000058f0| 62 6a 2d 3e 70 65 6e 64 | 69 6e 67 5f 6b 65 72 6e |bj->pend|ing_kern|
|00005900| 65 6c 5f 61 63 63 65 73 | 73 20 21 3d 20 56 4d 5f |el_acces|s != VM_|
|00005910| 50 52 4f 54 5f 4e 4f 4e | 45 29 20 7b 0a 09 09 20 |PROT_NON|E) {... |
|00005920| 20 20 20 20 20 20 20 0a | 09 09 69 66 20 28 6d 79 | .|..if (my|
|00005930| 5f 6f 62 6a 2d 3e 70 65 | 6e 64 69 6e 67 5f 6b 65 |_obj->pe|nding_ke|
|00005940| 72 6e 65 6c 5f 61 63 63 | 65 73 73 20 26 20 56 4d |rnel_acc|ess & VM|
|00005950| 5f 50 52 4f 54 5f 57 52 | 49 54 45 29 20 7b 0a 09 |_PROT_WR|ITE) {..|
|00005960| 09 09 6c 6f 63 6b 5f 76 | 61 6c 75 65 20 3d 20 56 |..lock_v|alue = V|
|00005970| 4d 5f 50 52 4f 54 5f 4e | 4f 4e 45 3b 0a 09 09 09 |M_PROT_N|ONE;....|
|00005980| 6d 79 5f 6f 62 6a 2d 3e | 73 74 61 74 65 20 3d 20 |my_obj->|state = |
|00005990| 4e 45 54 4d 45 4d 5f 4f | 42 4a 5f 4b 45 52 4e 45 |NETMEM_O|BJ_KERNE|
|000059a0| 4c 5f 57 52 49 54 45 3b | 0a 09 09 7d 0a 09 09 65 |L_WRITE;|...}...e|
|000059b0| 6c 73 65 20 7b 0a 09 09 | 09 6c 6f 63 6b 5f 76 61 |lse {...|.lock_va|
|000059c0| 6c 75 65 20 3d 20 56 4d | 5f 50 52 4f 54 5f 57 52 |lue = VM|_PROT_WR|
|000059d0| 49 54 45 3b 0a 09 09 09 | 6d 79 5f 6f 62 6a 2d 3e |ITE;....|my_obj->|
|000059e0| 73 74 61 74 65 20 3d 20 | 4e 45 54 4d 45 4d 5f 4f |state = |NETMEM_O|
|000059f0| 42 4a 5f 52 45 41 44 3b | 0a 09 09 7d 09 09 09 0a |BJ_READ;|...}....|
|00005a00| 0a 09 09 6d 79 5f 6f 62 | 6a 2d 3e 70 65 6e 64 69 |...my_ob|j->pendi|
|00005a10| 6e 67 5f 6b 65 72 6e 65 | 6c 5f 61 63 63 65 73 73 |ng_kerne|l_access|
|00005a20| 20 3d 20 56 4d 5f 50 52 | 4f 54 5f 4e 4f 4e 45 3b | = VM_PR|OT_NONE;|
|00005a30| 0a 0a 09 09 69 66 20 28 | 6d 79 5f 6f 62 6a 2d 3e |....if (|my_obj->|
|00005a40| 70 65 6e 64 69 6e 67 5f | 6b 65 72 6e 65 6c 5f 74 |pending_|kernel_t|
|00005a50| 79 70 65 20 3d 3d 20 50 | 45 4e 44 49 4e 47 5f 54 |ype == P|ENDING_T|
|00005a60| 59 50 45 5f 4c 4f 43 4b | 29 20 7b 0a 09 09 20 20 |YPE_LOCK|) {... |
|00005a70| 20 20 20 20 20 20 70 72 | 69 6e 74 66 28 22 6c 6f | pr|intf("lo|
|00005a80| 63 6b 5f 72 65 71 75 65 | 73 74 3a 20 6c 6f 63 6b |ck_reque|st: lock|
|00005a90| 20 25 64 5c 6e 22 2c 20 | 6c 6f 63 6b 5f 76 61 6c | %d\n", |lock_val|
|00005aa0| 75 65 29 3b 0a 09 09 09 | 28 76 6f 69 64 29 20 6d |ue);....|(void) m|
|00005ab0| 65 6d 6f 72 79 5f 6f 62 | 6a 65 63 74 5f 6c 6f 63 |emory_ob|ject_loc|
|00005ac0| 6b 5f 72 65 71 75 65 73 | 74 28 63 6f 6e 74 72 6f |k_reques|t(contro|
|00005ad0| 6c 2c 0a 09 09 09 09 09 | 20 20 20 28 76 6d 5f 61 |l,......| (vm_a|
|00005ae0| 64 64 72 65 73 73 5f 74 | 29 20 30 2c 20 76 6d 5f |ddress_t|) 0, vm_|
|00005af0| 70 61 67 65 5f 73 69 7a | 65 2c 0a 09 09 09 09 09 |page_siz|e,......|
|00005b00| 20 20 20 4d 45 4d 4f 52 | 59 5f 4f 42 4a 45 43 54 | MEMOR|Y_OBJECT|
|00005b10| 5f 52 45 54 55 52 4e 5f | 4e 4f 4e 45 2c 0a 09 09 |_RETURN_|NONE,...|
|00005b20| 09 09 09 20 20 20 46 41 | 4c 53 45 2c 20 6c 6f 63 |... FA|LSE, loc|
|00005b30| 6b 5f 76 61 6c 75 65 2c | 0a 09 09 09 09 09 20 20 |k_value,|...... |
|00005b40| 20 4d 41 43 48 5f 50 4f | 52 54 5f 4e 55 4c 4c 29 | MACH_PO|RT_NULL)|
|00005b50| 3b 0a 09 09 7d 0a 09 09 | 65 6c 73 65 20 7b 0a 09 |;...}...|else {..|
|00005b60| 09 09 70 72 69 6e 74 66 | 28 22 64 61 74 61 5f 73 |..printf|("data_s|
|00005b70| 75 70 70 6c 79 3a 20 6c | 6f 63 6b 20 25 64 5c 6e |upply: l|ock %d\n|
|00005b80| 22 2c 20 6c 6f 63 6b 5f | 76 61 6c 75 65 29 3b 0a |", lock_|value);.|
|00005b90| 09 09 09 28 76 6f 69 64 | 29 20 6d 65 6d 6f 72 79 |...(void|) memory|
|00005ba0| 5f 6f 62 6a 65 63 74 5f | 64 61 74 61 5f 73 75 70 |_object_|data_sup|
|00005bb0| 70 6c 79 28 63 6f 6e 74 | 72 6f 6c 2c 20 0a 09 09 |ply(cont|rol, ...|
|00005bc0| 09 09 09 20 20 20 20 28 | 76 6d 5f 61 64 64 72 65 |... (|vm_addre|
|00005bd0| 73 73 5f 74 29 20 30 2c | 20 6d 79 5f 6f 62 6a 2d |ss_t) 0,| my_obj-|
|00005be0| 3e 64 61 74 61 2c 0a 09 | 09 09 09 09 20 20 20 20 |>data,..|.... |
|00005bf0| 76 6d 5f 70 61 67 65 5f | 73 69 7a 65 2c 20 46 41 |vm_page_|size, FA|
|00005c00| 4c 53 45 2c 0a 09 09 09 | 09 09 20 20 20 20 6c 6f |LSE,....|.. lo|
|00005c10| 63 6b 5f 76 61 6c 75 65 | 2c 20 46 41 4c 53 45 2c |ck_value|, FALSE,|
|00005c20| 0a 09 09 09 09 09 20 20 | 20 20 4d 41 43 48 5f 50 |...... | MACH_P|
|00005c30| 4f 52 54 5f 4e 55 4c 4c | 29 3b 0a 09 09 7d 0a 09 |ORT_NULL|);...}..|
|00005c40| 7d 0a 0a 09 2f 2a 0a 09 | 20 2a 09 47 65 74 20 72 |}.../*..| *.Get r|
|00005c50| 69 64 20 6f 66 20 73 65 | 6e 64 20 72 69 67 68 74 |id of se|nd right|
|00005c60| 20 6f 6e 20 63 6f 6e 74 | 72 6f 6c 20 70 6f 72 74 | on cont|rol port|
|00005c70| 2e 0a 09 20 2a 2f 0a 09 | 6e 65 74 6d 65 6d 5f 63 |... */..|netmem_c|
|00005c80| 6f 6e 74 72 6f 6c 5f 63 | 6c 65 61 6e 75 70 28 6d |ontrol_c|leanup(m|
|00005c90| 79 5f 6f 62 6a 29 3b 0a | 09 72 65 74 75 72 6e 28 |y_obj);.|.return(|
|00005ca0| 4b 45 52 4e 5f 53 55 43 | 43 45 53 53 29 3b 0a 7d |KERN_SUC|CESS);.}|
|00005cb0| 0a 0c 0a 0a 2f 2a 0a 20 | 2a 09 4e 6f 74 20 75 73 |..../*. |*.Not us|
|00005cc0| 65 64 20 62 79 20 74 68 | 69 73 20 70 61 67 65 72 |ed by th|is pager|
|00005cd0| 0a 20 2a 2f 0a 6b 65 72 | 6e 5f 72 65 74 75 72 6e |. */.ker|n_return|
|00005ce0| 5f 74 0a 6d 65 6d 6f 72 | 79 5f 6f 62 6a 65 63 74 |_t.memor|y_object|
|00005cf0| 5f 63 6f 70 79 28 6f 6c | 64 5f 6f 62 6a 65 63 74 |_copy(ol|d_object|
|00005d00| 2c 20 6f 6c 64 5f 63 6f | 6e 74 72 6f 6c 2c 20 6f |, old_co|ntrol, o|
|00005d10| 66 66 73 65 74 2c 20 6c | 65 6e 67 74 68 2c 20 6e |ffset, l|ength, n|
|00005d20| 65 77 5f 6f 62 6a 65 63 | 74 29 0a 6d 65 6d 6f 72 |ew_objec|t).memor|
|00005d30| 79 5f 6f 62 6a 65 63 74 | 5f 74 20 09 6f 6c 64 5f |y_object|_t .old_|
|00005d40| 6f 62 6a 65 63 74 3b 0a | 6d 65 6d 6f 72 79 5f 6f |object;.|memory_o|
|00005d50| 62 6a 65 63 74 5f 63 6f | 6e 74 72 6f 6c 5f 74 09 |bject_co|ntrol_t.|
|00005d60| 6f 6c 64 5f 63 6f 6e 74 | 72 6f 6c 3b 0a 76 6d 5f |old_cont|rol;.vm_|
|00005d70| 61 64 64 72 65 73 73 5f | 74 09 09 6f 66 66 73 65 |address_|t..offse|
|00005d80| 74 3b 0a 76 6d 5f 73 69 | 7a 65 5f 74 09 09 6c 65 |t;.vm_si|ze_t..le|
|00005d90| 6e 67 74 68 3b 0a 6d 65 | 6d 6f 72 79 5f 6f 62 6a |ngth;.me|mory_obj|
|00005da0| 65 63 74 5f 74 20 09 6e | 65 77 5f 6f 62 6a 65 63 |ect_t .n|ew_objec|
|00005db0| 74 3b 0a 7b 0a 20 20 09 | 70 72 69 6e 74 66 28 22 |t;.{. .|printf("|
|00005dc0| 6f 62 6a 65 63 74 5f 63 | 6f 70 79 5c 6e 22 29 3b |object_c|opy\n");|
|00005dd0| 0a 09 72 65 74 75 72 6e | 28 4b 45 52 4e 5f 46 41 |..return|(KERN_FA|
|00005de0| 49 4c 55 52 45 29 3b 0a | 7d 0a 0a 6b 65 72 6e 5f |ILURE);.|}..kern_|
|00005df0| 72 65 74 75 72 6e 5f 74 | 0a 6d 65 6d 6f 72 79 5f |return_t|.memory_|
|00005e00| 6f 62 6a 65 63 74 5f 73 | 75 70 70 6c 79 5f 63 6f |object_s|upply_co|
|00005e10| 6d 70 6c 65 74 65 64 28 | 6f 62 6a 65 63 74 2c 20 |mpleted(|object, |
|00005e20| 63 6f 6e 74 72 6f 6c 2c | 20 6f 66 66 73 65 74 2c |control,| offset,|
|00005e30| 20 6c 65 6e 67 74 68 2c | 20 72 65 73 75 6c 74 2c | length,| result,|
|00005e40| 0a 09 09 09 09 65 72 72 | 6f 72 5f 6f 66 66 73 65 |.....err|or_offse|
|00005e50| 74 29 0a 6d 65 6d 6f 72 | 79 5f 6f 62 6a 65 63 74 |t).memor|y_object|
|00005e60| 5f 74 20 09 6f 62 6a 65 | 63 74 3b 0a 6d 65 6d 6f |_t .obje|ct;.memo|
|00005e70| 72 79 5f 6f 62 6a 65 63 | 74 5f 63 6f 6e 74 72 6f |ry_objec|t_contro|
|00005e80| 6c 5f 74 09 63 6f 6e 74 | 72 6f 6c 3b 0a 76 6d 5f |l_t.cont|rol;.vm_|
|00005e90| 61 64 64 72 65 73 73 5f | 74 09 09 6f 66 66 73 65 |address_|t..offse|
|00005ea0| 74 3b 0a 76 6d 5f 73 69 | 7a 65 5f 74 09 09 6c 65 |t;.vm_si|ze_t..le|
|00005eb0| 6e 67 74 68 3b 0a 6b 65 | 72 6e 5f 72 65 74 75 72 |ngth;.ke|rn_retur|
|00005ec0| 6e 5f 74 09 09 72 65 73 | 75 6c 74 3b 0a 76 6d 5f |n_t..res|ult;.vm_|
|00005ed0| 6f 66 66 73 65 74 5f 74 | 09 09 65 72 72 6f 72 5f |offset_t|..error_|
|00005ee0| 6f 66 66 73 65 74 3b 0a | 7b 0a 20 20 09 70 72 69 |offset;.|{. .pri|
|00005ef0| 6e 74 66 28 22 73 75 70 | 70 6c 79 5f 63 6f 6d 70 |ntf("sup|ply_comp|
|00005f00| 6c 65 74 65 64 5c 6e 22 | 29 3b 0a 09 72 65 74 75 |leted\n"|);..retu|
|00005f10| 72 6e 28 4b 45 52 4e 5f | 46 41 49 4c 55 52 45 29 |rn(KERN_|FAILURE)|
|00005f20| 3b 0a 7d 0a 6b 65 72 6e | 5f 72 65 74 75 72 6e 5f |;.}.kern|_return_|
|00005f30| 74 0a 6d 65 6d 6f 72 79 | 5f 6f 62 6a 65 63 74 5f |t.memory|_object_|
|00005f40| 64 61 74 61 5f 77 72 69 | 74 65 28 6f 62 6a 65 63 |data_wri|te(objec|
|00005f50| 74 2c 20 63 6f 6e 74 72 | 6f 6c 2c 20 6f 66 66 73 |t, contr|ol, offs|
|00005f60| 65 74 2c 20 64 61 74 61 | 29 0a 6d 65 6d 6f 72 79 |et, data|).memory|
|00005f70| 5f 6f 62 6a 65 63 74 5f | 74 20 09 6f 62 6a 65 63 |_object_|t .objec|
|00005f80| 74 3b 0a 6d 65 6d 6f 72 | 79 5f 6f 62 6a 65 63 74 |t;.memor|y_object|
|00005f90| 5f 63 6f 6e 74 72 6f 6c | 5f 74 09 63 6f 6e 74 72 |_control|_t.contr|
|00005fa0| 6f 6c 3b 0a 76 6d 5f 61 | 64 64 72 65 73 73 5f 74 |ol;.vm_a|ddress_t|
|00005fb0| 09 09 6f 66 66 73 65 74 | 3b 0a 70 6f 69 6e 74 65 |..offset|;.pointe|
|00005fc0| 72 5f 74 09 09 64 61 74 | 61 3b 0a 7b 0a 20 20 09 |r_t..dat|a;.{. .|
|00005fd0| 70 72 69 6e 74 66 28 22 | 64 61 74 61 5f 77 72 69 |printf("|data_wri|
|00005fe0| 74 65 5c 6e 22 29 3b 0a | 09 72 65 74 75 72 6e 28 |te\n");.|.return(|
|00005ff0| 4b 45 52 4e 5f 46 41 49 | 4c 55 52 45 29 3b 0a 7d |KERN_FAI|LURE);.}|
|00006000| 0a 0a 6b 65 72 6e 5f 72 | 65 74 75 72 6e 5f 74 0a |..kern_r|eturn_t.|
|00006010| 6d 65 6d 6f 72 79 5f 6f | 62 6a 65 63 74 5f 63 68 |memory_o|bject_ch|
|00006020| 61 6e 67 65 5f 63 6f 6d | 70 6c 65 74 65 64 28 6f |ange_com|pleted(o|
|00006030| 62 6a 65 63 74 2c 20 6d | 61 79 5f 63 61 63 68 65 |bject, m|ay_cache|
|00006040| 2c 20 63 6f 70 79 5f 73 | 74 72 61 74 65 67 79 29 |, copy_s|trategy)|
|00006050| 0a 6d 65 6d 6f 72 79 5f | 6f 62 6a 65 63 74 5f 74 |.memory_|object_t|
|00006060| 09 09 6f 62 6a 65 63 74 | 3b 0a 62 6f 6f 6c 65 61 |..object|;.boolea|
|00006070| 6e 5f 74 09 09 6d 61 79 | 5f 63 61 63 68 65 3b 0a |n_t..may|_cache;.|
|00006080| 62 6f 6f 6c 65 61 6e 5f | 74 09 09 63 6f 70 79 5f |boolean_|t..copy_|
|00006090| 73 74 72 61 74 65 67 79 | 3b 0a 7b 0a 09 70 72 69 |strategy|;.{..pri|
|000060a0| 6e 74 66 28 22 63 68 61 | 6e 67 65 5f 63 6f 6d 70 |ntf("cha|nge_comp|
|000060b0| 6c 65 74 65 64 22 29 3b | 0a 09 72 65 74 75 72 6e |leted");|..return|
|000060c0| 28 4b 45 52 4e 5f 46 41 | 49 4c 55 52 45 29 3b 0a |(KERN_FA|ILURE);.|
|000060d0| 7d 0a 0c 0a 0a 2f 2a 0a | 20 2a 09 44 65 6d 75 78 |}..../*.| *.Demux|
|000060e0| 20 72 6f 75 74 69 6e 65 | 20 66 6f 72 20 6d 61 63 | routine| for mac|
|000060f0| 68 5f 6d 73 67 5f 73 65 | 72 76 65 72 2e 20 20 54 |h_msg_se|rver. T|
|00006100| 68 69 73 20 61 6c 6c 6f | 77 73 20 75 73 20 74 6f |his allo|ws us to|
|00006110| 20 73 70 6c 69 63 65 0a | 20 2a 09 74 77 6f 20 69 | splice.| *.two i|
|00006120| 6e 74 65 72 66 61 63 65 | 73 20 69 6e 74 6f 20 6d |nterface|s into m|
|00006130| 61 63 68 5f 6d 73 67 5f | 73 65 72 76 65 72 28 29 |ach_msg_|server()|
|00006140| 2e 0a 20 2a 2f 0a 62 6f | 6f 6c 65 61 6e 5f 74 0a |.. */.bo|olean_t.|
|00006150| 6e 65 74 6d 65 6d 5f 64 | 65 6d 75 78 28 69 6e 6d |netmem_d|emux(inm|
|00006160| 73 67 2c 20 6f 75 74 6d | 73 67 29 0a 6d 61 63 68 |sg, outm|sg).mach|
|00006170| 5f 6d 73 67 5f 68 65 61 | 64 65 72 5f 74 09 2a 69 |_msg_hea|der_t.*i|
|00006180| 6e 6d 73 67 2c 20 2a 6f | 75 74 6d 73 67 3b 0a 7b |nmsg, *o|utmsg;.{|
|00006190| 0a 09 72 65 74 75 72 6e | 20 28 6e 65 74 6d 65 6d |..return| (netmem|
|000061a0| 5f 6d 73 67 5f 73 65 72 | 76 65 72 28 69 6e 6d 73 |_msg_ser|ver(inms|
|000061b0| 67 2c 6f 75 74 6d 73 67 | 29 20 7c 7c 0a 09 20 20 |g,outmsg|) ||.. |
|000061c0| 20 20 20 20 20 20 6d 65 | 6d 6f 72 79 5f 6f 62 6a | me|mory_obj|
|000061d0| 65 63 74 5f 73 65 72 76 | 65 72 28 69 6e 6d 73 67 |ect_serv|er(inmsg|
|000061e0| 2c 6f 75 74 6d 73 67 29 | 29 3b 0a 7d 0a 0a 2f 2a |,outmsg)|);.}../*|
|000061f0| 0a 20 2a 09 53 69 7a 65 | 20 6f 66 20 6d 61 78 20 |. *.Size| of max |
|00006200| 6d 65 73 73 61 67 65 20 | 77 65 27 72 65 20 77 69 |message |we're wi|
|00006210| 6c 6c 69 6e 67 20 74 6f | 20 72 65 63 65 69 76 65 |lling to| receive|
|00006220| 20 6f 72 20 73 65 6e 64 | 2e 20 20 48 61 76 65 20 | or send|. Have |
|00006230| 74 6f 0a 20 2a 09 61 6c | 6c 6f 77 20 65 6e 6f 75 |to. *.al|low enou|
|00006240| 67 68 20 73 70 61 63 65 | 20 66 6f 72 20 6d 65 6d |gh space| for mem|
|00006250| 6f 72 79 5f 6f 62 6a 65 | 63 74 5f 6d 65 73 73 61 |ory_obje|ct_messa|
|00006260| 67 65 73 20 66 72 6f 6d | 20 74 68 65 20 6b 65 72 |ges from| the ker|
|00006270| 6e 65 6c 2e 0a 20 2a 09 | 54 68 69 73 20 6e 75 6d |nel.. *.|This num|
|00006280| 62 65 72 20 69 73 20 6f | 6e 20 74 68 65 20 68 69 |ber is o|n the hi|
|00006290| 67 68 20 73 69 64 65 2e | 0a 20 2a 2f 0a 0a 23 64 |gh side.|. */..#d|
|000062a0| 65 66 69 6e 65 20 4e 45 | 54 4d 45 4d 5f 4d 41 58 |efine NE|TMEM_MAX|
|000062b0| 5f 4d 53 47 5f 53 49 5a | 45 09 35 31 32 0a 0a 2f |_MSG_SIZ|E.512../|
|000062c0| 2a 0a 20 2a 09 4d 61 69 | 6e 20 72 6f 75 74 69 6e |*. *.Mai|n routin|
|000062d0| 65 3a 20 69 6e 69 74 69 | 61 6c 69 7a 65 20 61 6e |e: initi|alize an|
|000062e0| 64 20 6c 6f 6f 70 20 66 | 6f 72 65 76 65 72 20 68 |d loop f|orever h|
|000062f0| 61 6e 64 6c 69 6e 67 20 | 6d 65 73 73 61 67 65 73 |andling |messages|
|00006300| 2e 0a 20 2a 09 49 67 6e | 6f 72 65 20 65 72 72 6f |.. *.Ign|ore erro|
|00006310| 72 20 72 65 74 75 72 6e | 73 20 66 72 6f 6d 20 6d |r return|s from m|
|00006320| 61 63 68 5f 6d 73 67 5f | 73 65 72 76 65 72 2e 0a |ach_msg_|server..|
|00006330| 20 2a 2f 0a 6d 61 69 6e | 28 29 0a 7b 0a 09 28 76 | */.main|().{..(v|
|00006340| 6f 69 64 29 20 69 6e 69 | 74 28 29 3b 0a 09 77 68 |oid) ini|t();..wh|
|00006350| 69 6c 65 20 28 31 29 20 | 7b 0a 09 09 28 76 6f 69 |ile (1) |{...(voi|
|00006360| 64 29 20 6d 61 63 68 5f | 6d 73 67 5f 73 65 72 76 |d) mach_|msg_serv|
|00006370| 65 72 28 6e 65 74 6d 65 | 6d 5f 64 65 6d 75 78 2c |er(netme|m_demux,|
|00006380| 20 4e 45 54 4d 45 4d 5f | 4d 41 58 5f 4d 53 47 5f | NETMEM_|MAX_MSG_|
|00006390| 53 49 5a 45 2c 0a 09 09 | 09 09 6d 61 73 74 65 72 |SIZE,...|..master|
|000063a0| 5f 6f 62 6a 2e 6f 62 6a | 65 63 74 5f 70 6f 72 74 |_obj.obj|ect_port|
|000063b0| 29 3b 0a 09 7d 0a 7d 0a | 53 48 41 52 5f 45 4f 46 |);..}.}.|SHAR_EOF|
|000063c0| 0a 66 69 20 23 20 65 6e | 64 20 6f 66 20 6f 76 65 |.fi # en|d of ove|
|000063d0| 72 77 72 69 74 69 6e 67 | 20 63 68 65 63 6b 0a 69 |rwriting| check.i|
|000063e0| 66 20 74 65 73 74 20 2d | 66 20 27 6e 65 74 6d 65 |f test -|f 'netme|
|000063f0| 6d 5f 6d 73 67 2e 64 65 | 66 73 27 0a 74 68 65 6e |m_msg.de|fs'.then|
+--------+-------------------------+-------------------------+--------+--------+
Only 25.0 KB of data is shown above.