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