ubuntu 16.04规避srsLTE报告”Sequence number synch failure“的BUG

参考ubuntu 16.04系统LimeSDR使用srsLTE搭建LTE实验环境构建实验环境,在实际运行时候,手机设备无法正常连接到基站,报告如下错误信息:

Received Attach Request 
Attach Request -- IMSI-style attach request
Attach Request -- UE is already attached.Attach request -- IMSI: 208920100001100
Attach request -- eNB-UE S1AP Id: 3, MME-UE S1AP Id: 3
Attach request -- Attach type: 2
Attach Request -- UE Network Capabilities EEA: 11110000
Attach Request -- UE Network Capabilities EIA: 11110000
Attach Request -- MS Network Capabilities Present: true
PDN Connectivity Request -- EPS Bearer Identity requested: 0
PDN Connectivity Request -- Procedure Transaction Id: 1
PDN Connectivity Request -- ESM Information Transfer requested: false
Downlink NAS: Sending Authentication Request
Plain UL NAS: Authentication Failure
Sequence number synch failure
Downlink NAS: Sent Authentication Request
DL NAS: Sent Downlink NAS Message. DL NAS Count=0, UL NAS count=1
DL NAS: MME UE S1AP id 3
Plain UL NAS: Authentication Failure
Sequence number synch failure
Downlink NAS: Sent Authentication Request
DL NAS: Sent Downlink NAS Message. DL NAS Count=0, UL NAS count=2
DL NAS: MME UE S1AP id 3
Received UE Context Release Request. MME-UE S1AP Id 3
UE is not ECM connected. No need to release S1-U. MME UE S1AP Id 3
UE is ECM IDLE.

初步分析BUG的原因是如下函数在重新生成同步序列号的时候出现错误:

bool resync_sqn_milenage(uint64_t imsi, uint8_t *auts)

目前还在分析,目前出现这个现象的时候,当EPC退出时候,应用一定向user_db.csv回写000000001b02,一旦出现这个数字,我们就没办法注册设备了。

目前的应对办法是把user_db.csv最后的SQN,要比设备最后一次通信记录的数据号大,如果SQN数字复位,可以让设备关机,应该就从0开始了。此问题还在持续跟进中。

OS X EI Caption(10.11.6)通过SSH启用VNC远程桌面

家里的一台Mac mini(Early 2009)安装了OS X EI Caption系统,启用了SSHVNC远程桌面。但是在某次系统更新的时候,由于涉及到Remote Desktop Client的更新,导致无法正常登录VNC远程桌面,但是可以正常使用SSH登录。

则使用如下命令重新启用VNC远程桌面服务:

$ export VNC_PASSWORD=mypasswd

$ sudo  /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -access -on -clientopts -setvnclegacy -vnclegacy yes -setreqperm -reqperm yes -clientopts -setvncpw -vncpw $VNC_PASSWORD -restart -agent -privs -all

如果需要关闭VNC远程桌面服务,则使用如下命令:

$ sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -deactivate -configure -access -off

参考链接


How to enable OS X screen sharing (VNC) through SSH?

srsLTE使用LimeSDR代码分析PHY层流程

数据接收流向


RF处理线程

lib/src/phy/rf/rf_soapy_imp.c
int rf_soapy_recv_with_time(void *h,
void *data,
uint32_t nsamples,
bool blocking,
time_t *secs,
double *frac_secs)

->

 lib/src/phy/rf/rf_dev.h
int (*srslte_rf_recv_with_time)(void *h, void *data, uint32_t nsamples,
bool blocking, time_t *secs,double *frac_secs)

->

lib/src/radio/radio_multi.cc

bool rx_now(cf_t *buffer[SRSLTE_MAX_PORTS], uint32_t nof_samples, srslte_timestamp_t* rxd_time)

->

srsenb/src/phy/txrx.cc
void run_thread() 接收完成后,触发信号,通知后续线程,也就是后面的发送接收线程。

eNB收发处理线程

srsenb/src/phy/phch_worker.cc
void work_imp();

->

srsenb/src/phy/phch_worker.cc
void srslte_enb_ul_fft(srslte_enb_ul_t *q)

填充关键的srslte_enb_ul_t->sf_symbols,这个指针在 int srslte_ofdm_rx_init(srslte_ofdm_t *q, srslte_cp_t cp_type, cf_t *in_buffer,cf_t *out_buffer,uint32_t max_prb)函数中被赋值,被共享,因此后面会不好理解何时srslte_enb_ul_t->sf_symbols被赋值

另外就是关注 int srslte_enb_ul_init(srslte_enb_ul_t *q,cf_t *in_buffer,uint32_t max_prb)中对于signal_buffer_rx的共享方式,也能解释后面的不需要拷贝内存的操作,主要就是指针被共享了。

srsenb/src/phy/phch_worker.cc
int decode_pucch()

->

lib/src/phy/enb/enb_ul.c
int srslte_enb_ul_get_pucch(srslte_enb_ul_t *q, uint16_t rnti,
uint32_t pdcch_n_cce, uint32_t sf_rx,
srslte_uci_data_t *uci_data)

->

lib/src/phy/enb/enb_ul.c
int get_pucch(srslte_enb_ul_t *q, uint16_t rnti,
uint32_t pdcch_n_cce, uint32_t sf_rx,
srslte_uci_data_t *uci_data, uint8_t bits[SRSLTE_PUCCH_MAX_BITS], uint32_t nof_bits)

->

lib/src/phy/phch/pusch.c
int srslte_pusch_decode(srslte_pusch_t *q,
srslte_pusch_cfg_t *cfg, srslte_softbuffer_rx_t *softbuffer,
cf_t *sf_symbols,
cf_t *ce, float noise_estimate, uint16_t rnti,
uint8_t *data, srslte_cqi_value_t *cqi_value, srslte_uci_data_t *uci_data)

解码函数在pucch.c,pusch.c中都存在
pucch主要是在上行上传送控制信息,cqi,ri,pmi和harq的应答
pusch除了传送控制信息外还要传送上行数据
两者在频域上所处的位置不同,pucch处于频带的两端,pusch处于中间,占据绝大部分资源
因此我们这里主要关注pusch

->

lib/src/phy/modem/demod_soft.c
int srslte_demod_soft_demodulate_s(srslte_mod_t modulation, const cf_t* symbols, short* llr, int nsymbols)(QPSK解码