<div dir="ltr"><div>Ok, thanks for patch. I will be able to ckeck ot only on Sunday ..</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="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" 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" target="_blank">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><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>