<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>