打开X2自建立开关X2链路就能自建立吗

赖鸣岗 2019-12-21 18:29:00

推荐回答

按照x2的协议栈从下往上一步步查,先看两个enb之间ip链路是不是好的,再看sctp的heartbeat是不是正常,然后看x2setup流程是不是有问题。
堵文斌2019-12-21 19:14:32

提示您:回答为网友贡献,仅供参考。

其他回答

  • LTE网络中eNB之间通过X2接口互相连接,形成了所谓Mesh型网络,这是LTE相对原来的传统移动通信网的重大变化,产生这种变化的原因在于网络结构中没有了RNC,原有的树型分支结构被扁平化,使得基站承担更多的无线资源管理责任,需要更多地和其相邻的基站直接对话,从而保证用户在整个网络中的无缝切换。LTE中的切换类型包括eNB内的切换和eNB间的切换,其中eNB间切换又分为S1切换和X2切换。要实现X2接口切换,除了必要的邻区关系,还要求完成X2接口的配置。在实际规划中,X2口规划是基于邻区关系的,只要把邻区关系中属于不同eNB的关系找出来,就是X2关系了。在eRAN1.0版本中每个eNB最多只能配置16个X2,但实际经常会出现多于16个X2的情况,此时可以按距离排序,删除多余的,在eRAN1.1及eRAN2.0版本都扩展到可以支持32个,一般来说就不会出现此类问题了。同时ANR功能也可以自动对X2口进行维护,这样也可以解决一些X2口漏配或配置错误的问题。
    章西林2019-12-21 19:57:58
  • X2是一个规范的形式从10.3Gb/s的为10.5Gb/s的数据传输速率为10Gb/s的光纤光纤转发器它是特定协议:10G以太网或10G光纤通道版本。X2的转发器,用于在数据通信光纤链路的X2可插拔模块允许企业公司和服务供应商提供可扩展性和易于部署的10千兆位以太网服务,在他们的网络。双方的DWDMX2ER40km和DWDMX2ZR80公里可用于DWDM10G以太网应用。专业的光模块生产厂家——深圳市万兆通光电。
    赵风艳2019-12-21 19:38:54
  • 如果指自建立方式,包括两种,一个是anr触发主动发起,另一种是对端发起x2建立,本端被动建立。
    齐景波2019-12-21 18:57:33
  • 1eNB间通过X2口切换ØA3或A4触发事件上报,当目标小区和源小区分别属于2个X2链路的eNB时,引发eNB间的X2切换,前提是2个eNB之间配置了X2关系Ø当源eNB收到UE的测量上报,并判决UE向目标eNB切换时,会直接通过X2接口向目标eNB申请资源,完成目标小区的资源准备,之后通过空口的重配消息通知UE向目标小区切换,在切换成功后,目标eNB通知源eNB释放原来小区的无线资源。此外还要将源eNB未发送的数据转发给目标eNB,并更新用户平面和控制平面的节点关系。2eNB间通过S1口切换ØS1切换的流程和X2类似,不同点在于有没有eNB之间的X2链路。如果没有配置X2链路,eNB间的切换走S1口切换;如果同时配置了X2和S1链路,eNB间的切换优先走X2切换。Ø如果选择了S1切换,则HandoverRequest、HandoverRequestAcknowledge及数据转发需要走S1口转发一般在国内X2切换开关没有打开,所以大部分切换还是基于S1切换的。
    连丽芳2019-12-21 18:41:28

相关问答

#include"stdio.h"#include"stdlib.h"#defineSTACK_INIT_SIZE10//栈的初始长度#defineSTACKINCREMENT5//栈的追加长度typedefstructbitree{chardata;structbitree*lchild,*rchild;}bitree;//二叉树结点定义typedefstruct{bitree**base;bitree**top;intstacksize;}sqstack;//链栈结点定义top栈顶base栈底且栈元素是指向二叉树结点的二级指针//建立一个空栈intinitstacksqstack*s{s->base=bitree*mallocSTACK_INIT_SIZE*sizeofbitree;//栈底指向开辟空间if!s->baseexit1;//抛出异常s->top=s->base;//栈顶=栈尾表示栈空s->stacksize=STACK_INIT_SIZE;//栈长度为开辟空间大小return1;}//进栈intpushsqstack*s,bitree*e{ifs->top-s->base>=s->stacksize//如果栈满追加开辟空间{s->base=bitree*reallocs->base,s->stacksize+STACKINCREMENT*sizeofbitree;if!s->baseexit1;//抛出异常s->top=s->base+s->stacksize;//感觉这一句没用s->stacksize+=STACKINCREMENT;}*s->top=e;s->top++;//进栈栈顶后移return1;}//出栈intpopsqstack*s,bitree**e{ifs->top==s->basereturn0;//栈空返回0--s->top;*e=*s->top;//栈顶前移取出栈顶元素给ereturn1;}//取栈顶intgettopsqstack*s,bitree**e//去栈顶元素注意top指向的是栈顶的后一个{ifs->top==s->basereturn0;//所以s->top-1*e=*s->top-1;return1;}/*------------------------非递归-----先序建立二叉树----------------------------------*/bitree*createprebitree{charch;bitree*ht,*p,*q;sqstack*s;s=mallocsizeofbitree;//加上这一句为s初始化开辟空间ch=getchar;ifch!=''#''&&ch!=''\n''/*输入二叉树先序顺序是以完全二叉树的先序顺序不是完全二叉树的把没有的结点以#表示*/{ht=bitree*mallocsizeofbitree;ht->data=ch;ht->lchild=ht->rchild=NULL;p=ht;initstacks;pushs,ht;//根节点进栈whilech=getchar!=''\n''//算{ifch!=''#''{q=bitree*mallocsizeofbitree;//法q->data=ch;//ifp==*s->top-1p->lchild=q;//核elsep->rchild=q;//pushs,q;p=q;//心}//else{ifp==*s->top-1p->lchild=NULL;//的elsep->rchild=NULL;//pops,&p;}//步//}//骤returnht;}elsereturnNULL;}/*--------------------------递归---------先序建立二叉树-------------------------------*/voidCreateBiTreebitree**T{//按先序次序输入二叉树中的结点的值,空格字符表示空树,//构造二叉链表表示二叉树charch;scanf"%c",&ch;ifch==''#''*T=NULL;else{*T=bitree*mallocsizeofbitree;if!*Texit1;*T->data=ch;//生成根结点CreateBiTree&*T->lchild;//构造左子树CreateBiTree&*T->rchild;//构造右子树}}/*--------------------------非递归-------中序建立二叉树-------------------------------*//*--------------------------递归---------中序建立二叉树-------------------------------*//*--------------------------非递归-------后序建立二叉树-------------------------------*//*--------------------------递归---------后序建立二叉树-------------------------------*//*-----------------------非递归------先序输出二叉树------------------------------*/voidpreordertraversebitree*h{sqstackm;initstack&m;whileh||m.base!=m.top{ifh{push&m,h;printf"%c",h->data;h=h->lchild;}else{pop&m,&h;h=h->rchild;}}}/*------------------------非递归-----中序输出二叉树----------------------------*/voidinordertraversebitree*h{sqstackm;initstack&m;whileh||m.base!=m.top{ifh{push&m,h;h=h->lchild;}else{pop&m,&h;printf"%c",h->data;h=h->rchild;}}}/*---------------------非递归----后序遍历二叉树----------------------------------*/voidpostordertraversebitree*h{sqstackm;initstack&m;whileh||m.base!=m.top{ifh{push&m,h;h=h->lchild;}else{bitree*r;//使用r结点表示访问了右子树代替标志域gettop&m,&h;ifh->rchild&&h->rchild!=r{h=h->rchild;push&m,h;h=h->lchild;}else{pop&m,&h;printf"%c",h->data;r=h;h=NULL;}}}}//层次遍历二叉树用队列哈哈以后做/*-------------------------------主过程-------------------------------*/intmain{bitree*ht;printf"先序非递归建立一个二叉树:";ifht=createprebitree!=NULL//非递归建立//CreateBiTree&ht;//ifht!=NULL//递归建立{printf"先序遍历输出二叉树:";preordertraverseht;putchar''\n'';printf"中序遍历输出二叉树:";inordertraverseht;putchar''\n'';printf"后序遍历输出二叉树:";postordertraverseht;putchar''\n'';}elseprintf"空二叉树\n";}这是先序递归和非递归建立二叉树和先、中、后的遍历输出。
文件main.cpp代码如下:#include//malloc等#include//标准输入输出头文件,包括EOF=^Z或F6,NULL等#include//atoi,exit#include//数学函数头文件,包括floor,ceil,abs等#defineClearBiTreeDestroyBiTree//清空二叉树和销毁二叉树的操作一样typedefstructBiTNode{intdata;//结点的值BiTNode*lchild,*rchild;//左右孩子指针}BiTNode,*BiTree;intNil=0;//设整型以0为空voidvisitinte{printf"%d",e;//以整型格式输出}voidInitBiTreeBiTree&T{//操作结果:构造空二叉树TT=NULL;}voidCreateBiTreeBiTree&T{//算法6.4:按先序次序输入二叉树中结点的值可为字符型或整型,在主程中定义,//构造二叉链表表示的二叉树T。变量Nil表示空子树。修改intnumber;scanf"%d",&number;//输入结点的值ifnumber==Nil//结点的值为空T=NULL;else//结点的值不为空{T=BiTreemallocsizeofBiTNode;//生成根结点if!TexitOVERFLOW;T->data=number;//将值赋给T所指结点CreateBiTreeT->lchild;//递归构造左子树CreateBiTreeT->rchild;//递归构造右子树}}voidDestroyBiTreeBiTree&T{//初始条件:二叉树T存在。操作结果:销毁二叉树TifT//非空树{DestroyBiTreeT->lchild;//递归销毁左子树,如无左子树,则不执行任何操作DestroyBiTreeT->rchild;//递归销毁右子树,如无右子树,则不执行任何操作freeT;//释放根结点T=NULL;//空指针赋0}}voidPreOrderTraverseBiTreeT,void*Visitint{//初始条件:二叉树T存在,Visit是对结点操作的应用函数。修改算法6.1//操作结果:先序递归遍历T,对每个结点调用函数Visit一次且仅一次ifT//T不空{VisitT->data;//先访问根结点PreOrderTraverseT->lchild,Visit;//再先序遍历左子树PreOrderTraverseT->rchild,Visit;//最后先序遍历右子树}}voidInOrderTraverseBiTreeT,void*Visitint{//初始条件:二叉树T存在,Visit是对结点操作的应用函数//操作结果:中序递归遍历T,对每个结点调用函数Visit一次且仅一次ifT{InOrderTraverseT->lchild,Visit;//先中序遍历左子树VisitT->data;//再访问根结点InOrderTraverseT->rchild,Visit;//最后中序遍历右子树}}voidPostOrderTraverseBiTreeT,void*Visitint{//初始条件:二叉树T存在,Visit是对结点操作的应用函数//操作结果:后序递归遍历T,对每个结点调用函数Visit一次且仅一次ifT//T不空{PostOrderTraverseT->lchild,Visit;//先后序遍历左子树PostOrderTraverseT->rchild,Visit;//再后序遍历右子树VisitT->data;//最后访问根结点}}voidmain{BiTreeT;InitBiTreeT;//初始化二叉树Tprintf"按先序次序输入二叉树中结点的值,输入0表示节点为空,输入范例:1200300\n";CreateBiTreeT;//建立二叉树Tprintf"先序递归遍历二叉树:\n";PreOrderTraverseT,visit;//先序递归遍历二叉树Tprintf"\n中序递归遍历二叉树:\n";InOrderTraverseT,visit;//中序递归遍历二叉树Tprintf"\n后序递归遍历二叉树:\n";PostOrderTraverseT,visit;//后序递归遍历二叉树T。