xref: /netbsd-src/external/bsd/ntp/dist/sntp/libevent/epolltable-internal.h (revision bdc22b2e01993381dcefeff2bc9b56ca75a4235c)
1 /*	$NetBSD: epolltable-internal.h,v 1.4 2016/01/08 21:35:40 christos Exp $	*/
2 
3 /*
4  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
5  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. The name of the author may not be used to endorse or promote products
16  *    derived from this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29 #ifndef EPOLLTABLE_INTERNAL_H_INCLUDED_
30 #define EPOLLTABLE_INTERNAL_H_INCLUDED_
31 
32 /*
33   Here are the values we're masking off to decide what operations to do.
34   Note that since EV_READ|EV_WRITE.
35 
36   Note also that this table is a little sparse, since ADD+DEL is
37   nonsensical ("xxx" in the list below.)
38 
39   Note also also that we are shifting old_events by only 5 bits, since
40   EV_READ is 2 and EV_WRITE is 4.
41 
42   The table was auto-generated with a python script, according to this
43   pseudocode:[*0]
44 
45       If either the read or the write change is add+del:
46 	 This is impossible; Set op==-1, events=0.
47       Else, if either the read or the write change is add:
48 	 Set events to 0.
49 	 If the read change is add, or
50 	    (the read change is not del, and ev_read is in old_events):
51 	       Add EPOLLIN to events.
52 	 If the write change is add, or
53 	    (the write change is not del, and ev_write is in old_events):
54 	       Add EPOLLOUT to events.
55 
56 	 If old_events is set:
57 	       Set op to EPOLL_CTL_MOD [*1,*2]
58 	Else:
59 	       Set op to EPOLL_CTL_ADD [*3]
60 
61       Else, if the read or the write change is del:
62 	 Set op to EPOLL_CTL_DEL.
63 	 If the read change is del:
64 	     If the write change is del:
65 		 Set events to EPOLLIN|EPOLLOUT
66 	     Else if ev_write is in old_events:
67 		 Set events to EPOLLOUT
68 		Set op to EPOLL_CTL_MOD
69 	     Else
70 		 Set events to EPOLLIN
71 	 Else:
72 	     {The write change is del.}
73 	    If ev_read is in old_events:
74 		 Set events to EPOLLIN
75 		Set op to EPOLL_CTL_MOD
76 	    Else:
77 		Set the events to EPOLLOUT
78 
79       Else:
80 	   There is no read or write change; set op to 0 and events to 0.
81 
82       The logic is a little tricky, since we had no events set on the fd before,
83       we need to set op="ADD" and set events=the events we want to add.	 If we
84       had any events set on the fd before, and we want any events to remain on
85       the fd, we need to say op="MOD" and set events=the events we want to
86       remain.  But if we want to delete the last event, we say op="DEL" and
87       set events=(any non-null pointer).
88 
89   [*0] Actually, the Python script has gotten a bit more complicated, to
90        support EPOLLRDHUP.
91 
92   [*1] This MOD is only a guess.  MOD might fail with ENOENT if the file was
93        closed and a new file was opened with the same fd.  If so, we'll retry
94        with ADD.
95 
96   [*2] We can't replace this with a no-op even if old_events is the same as
97        the new events: if the file was closed and reopened, we need to retry
98        with an ADD.  (We do a MOD in this case since "no change" is more
99        common than "close and reopen", so we'll usually wind up doing 1
100        syscalls instead of 2.)
101 
102   [*3] This ADD is only a guess.  There is a fun Linux kernel issue where if
103        you have two fds for the same file (via dup) and you ADD one to an
104        epfd, then close it, then re-create it with the same fd (via dup2 or an
105        unlucky dup), then try to ADD it again, you'll get an EEXIST, since the
106        struct epitem is not actually removed from the struct eventpoll until
107        the file itself is closed.
108 
109   EV_CHANGE_ADD==1
110   EV_CHANGE_DEL==2
111   EV_READ      ==2
112   EV_WRITE     ==4
113   EV_CLOSED    ==0x80
114 
115   Bit 0: close change is add
116   Bit 1: close change is del
117   Bit 2: read change is add
118   Bit 3: read change is del
119   Bit 4: write change is add
120   Bit 5: write change is del
121   Bit 6: old events had EV_READ
122   Bit 7: old events had EV_WRITE
123   Bit 8: old events had EV_CLOSED
124 */
125 
126 #define EPOLL_OP_TABLE_INDEX(c) \
127 	(   (((c)->close_change&(EV_CHANGE_ADD|EV_CHANGE_DEL))) |		\
128 	    (((c)->read_change&(EV_CHANGE_ADD|EV_CHANGE_DEL)) << 2) |	\
129 	    (((c)->write_change&(EV_CHANGE_ADD|EV_CHANGE_DEL)) << 4) |	\
130 	    (((c)->old_events&(EV_READ|EV_WRITE)) << 5) |		\
131 	    (((c)->old_events&(EV_CLOSED)) << 1)				\
132 	    )
133 
134 #if EV_READ != 2 || EV_WRITE != 4 || EV_CLOSED != 0x80 || EV_CHANGE_ADD != 1 || EV_CHANGE_DEL != 2
135 #error "Libevent's internals changed!  Regenerate the op_table in epolltable-internal.h"
136 #endif
137 
138 static const struct operation {
139 	int events;
140 	int op;
141 } epoll_op_table[] = {
142 	/* old=  0, write:  0, read:  0, close:  0 */
143 	{ 0, 0 },
144 	/* old=  0, write:  0, read:  0, close:add */
145 	{ EPOLLRDHUP, EPOLL_CTL_ADD },
146 	/* old=  0, write:  0, read:  0, close:del */
147 	{ EPOLLRDHUP, EPOLL_CTL_DEL },
148 	/* old=  0, write:  0, read:  0, close:xxx */
149 	{ 0, 255 },
150 	/* old=  0, write:  0, read:add, close:  0 */
151 	{ EPOLLIN, EPOLL_CTL_ADD },
152 	/* old=  0, write:  0, read:add, close:add */
153 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_ADD },
154 	/* old=  0, write:  0, read:add, close:del */
155 	{ EPOLLIN, EPOLL_CTL_ADD },
156 	/* old=  0, write:  0, read:add, close:xxx */
157 	{ 0, 255 },
158 	/* old=  0, write:  0, read:del, close:  0 */
159 	{ EPOLLIN, EPOLL_CTL_DEL },
160 	/* old=  0, write:  0, read:del, close:add */
161 	{ EPOLLRDHUP, EPOLL_CTL_ADD },
162 	/* old=  0, write:  0, read:del, close:del */
163 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
164 	/* old=  0, write:  0, read:del, close:xxx */
165 	{ 0, 255 },
166 	/* old=  0, write:  0, read:xxx, close:  0 */
167 	{ 0, 255 },
168 	/* old=  0, write:  0, read:xxx, close:add */
169 	{ 0, 255 },
170 	/* old=  0, write:  0, read:xxx, close:del */
171 	{ 0, 255 },
172 	/* old=  0, write:  0, read:xxx, close:xxx */
173 	{ 0, 255 },
174 	/* old=  0, write:add, read:  0, close:  0 */
175 	{ EPOLLOUT, EPOLL_CTL_ADD },
176 	/* old=  0, write:add, read:  0, close:add */
177 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
178 	/* old=  0, write:add, read:  0, close:del */
179 	{ EPOLLOUT, EPOLL_CTL_ADD },
180 	/* old=  0, write:add, read:  0, close:xxx */
181 	{ 0, 255 },
182 	/* old=  0, write:add, read:add, close:  0 */
183 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_ADD },
184 	/* old=  0, write:add, read:add, close:add */
185 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
186 	/* old=  0, write:add, read:add, close:del */
187 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_ADD },
188 	/* old=  0, write:add, read:add, close:xxx */
189 	{ 0, 255 },
190 	/* old=  0, write:add, read:del, close:  0 */
191 	{ EPOLLOUT, EPOLL_CTL_ADD },
192 	/* old=  0, write:add, read:del, close:add */
193 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_ADD },
194 	/* old=  0, write:add, read:del, close:del */
195 	{ EPOLLOUT, EPOLL_CTL_ADD },
196 	/* old=  0, write:add, read:del, close:xxx */
197 	{ 0, 255 },
198 	/* old=  0, write:add, read:xxx, close:  0 */
199 	{ 0, 255 },
200 	/* old=  0, write:add, read:xxx, close:add */
201 	{ 0, 255 },
202 	/* old=  0, write:add, read:xxx, close:del */
203 	{ 0, 255 },
204 	/* old=  0, write:add, read:xxx, close:xxx */
205 	{ 0, 255 },
206 	/* old=  0, write:del, read:  0, close:  0 */
207 	{ EPOLLOUT, EPOLL_CTL_DEL },
208 	/* old=  0, write:del, read:  0, close:add */
209 	{ EPOLLRDHUP, EPOLL_CTL_ADD },
210 	/* old=  0, write:del, read:  0, close:del */
211 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
212 	/* old=  0, write:del, read:  0, close:xxx */
213 	{ 0, 255 },
214 	/* old=  0, write:del, read:add, close:  0 */
215 	{ EPOLLIN, EPOLL_CTL_ADD },
216 	/* old=  0, write:del, read:add, close:add */
217 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_ADD },
218 	/* old=  0, write:del, read:add, close:del */
219 	{ EPOLLIN, EPOLL_CTL_ADD },
220 	/* old=  0, write:del, read:add, close:xxx */
221 	{ 0, 255 },
222 	/* old=  0, write:del, read:del, close:  0 */
223 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
224 	/* old=  0, write:del, read:del, close:add */
225 	{ EPOLLRDHUP, EPOLL_CTL_ADD },
226 	/* old=  0, write:del, read:del, close:del */
227 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
228 	/* old=  0, write:del, read:del, close:xxx */
229 	{ 0, 255 },
230 	/* old=  0, write:del, read:xxx, close:  0 */
231 	{ 0, 255 },
232 	/* old=  0, write:del, read:xxx, close:add */
233 	{ 0, 255 },
234 	/* old=  0, write:del, read:xxx, close:del */
235 	{ 0, 255 },
236 	/* old=  0, write:del, read:xxx, close:xxx */
237 	{ 0, 255 },
238 	/* old=  0, write:xxx, read:  0, close:  0 */
239 	{ 0, 255 },
240 	/* old=  0, write:xxx, read:  0, close:add */
241 	{ 0, 255 },
242 	/* old=  0, write:xxx, read:  0, close:del */
243 	{ 0, 255 },
244 	/* old=  0, write:xxx, read:  0, close:xxx */
245 	{ 0, 255 },
246 	/* old=  0, write:xxx, read:add, close:  0 */
247 	{ 0, 255 },
248 	/* old=  0, write:xxx, read:add, close:add */
249 	{ 0, 255 },
250 	/* old=  0, write:xxx, read:add, close:del */
251 	{ 0, 255 },
252 	/* old=  0, write:xxx, read:add, close:xxx */
253 	{ 0, 255 },
254 	/* old=  0, write:xxx, read:del, close:  0 */
255 	{ 0, 255 },
256 	/* old=  0, write:xxx, read:del, close:add */
257 	{ 0, 255 },
258 	/* old=  0, write:xxx, read:del, close:del */
259 	{ 0, 255 },
260 	/* old=  0, write:xxx, read:del, close:xxx */
261 	{ 0, 255 },
262 	/* old=  0, write:xxx, read:xxx, close:  0 */
263 	{ 0, 255 },
264 	/* old=  0, write:xxx, read:xxx, close:add */
265 	{ 0, 255 },
266 	/* old=  0, write:xxx, read:xxx, close:del */
267 	{ 0, 255 },
268 	/* old=  0, write:xxx, read:xxx, close:xxx */
269 	{ 0, 255 },
270 	/* old=  r, write:  0, read:  0, close:  0 */
271 	{ 0, 0 },
272 	/* old=  r, write:  0, read:  0, close:add */
273 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
274 	/* old=  r, write:  0, read:  0, close:del */
275 	{ EPOLLIN, EPOLL_CTL_MOD },
276 	/* old=  r, write:  0, read:  0, close:xxx */
277 	{ 0, 255 },
278 	/* old=  r, write:  0, read:add, close:  0 */
279 	{ EPOLLIN, EPOLL_CTL_MOD },
280 	/* old=  r, write:  0, read:add, close:add */
281 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
282 	/* old=  r, write:  0, read:add, close:del */
283 	{ EPOLLIN, EPOLL_CTL_MOD },
284 	/* old=  r, write:  0, read:add, close:xxx */
285 	{ 0, 255 },
286 	/* old=  r, write:  0, read:del, close:  0 */
287 	{ EPOLLIN, EPOLL_CTL_DEL },
288 	/* old=  r, write:  0, read:del, close:add */
289 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
290 	/* old=  r, write:  0, read:del, close:del */
291 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
292 	/* old=  r, write:  0, read:del, close:xxx */
293 	{ 0, 255 },
294 	/* old=  r, write:  0, read:xxx, close:  0 */
295 	{ 0, 255 },
296 	/* old=  r, write:  0, read:xxx, close:add */
297 	{ 0, 255 },
298 	/* old=  r, write:  0, read:xxx, close:del */
299 	{ 0, 255 },
300 	/* old=  r, write:  0, read:xxx, close:xxx */
301 	{ 0, 255 },
302 	/* old=  r, write:add, read:  0, close:  0 */
303 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
304 	/* old=  r, write:add, read:  0, close:add */
305 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
306 	/* old=  r, write:add, read:  0, close:del */
307 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
308 	/* old=  r, write:add, read:  0, close:xxx */
309 	{ 0, 255 },
310 	/* old=  r, write:add, read:add, close:  0 */
311 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
312 	/* old=  r, write:add, read:add, close:add */
313 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
314 	/* old=  r, write:add, read:add, close:del */
315 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
316 	/* old=  r, write:add, read:add, close:xxx */
317 	{ 0, 255 },
318 	/* old=  r, write:add, read:del, close:  0 */
319 	{ EPOLLOUT, EPOLL_CTL_MOD },
320 	/* old=  r, write:add, read:del, close:add */
321 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
322 	/* old=  r, write:add, read:del, close:del */
323 	{ EPOLLOUT, EPOLL_CTL_MOD },
324 	/* old=  r, write:add, read:del, close:xxx */
325 	{ 0, 255 },
326 	/* old=  r, write:add, read:xxx, close:  0 */
327 	{ 0, 255 },
328 	/* old=  r, write:add, read:xxx, close:add */
329 	{ 0, 255 },
330 	/* old=  r, write:add, read:xxx, close:del */
331 	{ 0, 255 },
332 	/* old=  r, write:add, read:xxx, close:xxx */
333 	{ 0, 255 },
334 	/* old=  r, write:del, read:  0, close:  0 */
335 	{ EPOLLIN, EPOLL_CTL_MOD },
336 	/* old=  r, write:del, read:  0, close:add */
337 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
338 	/* old=  r, write:del, read:  0, close:del */
339 	{ EPOLLIN, EPOLL_CTL_MOD },
340 	/* old=  r, write:del, read:  0, close:xxx */
341 	{ 0, 255 },
342 	/* old=  r, write:del, read:add, close:  0 */
343 	{ EPOLLIN, EPOLL_CTL_MOD },
344 	/* old=  r, write:del, read:add, close:add */
345 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
346 	/* old=  r, write:del, read:add, close:del */
347 	{ EPOLLIN, EPOLL_CTL_MOD },
348 	/* old=  r, write:del, read:add, close:xxx */
349 	{ 0, 255 },
350 	/* old=  r, write:del, read:del, close:  0 */
351 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
352 	/* old=  r, write:del, read:del, close:add */
353 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
354 	/* old=  r, write:del, read:del, close:del */
355 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
356 	/* old=  r, write:del, read:del, close:xxx */
357 	{ 0, 255 },
358 	/* old=  r, write:del, read:xxx, close:  0 */
359 	{ 0, 255 },
360 	/* old=  r, write:del, read:xxx, close:add */
361 	{ 0, 255 },
362 	/* old=  r, write:del, read:xxx, close:del */
363 	{ 0, 255 },
364 	/* old=  r, write:del, read:xxx, close:xxx */
365 	{ 0, 255 },
366 	/* old=  r, write:xxx, read:  0, close:  0 */
367 	{ 0, 255 },
368 	/* old=  r, write:xxx, read:  0, close:add */
369 	{ 0, 255 },
370 	/* old=  r, write:xxx, read:  0, close:del */
371 	{ 0, 255 },
372 	/* old=  r, write:xxx, read:  0, close:xxx */
373 	{ 0, 255 },
374 	/* old=  r, write:xxx, read:add, close:  0 */
375 	{ 0, 255 },
376 	/* old=  r, write:xxx, read:add, close:add */
377 	{ 0, 255 },
378 	/* old=  r, write:xxx, read:add, close:del */
379 	{ 0, 255 },
380 	/* old=  r, write:xxx, read:add, close:xxx */
381 	{ 0, 255 },
382 	/* old=  r, write:xxx, read:del, close:  0 */
383 	{ 0, 255 },
384 	/* old=  r, write:xxx, read:del, close:add */
385 	{ 0, 255 },
386 	/* old=  r, write:xxx, read:del, close:del */
387 	{ 0, 255 },
388 	/* old=  r, write:xxx, read:del, close:xxx */
389 	{ 0, 255 },
390 	/* old=  r, write:xxx, read:xxx, close:  0 */
391 	{ 0, 255 },
392 	/* old=  r, write:xxx, read:xxx, close:add */
393 	{ 0, 255 },
394 	/* old=  r, write:xxx, read:xxx, close:del */
395 	{ 0, 255 },
396 	/* old=  r, write:xxx, read:xxx, close:xxx */
397 	{ 0, 255 },
398 	/* old=  w, write:  0, read:  0, close:  0 */
399 	{ 0, 0 },
400 	/* old=  w, write:  0, read:  0, close:add */
401 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
402 	/* old=  w, write:  0, read:  0, close:del */
403 	{ EPOLLOUT, EPOLL_CTL_MOD },
404 	/* old=  w, write:  0, read:  0, close:xxx */
405 	{ 0, 255 },
406 	/* old=  w, write:  0, read:add, close:  0 */
407 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
408 	/* old=  w, write:  0, read:add, close:add */
409 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
410 	/* old=  w, write:  0, read:add, close:del */
411 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
412 	/* old=  w, write:  0, read:add, close:xxx */
413 	{ 0, 255 },
414 	/* old=  w, write:  0, read:del, close:  0 */
415 	{ EPOLLOUT, EPOLL_CTL_MOD },
416 	/* old=  w, write:  0, read:del, close:add */
417 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
418 	/* old=  w, write:  0, read:del, close:del */
419 	{ EPOLLOUT, EPOLL_CTL_MOD },
420 	/* old=  w, write:  0, read:del, close:xxx */
421 	{ 0, 255 },
422 	/* old=  w, write:  0, read:xxx, close:  0 */
423 	{ 0, 255 },
424 	/* old=  w, write:  0, read:xxx, close:add */
425 	{ 0, 255 },
426 	/* old=  w, write:  0, read:xxx, close:del */
427 	{ 0, 255 },
428 	/* old=  w, write:  0, read:xxx, close:xxx */
429 	{ 0, 255 },
430 	/* old=  w, write:add, read:  0, close:  0 */
431 	{ EPOLLOUT, EPOLL_CTL_MOD },
432 	/* old=  w, write:add, read:  0, close:add */
433 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
434 	/* old=  w, write:add, read:  0, close:del */
435 	{ EPOLLOUT, EPOLL_CTL_MOD },
436 	/* old=  w, write:add, read:  0, close:xxx */
437 	{ 0, 255 },
438 	/* old=  w, write:add, read:add, close:  0 */
439 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
440 	/* old=  w, write:add, read:add, close:add */
441 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
442 	/* old=  w, write:add, read:add, close:del */
443 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
444 	/* old=  w, write:add, read:add, close:xxx */
445 	{ 0, 255 },
446 	/* old=  w, write:add, read:del, close:  0 */
447 	{ EPOLLOUT, EPOLL_CTL_MOD },
448 	/* old=  w, write:add, read:del, close:add */
449 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
450 	/* old=  w, write:add, read:del, close:del */
451 	{ EPOLLOUT, EPOLL_CTL_MOD },
452 	/* old=  w, write:add, read:del, close:xxx */
453 	{ 0, 255 },
454 	/* old=  w, write:add, read:xxx, close:  0 */
455 	{ 0, 255 },
456 	/* old=  w, write:add, read:xxx, close:add */
457 	{ 0, 255 },
458 	/* old=  w, write:add, read:xxx, close:del */
459 	{ 0, 255 },
460 	/* old=  w, write:add, read:xxx, close:xxx */
461 	{ 0, 255 },
462 	/* old=  w, write:del, read:  0, close:  0 */
463 	{ EPOLLOUT, EPOLL_CTL_DEL },
464 	/* old=  w, write:del, read:  0, close:add */
465 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
466 	/* old=  w, write:del, read:  0, close:del */
467 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
468 	/* old=  w, write:del, read:  0, close:xxx */
469 	{ 0, 255 },
470 	/* old=  w, write:del, read:add, close:  0 */
471 	{ EPOLLIN, EPOLL_CTL_MOD },
472 	/* old=  w, write:del, read:add, close:add */
473 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
474 	/* old=  w, write:del, read:add, close:del */
475 	{ EPOLLIN, EPOLL_CTL_MOD },
476 	/* old=  w, write:del, read:add, close:xxx */
477 	{ 0, 255 },
478 	/* old=  w, write:del, read:del, close:  0 */
479 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
480 	/* old=  w, write:del, read:del, close:add */
481 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
482 	/* old=  w, write:del, read:del, close:del */
483 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
484 	/* old=  w, write:del, read:del, close:xxx */
485 	{ 0, 255 },
486 	/* old=  w, write:del, read:xxx, close:  0 */
487 	{ 0, 255 },
488 	/* old=  w, write:del, read:xxx, close:add */
489 	{ 0, 255 },
490 	/* old=  w, write:del, read:xxx, close:del */
491 	{ 0, 255 },
492 	/* old=  w, write:del, read:xxx, close:xxx */
493 	{ 0, 255 },
494 	/* old=  w, write:xxx, read:  0, close:  0 */
495 	{ 0, 255 },
496 	/* old=  w, write:xxx, read:  0, close:add */
497 	{ 0, 255 },
498 	/* old=  w, write:xxx, read:  0, close:del */
499 	{ 0, 255 },
500 	/* old=  w, write:xxx, read:  0, close:xxx */
501 	{ 0, 255 },
502 	/* old=  w, write:xxx, read:add, close:  0 */
503 	{ 0, 255 },
504 	/* old=  w, write:xxx, read:add, close:add */
505 	{ 0, 255 },
506 	/* old=  w, write:xxx, read:add, close:del */
507 	{ 0, 255 },
508 	/* old=  w, write:xxx, read:add, close:xxx */
509 	{ 0, 255 },
510 	/* old=  w, write:xxx, read:del, close:  0 */
511 	{ 0, 255 },
512 	/* old=  w, write:xxx, read:del, close:add */
513 	{ 0, 255 },
514 	/* old=  w, write:xxx, read:del, close:del */
515 	{ 0, 255 },
516 	/* old=  w, write:xxx, read:del, close:xxx */
517 	{ 0, 255 },
518 	/* old=  w, write:xxx, read:xxx, close:  0 */
519 	{ 0, 255 },
520 	/* old=  w, write:xxx, read:xxx, close:add */
521 	{ 0, 255 },
522 	/* old=  w, write:xxx, read:xxx, close:del */
523 	{ 0, 255 },
524 	/* old=  w, write:xxx, read:xxx, close:xxx */
525 	{ 0, 255 },
526 	/* old= rw, write:  0, read:  0, close:  0 */
527 	{ 0, 0 },
528 	/* old= rw, write:  0, read:  0, close:add */
529 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
530 	/* old= rw, write:  0, read:  0, close:del */
531 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
532 	/* old= rw, write:  0, read:  0, close:xxx */
533 	{ 0, 255 },
534 	/* old= rw, write:  0, read:add, close:  0 */
535 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
536 	/* old= rw, write:  0, read:add, close:add */
537 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
538 	/* old= rw, write:  0, read:add, close:del */
539 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
540 	/* old= rw, write:  0, read:add, close:xxx */
541 	{ 0, 255 },
542 	/* old= rw, write:  0, read:del, close:  0 */
543 	{ EPOLLOUT, EPOLL_CTL_MOD },
544 	/* old= rw, write:  0, read:del, close:add */
545 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
546 	/* old= rw, write:  0, read:del, close:del */
547 	{ EPOLLOUT, EPOLL_CTL_MOD },
548 	/* old= rw, write:  0, read:del, close:xxx */
549 	{ 0, 255 },
550 	/* old= rw, write:  0, read:xxx, close:  0 */
551 	{ 0, 255 },
552 	/* old= rw, write:  0, read:xxx, close:add */
553 	{ 0, 255 },
554 	/* old= rw, write:  0, read:xxx, close:del */
555 	{ 0, 255 },
556 	/* old= rw, write:  0, read:xxx, close:xxx */
557 	{ 0, 255 },
558 	/* old= rw, write:add, read:  0, close:  0 */
559 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
560 	/* old= rw, write:add, read:  0, close:add */
561 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
562 	/* old= rw, write:add, read:  0, close:del */
563 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
564 	/* old= rw, write:add, read:  0, close:xxx */
565 	{ 0, 255 },
566 	/* old= rw, write:add, read:add, close:  0 */
567 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
568 	/* old= rw, write:add, read:add, close:add */
569 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
570 	/* old= rw, write:add, read:add, close:del */
571 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
572 	/* old= rw, write:add, read:add, close:xxx */
573 	{ 0, 255 },
574 	/* old= rw, write:add, read:del, close:  0 */
575 	{ EPOLLOUT, EPOLL_CTL_MOD },
576 	/* old= rw, write:add, read:del, close:add */
577 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
578 	/* old= rw, write:add, read:del, close:del */
579 	{ EPOLLOUT, EPOLL_CTL_MOD },
580 	/* old= rw, write:add, read:del, close:xxx */
581 	{ 0, 255 },
582 	/* old= rw, write:add, read:xxx, close:  0 */
583 	{ 0, 255 },
584 	/* old= rw, write:add, read:xxx, close:add */
585 	{ 0, 255 },
586 	/* old= rw, write:add, read:xxx, close:del */
587 	{ 0, 255 },
588 	/* old= rw, write:add, read:xxx, close:xxx */
589 	{ 0, 255 },
590 	/* old= rw, write:del, read:  0, close:  0 */
591 	{ EPOLLIN, EPOLL_CTL_MOD },
592 	/* old= rw, write:del, read:  0, close:add */
593 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
594 	/* old= rw, write:del, read:  0, close:del */
595 	{ EPOLLIN, EPOLL_CTL_MOD },
596 	/* old= rw, write:del, read:  0, close:xxx */
597 	{ 0, 255 },
598 	/* old= rw, write:del, read:add, close:  0 */
599 	{ EPOLLIN, EPOLL_CTL_MOD },
600 	/* old= rw, write:del, read:add, close:add */
601 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
602 	/* old= rw, write:del, read:add, close:del */
603 	{ EPOLLIN, EPOLL_CTL_MOD },
604 	/* old= rw, write:del, read:add, close:xxx */
605 	{ 0, 255 },
606 	/* old= rw, write:del, read:del, close:  0 */
607 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_DEL },
608 	/* old= rw, write:del, read:del, close:add */
609 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
610 	/* old= rw, write:del, read:del, close:del */
611 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
612 	/* old= rw, write:del, read:del, close:xxx */
613 	{ 0, 255 },
614 	/* old= rw, write:del, read:xxx, close:  0 */
615 	{ 0, 255 },
616 	/* old= rw, write:del, read:xxx, close:add */
617 	{ 0, 255 },
618 	/* old= rw, write:del, read:xxx, close:del */
619 	{ 0, 255 },
620 	/* old= rw, write:del, read:xxx, close:xxx */
621 	{ 0, 255 },
622 	/* old= rw, write:xxx, read:  0, close:  0 */
623 	{ 0, 255 },
624 	/* old= rw, write:xxx, read:  0, close:add */
625 	{ 0, 255 },
626 	/* old= rw, write:xxx, read:  0, close:del */
627 	{ 0, 255 },
628 	/* old= rw, write:xxx, read:  0, close:xxx */
629 	{ 0, 255 },
630 	/* old= rw, write:xxx, read:add, close:  0 */
631 	{ 0, 255 },
632 	/* old= rw, write:xxx, read:add, close:add */
633 	{ 0, 255 },
634 	/* old= rw, write:xxx, read:add, close:del */
635 	{ 0, 255 },
636 	/* old= rw, write:xxx, read:add, close:xxx */
637 	{ 0, 255 },
638 	/* old= rw, write:xxx, read:del, close:  0 */
639 	{ 0, 255 },
640 	/* old= rw, write:xxx, read:del, close:add */
641 	{ 0, 255 },
642 	/* old= rw, write:xxx, read:del, close:del */
643 	{ 0, 255 },
644 	/* old= rw, write:xxx, read:del, close:xxx */
645 	{ 0, 255 },
646 	/* old= rw, write:xxx, read:xxx, close:  0 */
647 	{ 0, 255 },
648 	/* old= rw, write:xxx, read:xxx, close:add */
649 	{ 0, 255 },
650 	/* old= rw, write:xxx, read:xxx, close:del */
651 	{ 0, 255 },
652 	/* old= rw, write:xxx, read:xxx, close:xxx */
653 	{ 0, 255 },
654 	/* old=  c, write:  0, read:  0, close:  0 */
655 	{ 0, 0 },
656 	/* old=  c, write:  0, read:  0, close:add */
657 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
658 	/* old=  c, write:  0, read:  0, close:del */
659 	{ EPOLLRDHUP, EPOLL_CTL_DEL },
660 	/* old=  c, write:  0, read:  0, close:xxx */
661 	{ 0, 255 },
662 	/* old=  c, write:  0, read:add, close:  0 */
663 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
664 	/* old=  c, write:  0, read:add, close:add */
665 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
666 	/* old=  c, write:  0, read:add, close:del */
667 	{ EPOLLIN, EPOLL_CTL_MOD },
668 	/* old=  c, write:  0, read:add, close:xxx */
669 	{ 0, 255 },
670 	/* old=  c, write:  0, read:del, close:  0 */
671 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
672 	/* old=  c, write:  0, read:del, close:add */
673 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
674 	/* old=  c, write:  0, read:del, close:del */
675 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
676 	/* old=  c, write:  0, read:del, close:xxx */
677 	{ 0, 255 },
678 	/* old=  c, write:  0, read:xxx, close:  0 */
679 	{ 0, 255 },
680 	/* old=  c, write:  0, read:xxx, close:add */
681 	{ 0, 255 },
682 	/* old=  c, write:  0, read:xxx, close:del */
683 	{ 0, 255 },
684 	/* old=  c, write:  0, read:xxx, close:xxx */
685 	{ 0, 255 },
686 	/* old=  c, write:add, read:  0, close:  0 */
687 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
688 	/* old=  c, write:add, read:  0, close:add */
689 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
690 	/* old=  c, write:add, read:  0, close:del */
691 	{ EPOLLOUT, EPOLL_CTL_MOD },
692 	/* old=  c, write:add, read:  0, close:xxx */
693 	{ 0, 255 },
694 	/* old=  c, write:add, read:add, close:  0 */
695 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
696 	/* old=  c, write:add, read:add, close:add */
697 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
698 	/* old=  c, write:add, read:add, close:del */
699 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
700 	/* old=  c, write:add, read:add, close:xxx */
701 	{ 0, 255 },
702 	/* old=  c, write:add, read:del, close:  0 */
703 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
704 	/* old=  c, write:add, read:del, close:add */
705 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
706 	/* old=  c, write:add, read:del, close:del */
707 	{ EPOLLOUT, EPOLL_CTL_MOD },
708 	/* old=  c, write:add, read:del, close:xxx */
709 	{ 0, 255 },
710 	/* old=  c, write:add, read:xxx, close:  0 */
711 	{ 0, 255 },
712 	/* old=  c, write:add, read:xxx, close:add */
713 	{ 0, 255 },
714 	/* old=  c, write:add, read:xxx, close:del */
715 	{ 0, 255 },
716 	/* old=  c, write:add, read:xxx, close:xxx */
717 	{ 0, 255 },
718 	/* old=  c, write:del, read:  0, close:  0 */
719 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
720 	/* old=  c, write:del, read:  0, close:add */
721 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
722 	/* old=  c, write:del, read:  0, close:del */
723 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
724 	/* old=  c, write:del, read:  0, close:xxx */
725 	{ 0, 255 },
726 	/* old=  c, write:del, read:add, close:  0 */
727 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
728 	/* old=  c, write:del, read:add, close:add */
729 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
730 	/* old=  c, write:del, read:add, close:del */
731 	{ EPOLLIN, EPOLL_CTL_MOD },
732 	/* old=  c, write:del, read:add, close:xxx */
733 	{ 0, 255 },
734 	/* old=  c, write:del, read:del, close:  0 */
735 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
736 	/* old=  c, write:del, read:del, close:add */
737 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
738 	/* old=  c, write:del, read:del, close:del */
739 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
740 	/* old=  c, write:del, read:del, close:xxx */
741 	{ 0, 255 },
742 	/* old=  c, write:del, read:xxx, close:  0 */
743 	{ 0, 255 },
744 	/* old=  c, write:del, read:xxx, close:add */
745 	{ 0, 255 },
746 	/* old=  c, write:del, read:xxx, close:del */
747 	{ 0, 255 },
748 	/* old=  c, write:del, read:xxx, close:xxx */
749 	{ 0, 255 },
750 	/* old=  c, write:xxx, read:  0, close:  0 */
751 	{ 0, 255 },
752 	/* old=  c, write:xxx, read:  0, close:add */
753 	{ 0, 255 },
754 	/* old=  c, write:xxx, read:  0, close:del */
755 	{ 0, 255 },
756 	/* old=  c, write:xxx, read:  0, close:xxx */
757 	{ 0, 255 },
758 	/* old=  c, write:xxx, read:add, close:  0 */
759 	{ 0, 255 },
760 	/* old=  c, write:xxx, read:add, close:add */
761 	{ 0, 255 },
762 	/* old=  c, write:xxx, read:add, close:del */
763 	{ 0, 255 },
764 	/* old=  c, write:xxx, read:add, close:xxx */
765 	{ 0, 255 },
766 	/* old=  c, write:xxx, read:del, close:  0 */
767 	{ 0, 255 },
768 	/* old=  c, write:xxx, read:del, close:add */
769 	{ 0, 255 },
770 	/* old=  c, write:xxx, read:del, close:del */
771 	{ 0, 255 },
772 	/* old=  c, write:xxx, read:del, close:xxx */
773 	{ 0, 255 },
774 	/* old=  c, write:xxx, read:xxx, close:  0 */
775 	{ 0, 255 },
776 	/* old=  c, write:xxx, read:xxx, close:add */
777 	{ 0, 255 },
778 	/* old=  c, write:xxx, read:xxx, close:del */
779 	{ 0, 255 },
780 	/* old=  c, write:xxx, read:xxx, close:xxx */
781 	{ 0, 255 },
782 	/* old= cr, write:  0, read:  0, close:  0 */
783 	{ 0, 0 },
784 	/* old= cr, write:  0, read:  0, close:add */
785 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
786 	/* old= cr, write:  0, read:  0, close:del */
787 	{ EPOLLIN, EPOLL_CTL_MOD },
788 	/* old= cr, write:  0, read:  0, close:xxx */
789 	{ 0, 255 },
790 	/* old= cr, write:  0, read:add, close:  0 */
791 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
792 	/* old= cr, write:  0, read:add, close:add */
793 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
794 	/* old= cr, write:  0, read:add, close:del */
795 	{ EPOLLIN, EPOLL_CTL_MOD },
796 	/* old= cr, write:  0, read:add, close:xxx */
797 	{ 0, 255 },
798 	/* old= cr, write:  0, read:del, close:  0 */
799 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
800 	/* old= cr, write:  0, read:del, close:add */
801 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
802 	/* old= cr, write:  0, read:del, close:del */
803 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_DEL },
804 	/* old= cr, write:  0, read:del, close:xxx */
805 	{ 0, 255 },
806 	/* old= cr, write:  0, read:xxx, close:  0 */
807 	{ 0, 255 },
808 	/* old= cr, write:  0, read:xxx, close:add */
809 	{ 0, 255 },
810 	/* old= cr, write:  0, read:xxx, close:del */
811 	{ 0, 255 },
812 	/* old= cr, write:  0, read:xxx, close:xxx */
813 	{ 0, 255 },
814 	/* old= cr, write:add, read:  0, close:  0 */
815 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
816 	/* old= cr, write:add, read:  0, close:add */
817 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
818 	/* old= cr, write:add, read:  0, close:del */
819 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
820 	/* old= cr, write:add, read:  0, close:xxx */
821 	{ 0, 255 },
822 	/* old= cr, write:add, read:add, close:  0 */
823 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
824 	/* old= cr, write:add, read:add, close:add */
825 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
826 	/* old= cr, write:add, read:add, close:del */
827 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
828 	/* old= cr, write:add, read:add, close:xxx */
829 	{ 0, 255 },
830 	/* old= cr, write:add, read:del, close:  0 */
831 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
832 	/* old= cr, write:add, read:del, close:add */
833 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
834 	/* old= cr, write:add, read:del, close:del */
835 	{ EPOLLOUT, EPOLL_CTL_MOD },
836 	/* old= cr, write:add, read:del, close:xxx */
837 	{ 0, 255 },
838 	/* old= cr, write:add, read:xxx, close:  0 */
839 	{ 0, 255 },
840 	/* old= cr, write:add, read:xxx, close:add */
841 	{ 0, 255 },
842 	/* old= cr, write:add, read:xxx, close:del */
843 	{ 0, 255 },
844 	/* old= cr, write:add, read:xxx, close:xxx */
845 	{ 0, 255 },
846 	/* old= cr, write:del, read:  0, close:  0 */
847 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
848 	/* old= cr, write:del, read:  0, close:add */
849 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
850 	/* old= cr, write:del, read:  0, close:del */
851 	{ EPOLLIN, EPOLL_CTL_MOD },
852 	/* old= cr, write:del, read:  0, close:xxx */
853 	{ 0, 255 },
854 	/* old= cr, write:del, read:add, close:  0 */
855 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
856 	/* old= cr, write:del, read:add, close:add */
857 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
858 	/* old= cr, write:del, read:add, close:del */
859 	{ EPOLLIN, EPOLL_CTL_MOD },
860 	/* old= cr, write:del, read:add, close:xxx */
861 	{ 0, 255 },
862 	/* old= cr, write:del, read:del, close:  0 */
863 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
864 	/* old= cr, write:del, read:del, close:add */
865 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
866 	/* old= cr, write:del, read:del, close:del */
867 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
868 	/* old= cr, write:del, read:del, close:xxx */
869 	{ 0, 255 },
870 	/* old= cr, write:del, read:xxx, close:  0 */
871 	{ 0, 255 },
872 	/* old= cr, write:del, read:xxx, close:add */
873 	{ 0, 255 },
874 	/* old= cr, write:del, read:xxx, close:del */
875 	{ 0, 255 },
876 	/* old= cr, write:del, read:xxx, close:xxx */
877 	{ 0, 255 },
878 	/* old= cr, write:xxx, read:  0, close:  0 */
879 	{ 0, 255 },
880 	/* old= cr, write:xxx, read:  0, close:add */
881 	{ 0, 255 },
882 	/* old= cr, write:xxx, read:  0, close:del */
883 	{ 0, 255 },
884 	/* old= cr, write:xxx, read:  0, close:xxx */
885 	{ 0, 255 },
886 	/* old= cr, write:xxx, read:add, close:  0 */
887 	{ 0, 255 },
888 	/* old= cr, write:xxx, read:add, close:add */
889 	{ 0, 255 },
890 	/* old= cr, write:xxx, read:add, close:del */
891 	{ 0, 255 },
892 	/* old= cr, write:xxx, read:add, close:xxx */
893 	{ 0, 255 },
894 	/* old= cr, write:xxx, read:del, close:  0 */
895 	{ 0, 255 },
896 	/* old= cr, write:xxx, read:del, close:add */
897 	{ 0, 255 },
898 	/* old= cr, write:xxx, read:del, close:del */
899 	{ 0, 255 },
900 	/* old= cr, write:xxx, read:del, close:xxx */
901 	{ 0, 255 },
902 	/* old= cr, write:xxx, read:xxx, close:  0 */
903 	{ 0, 255 },
904 	/* old= cr, write:xxx, read:xxx, close:add */
905 	{ 0, 255 },
906 	/* old= cr, write:xxx, read:xxx, close:del */
907 	{ 0, 255 },
908 	/* old= cr, write:xxx, read:xxx, close:xxx */
909 	{ 0, 255 },
910 	/* old= cw, write:  0, read:  0, close:  0 */
911 	{ 0, 0 },
912 	/* old= cw, write:  0, read:  0, close:add */
913 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
914 	/* old= cw, write:  0, read:  0, close:del */
915 	{ EPOLLOUT, EPOLL_CTL_MOD },
916 	/* old= cw, write:  0, read:  0, close:xxx */
917 	{ 0, 255 },
918 	/* old= cw, write:  0, read:add, close:  0 */
919 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
920 	/* old= cw, write:  0, read:add, close:add */
921 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
922 	/* old= cw, write:  0, read:add, close:del */
923 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
924 	/* old= cw, write:  0, read:add, close:xxx */
925 	{ 0, 255 },
926 	/* old= cw, write:  0, read:del, close:  0 */
927 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
928 	/* old= cw, write:  0, read:del, close:add */
929 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
930 	/* old= cw, write:  0, read:del, close:del */
931 	{ EPOLLOUT, EPOLL_CTL_MOD },
932 	/* old= cw, write:  0, read:del, close:xxx */
933 	{ 0, 255 },
934 	/* old= cw, write:  0, read:xxx, close:  0 */
935 	{ 0, 255 },
936 	/* old= cw, write:  0, read:xxx, close:add */
937 	{ 0, 255 },
938 	/* old= cw, write:  0, read:xxx, close:del */
939 	{ 0, 255 },
940 	/* old= cw, write:  0, read:xxx, close:xxx */
941 	{ 0, 255 },
942 	/* old= cw, write:add, read:  0, close:  0 */
943 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
944 	/* old= cw, write:add, read:  0, close:add */
945 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
946 	/* old= cw, write:add, read:  0, close:del */
947 	{ EPOLLOUT, EPOLL_CTL_MOD },
948 	/* old= cw, write:add, read:  0, close:xxx */
949 	{ 0, 255 },
950 	/* old= cw, write:add, read:add, close:  0 */
951 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
952 	/* old= cw, write:add, read:add, close:add */
953 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
954 	/* old= cw, write:add, read:add, close:del */
955 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
956 	/* old= cw, write:add, read:add, close:xxx */
957 	{ 0, 255 },
958 	/* old= cw, write:add, read:del, close:  0 */
959 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
960 	/* old= cw, write:add, read:del, close:add */
961 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
962 	/* old= cw, write:add, read:del, close:del */
963 	{ EPOLLOUT, EPOLL_CTL_MOD },
964 	/* old= cw, write:add, read:del, close:xxx */
965 	{ 0, 255 },
966 	/* old= cw, write:add, read:xxx, close:  0 */
967 	{ 0, 255 },
968 	/* old= cw, write:add, read:xxx, close:add */
969 	{ 0, 255 },
970 	/* old= cw, write:add, read:xxx, close:del */
971 	{ 0, 255 },
972 	/* old= cw, write:add, read:xxx, close:xxx */
973 	{ 0, 255 },
974 	/* old= cw, write:del, read:  0, close:  0 */
975 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
976 	/* old= cw, write:del, read:  0, close:add */
977 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
978 	/* old= cw, write:del, read:  0, close:del */
979 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
980 	/* old= cw, write:del, read:  0, close:xxx */
981 	{ 0, 255 },
982 	/* old= cw, write:del, read:add, close:  0 */
983 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
984 	/* old= cw, write:del, read:add, close:add */
985 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
986 	/* old= cw, write:del, read:add, close:del */
987 	{ EPOLLIN, EPOLL_CTL_MOD },
988 	/* old= cw, write:del, read:add, close:xxx */
989 	{ 0, 255 },
990 	/* old= cw, write:del, read:del, close:  0 */
991 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
992 	/* old= cw, write:del, read:del, close:add */
993 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
994 	/* old= cw, write:del, read:del, close:del */
995 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
996 	/* old= cw, write:del, read:del, close:xxx */
997 	{ 0, 255 },
998 	/* old= cw, write:del, read:xxx, close:  0 */
999 	{ 0, 255 },
1000 	/* old= cw, write:del, read:xxx, close:add */
1001 	{ 0, 255 },
1002 	/* old= cw, write:del, read:xxx, close:del */
1003 	{ 0, 255 },
1004 	/* old= cw, write:del, read:xxx, close:xxx */
1005 	{ 0, 255 },
1006 	/* old= cw, write:xxx, read:  0, close:  0 */
1007 	{ 0, 255 },
1008 	/* old= cw, write:xxx, read:  0, close:add */
1009 	{ 0, 255 },
1010 	/* old= cw, write:xxx, read:  0, close:del */
1011 	{ 0, 255 },
1012 	/* old= cw, write:xxx, read:  0, close:xxx */
1013 	{ 0, 255 },
1014 	/* old= cw, write:xxx, read:add, close:  0 */
1015 	{ 0, 255 },
1016 	/* old= cw, write:xxx, read:add, close:add */
1017 	{ 0, 255 },
1018 	/* old= cw, write:xxx, read:add, close:del */
1019 	{ 0, 255 },
1020 	/* old= cw, write:xxx, read:add, close:xxx */
1021 	{ 0, 255 },
1022 	/* old= cw, write:xxx, read:del, close:  0 */
1023 	{ 0, 255 },
1024 	/* old= cw, write:xxx, read:del, close:add */
1025 	{ 0, 255 },
1026 	/* old= cw, write:xxx, read:del, close:del */
1027 	{ 0, 255 },
1028 	/* old= cw, write:xxx, read:del, close:xxx */
1029 	{ 0, 255 },
1030 	/* old= cw, write:xxx, read:xxx, close:  0 */
1031 	{ 0, 255 },
1032 	/* old= cw, write:xxx, read:xxx, close:add */
1033 	{ 0, 255 },
1034 	/* old= cw, write:xxx, read:xxx, close:del */
1035 	{ 0, 255 },
1036 	/* old= cw, write:xxx, read:xxx, close:xxx */
1037 	{ 0, 255 },
1038 	/* old=crw, write:  0, read:  0, close:  0 */
1039 	{ 0, 0 },
1040 	/* old=crw, write:  0, read:  0, close:add */
1041 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1042 	/* old=crw, write:  0, read:  0, close:del */
1043 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
1044 	/* old=crw, write:  0, read:  0, close:xxx */
1045 	{ 0, 255 },
1046 	/* old=crw, write:  0, read:add, close:  0 */
1047 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1048 	/* old=crw, write:  0, read:add, close:add */
1049 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1050 	/* old=crw, write:  0, read:add, close:del */
1051 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
1052 	/* old=crw, write:  0, read:add, close:xxx */
1053 	{ 0, 255 },
1054 	/* old=crw, write:  0, read:del, close:  0 */
1055 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1056 	/* old=crw, write:  0, read:del, close:add */
1057 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1058 	/* old=crw, write:  0, read:del, close:del */
1059 	{ EPOLLOUT, EPOLL_CTL_MOD },
1060 	/* old=crw, write:  0, read:del, close:xxx */
1061 	{ 0, 255 },
1062 	/* old=crw, write:  0, read:xxx, close:  0 */
1063 	{ 0, 255 },
1064 	/* old=crw, write:  0, read:xxx, close:add */
1065 	{ 0, 255 },
1066 	/* old=crw, write:  0, read:xxx, close:del */
1067 	{ 0, 255 },
1068 	/* old=crw, write:  0, read:xxx, close:xxx */
1069 	{ 0, 255 },
1070 	/* old=crw, write:add, read:  0, close:  0 */
1071 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1072 	/* old=crw, write:add, read:  0, close:add */
1073 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1074 	/* old=crw, write:add, read:  0, close:del */
1075 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
1076 	/* old=crw, write:add, read:  0, close:xxx */
1077 	{ 0, 255 },
1078 	/* old=crw, write:add, read:add, close:  0 */
1079 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1080 	/* old=crw, write:add, read:add, close:add */
1081 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1082 	/* old=crw, write:add, read:add, close:del */
1083 	{ EPOLLIN|EPOLLOUT, EPOLL_CTL_MOD },
1084 	/* old=crw, write:add, read:add, close:xxx */
1085 	{ 0, 255 },
1086 	/* old=crw, write:add, read:del, close:  0 */
1087 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1088 	/* old=crw, write:add, read:del, close:add */
1089 	{ EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_MOD },
1090 	/* old=crw, write:add, read:del, close:del */
1091 	{ EPOLLOUT, EPOLL_CTL_MOD },
1092 	/* old=crw, write:add, read:del, close:xxx */
1093 	{ 0, 255 },
1094 	/* old=crw, write:add, read:xxx, close:  0 */
1095 	{ 0, 255 },
1096 	/* old=crw, write:add, read:xxx, close:add */
1097 	{ 0, 255 },
1098 	/* old=crw, write:add, read:xxx, close:del */
1099 	{ 0, 255 },
1100 	/* old=crw, write:add, read:xxx, close:xxx */
1101 	{ 0, 255 },
1102 	/* old=crw, write:del, read:  0, close:  0 */
1103 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
1104 	/* old=crw, write:del, read:  0, close:add */
1105 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
1106 	/* old=crw, write:del, read:  0, close:del */
1107 	{ EPOLLIN, EPOLL_CTL_MOD },
1108 	/* old=crw, write:del, read:  0, close:xxx */
1109 	{ 0, 255 },
1110 	/* old=crw, write:del, read:add, close:  0 */
1111 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
1112 	/* old=crw, write:del, read:add, close:add */
1113 	{ EPOLLIN|EPOLLRDHUP, EPOLL_CTL_MOD },
1114 	/* old=crw, write:del, read:add, close:del */
1115 	{ EPOLLIN, EPOLL_CTL_MOD },
1116 	/* old=crw, write:del, read:add, close:xxx */
1117 	{ 0, 255 },
1118 	/* old=crw, write:del, read:del, close:  0 */
1119 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
1120 	/* old=crw, write:del, read:del, close:add */
1121 	{ EPOLLRDHUP, EPOLL_CTL_MOD },
1122 	/* old=crw, write:del, read:del, close:del */
1123 	{ EPOLLIN|EPOLLOUT|EPOLLRDHUP, EPOLL_CTL_DEL },
1124 	/* old=crw, write:del, read:del, close:xxx */
1125 	{ 0, 255 },
1126 	/* old=crw, write:del, read:xxx, close:  0 */
1127 	{ 0, 255 },
1128 	/* old=crw, write:del, read:xxx, close:add */
1129 	{ 0, 255 },
1130 	/* old=crw, write:del, read:xxx, close:del */
1131 	{ 0, 255 },
1132 	/* old=crw, write:del, read:xxx, close:xxx */
1133 	{ 0, 255 },
1134 	/* old=crw, write:xxx, read:  0, close:  0 */
1135 	{ 0, 255 },
1136 	/* old=crw, write:xxx, read:  0, close:add */
1137 	{ 0, 255 },
1138 	/* old=crw, write:xxx, read:  0, close:del */
1139 	{ 0, 255 },
1140 	/* old=crw, write:xxx, read:  0, close:xxx */
1141 	{ 0, 255 },
1142 	/* old=crw, write:xxx, read:add, close:  0 */
1143 	{ 0, 255 },
1144 	/* old=crw, write:xxx, read:add, close:add */
1145 	{ 0, 255 },
1146 	/* old=crw, write:xxx, read:add, close:del */
1147 	{ 0, 255 },
1148 	/* old=crw, write:xxx, read:add, close:xxx */
1149 	{ 0, 255 },
1150 	/* old=crw, write:xxx, read:del, close:  0 */
1151 	{ 0, 255 },
1152 	/* old=crw, write:xxx, read:del, close:add */
1153 	{ 0, 255 },
1154 	/* old=crw, write:xxx, read:del, close:del */
1155 	{ 0, 255 },
1156 	/* old=crw, write:xxx, read:del, close:xxx */
1157 	{ 0, 255 },
1158 	/* old=crw, write:xxx, read:xxx, close:  0 */
1159 	{ 0, 255 },
1160 	/* old=crw, write:xxx, read:xxx, close:add */
1161 	{ 0, 255 },
1162 	/* old=crw, write:xxx, read:xxx, close:del */
1163 	{ 0, 255 },
1164 	/* old=crw, write:xxx, read:xxx, close:xxx */
1165 	{ 0, 255 },
1166 };
1167 
1168 #endif
1169