ugen_bulk_timeout

Users of x86 32bit machines following the howto use Eurotel Data Expres (CDMA) on Solaris will likely experience an error message from _cat_ after 10 seconds from establishing the connection: \*cat: input error on if1in10: I/O error\* It happens because the ugen_bulk_timeout tunable is not working (on particular platforms). The root cause is that the compiler has optimized a reference to this tunable away. Simply - the timeout value can't be tuned by changing the _/etc/system_ until the bug 6333195 is fixed. Thanks to Mirek for discovering it and thanks to authors of _DTrace_ tool, since it was quite simple to find the root cause by tracing the function flow in the kernel and dumping their arguments. Here is a list of possible workarounds:
  • periodically ping some machine through the sppp0 interface - your modem will not become idle.
  • use an ugly loop in shell: ( while :; do cat if1in10; done ) | pppd call etcdma > if1out11
  • use (at own risk) a small shell/mdb script cdma_ugen_bulk_timeout, which will increase the timeout. It runs the kernel debugger and modifies one instruction's operand (holding the timeout value) in ugen_epx_bulk_req() function. The change is valid until a next reboot and should be done before starting _pppd_ . You should be a superuser to launch it. The correct output looks like:
    
    noname:/tmp# chmod +x /tmp/cdma_ugen_bulk_timeout
    noname:/tmp# /tmp/cdma_ugen_bulk_timeout
    ugen_epx_bulk_req+0x5a:         0xa             =       0x57e40
    
TBD: I'd like to use a special launcher, which will restart _I/O_ on timeout. That's what I'm currently working on and hope it will sort out the problems with ugen_bulk_timeout since no change of the tunable will be required.
Comments:

Post a Comment:
Comments are closed for this entry.
About

vita78

Search

Categories
Archives
« duben 2014
PoÚtStČtSoNe
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    
       
Today