| 
									
										
										
										
											2015-09-17 20:18:29 -05:00
										 |  |  | The read event demultiplexer | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     select(2) on Unix FDs | 
					
						
							|  |  |  |         ... | 
					
						
							|  |  |  |     Fill up AX.25 interface packet buffers | 
					
						
							|  |  |  |         ... | 
					
						
							|  |  |  |     Decode as many packets as possible on each interface | 
					
						
							|  |  |  |         ... | 
					
						
							|  |  |  |     Fill up buffers for pending caller reads, open new connections | 
					
						
							|  |  |  |         ... | 
					
						
							|  |  |  |     If: | 
					
						
							|  |  |  |         * ax25_select() is called: Notify caller of I/O events | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         * ax25_read() is called: Provide caller access to requested | 
					
						
							|  |  |  |           buffer region | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Buffer may be discarded upon next ax25_read() event, but should not | 
					
						
							|  |  |  |     be discarded after an ax25_select() necessarily. | 
					
						
							| 
									
										
										
										
											2015-09-17 20:34:27 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | Most crucially: This sequence of events is triggered by ANY of the I/O calls, | 
					
						
							|  |  |  | so as to facilitate the same sort of behaviors that one would expect when | 
					
						
							|  |  |  | letting a kernel thread be responsible for all this activity from a userland | 
					
						
							|  |  |  | process' perspective.  The main difference in behavior in any of these calls is | 
					
						
							|  |  |  | the result provided to the caller. |