<div dir="ltr"><div>Hi, Ivan.</div>
<div> </div>
<div>Unfortunately I don't see any improvement after applying the patch. The logs are attached..</div>
<div> </div>
<div>Regards,</div>
<div>Vladimir</div>
<div><br> </div>
<div class="gmail_quote">On Thu, Nov 1, 2012 at 10:55 PM, Ivan Kluchnikov <span dir="ltr"><<a href="mailto:Ivan.Kluchnikov@fairwaves.ru" target="_blank">Ivan.Kluchnikov@fairwaves.ru</a>></span> wrote:<br>
<blockquote style="BORDER-LEFT:#ccc 1px solid;MARGIN:0px 0px 0px 0.8ex;PADDING-LEFT:1ex" class="gmail_quote">Hi, Vladimir!<br><br>Thank you for your fixes, I will check and apply them tomorrow!<br>In attachment you can find patch for osmo-pcu.<br>
I guess, that this patch should fix problem of receiving PACKET<br>DOWNLINK ACK messages with unknown FN.<br>Please, check it with your phones and notify me about results.<br><br>2012/11/1 Vladimir Rolbin <<a href="mailto:vrolbin@gmail.com">vrolbin@gmail.com</a>>:<br>
> Hi, Ivan<br>><br>> 1) First pls fix the following critical bug, readIndex is modified by<br>> readField cause delivered by reference, so every not first iteration it'll<br>> have a bad value :<br>><br>
> *** ./DCCHDispatch.bug.cpp 2012-11-01 12:33:43.000000000 +0200<br>> --- ./DCCHDispatch.cpp 2012-11-01 16:48:29.000000000 +0200<br>> ***************<br>> *** 469,474 ****<br>> --- 469,475 ----<br>> }<br>
> L3Frame *l3 = new L3Frame(msg->tail(8), UNIT_DATA);<br>> COUT("RX: [ BTS <- PCU ] AGCH: " << *l3);<br>> + readIndex = 0; //vr, fix<br>> l2Len = msg->readField(readIndex, len);<br>
> l3->L2Length(l2Len);<br>> AGCH->send(l3);<br>><br>><br>> or ( I like it more )<br>><br>> *** ./DCCHDispatch.bug.cpp 2012-11-01 12:33:43.000000000 +0200<br>> --- ./DCCHDispatch.fix0.cpp 2012-11-01 17:58:15.000000000 +0200<br>
> ***************<br>> *** 431,438 ****<br>><br>> char buf[MAX_UDP_LENGTH];<br>><br>> - unsigned len = 6;<br>> - size_t readIndex = 0;<br>> size_t l2Len = 0;<br>><br>> // Send to PCU PhConnectInd primitive.<br>
> --- 431,436 ----<br>> ***************<br>> *** 469,475 ****<br>> }<br>> L3Frame *l3 = new L3Frame(msg->tail(8), UNIT_DATA);<br>> COUT("RX: [ BTS <- PCU ] AGCH: " << *l3);<br>
> ! l2Len = msg->readField(readIndex, len);<br>> l3->L2Length(l2Len);<br>> AGCH->send(l3);<br>> txPhDataIndCnf(*msg, gBTS.time());<br>> --- 467,473 ----<br>> }<br>> L3Frame *l3 = new L3Frame(msg->tail(8), UNIT_DATA);<br>
> COUT("RX: [ BTS <- PCU ] AGCH: " << *l3);<br>> ! l2Len = msg->peekField(0, 6);<br>> l3->L2Length(l2Len);<br>> AGCH->send(l3);<br>> txPhDataIndCnf(*msg, gBTS.time());<br>
> ***************<br>> *** 479,486 ****<br>> L3Frame *msg1 = new L3Frame(msg->tail(8*4), UNIT_DATA);<br>> L3Frame *msg2 = new L3Frame(msg->tail(8*4), UNIT_DATA);<br>> COUT("RX: [ BTS <- PCU ] PCH: " << *msg1);<br>
> ! readIndex = 24;<br>> ! l2Len = msg->readField(readIndex, len);<br>> msg1->L2Length(l2Len);<br>> msg2->L2Length(l2Len);<br>> // HACK -- We send every page twice.<br>> --- 477,483 ----<br>
> L3Frame *msg1 = new L3Frame(msg->tail(8*4), UNIT_DATA);<br>> L3Frame *msg2 = new L3Frame(msg->tail(8*4), UNIT_DATA);<br>> COUT("RX: [ BTS <- PCU ] PCH: " << *msg1);<br>
> ! l2Len = msg->peekField(8*3, 6);<br>> msg1->L2Length(l2Len);<br>> msg2->L2Length(l2Len);<br>> // HACK -- We send every page twice.<br>><br>><br>> I would reccomend also to fix BitVector.cpp known bug:<br>
> void BitVector::unpack(const unsigned char* src)<br>> {<br>> // Assumes MSB-first packing.<br>> unsigned bytes = size()/8;<br>> for (unsigned i=0; i<bytes; i++) {<br>> fillField(i*8,src[i],8);<br>
> }<br>> unsigned whole = bytes*8;<br>> unsigned rem = size() - whole;<br>> if (rem==0) return;<br>> fillField(whole,src[bytes] >> (8-rem),rem); //here<br>> }<br>><br>> USRPDevice.cpp known bug:<br>
> double USRPDevice::setTxGain(double dB) {<br>><br>> writeLock.lock();<br>> if (dB > maxTxGain()) dB = maxTxGain();<br>> if (dB < minTxGain()) dB = minTxGain();<br>> LOG(NOTICE) << "Setting TX gain to " << dB << " dB.";<br>
> if (!m_dbTx->set_gain(dB)) // here<br>> LOG(ERR) << "Error setting TX gain";<br>> writeLock.unlock();<br>><br>> return dB;<br>> }<br>><br>> BSIC calculation:<br>><br>
> prim->u.info_ind.bsic = (gConfig.getNum("GSM.Identity.BSIC.NCC") << 3) |<br>> gConfig.getNum("GSM.Identity.BSIC.BCC");<br>><br>><br>><br>> 2) With up to date OpenBTS pulled from git today and critical fix only I've<br>
> got the results identical to session 2 and 3 I've recorded yesterday. I<br>> attach the file with problematic scenario. I think you may recreate the<br>> problem with every SonyErricson supporting 3G and GSM (my env is Suse 11.4<br>
> or Ubuntu 11.10, libusb_1_0 and libusrp-3.4.2).<br>><br>> Regards,<br>> Vladimir<br>><br><span class="HOEnZb"><font color="#888888"><br><br><br>--<br>Regards,<br>Ivan Kluchnikov.<br><a href="http://fairwaves.ru/" target="_blank">http://fairwaves.ru</a><br>
</font></span></blockquote></div><br></div>