Example #1
0
//---------------------------------------------------------------------------
//For demo, add automatically a radio bearer
//Equivalent to rb add send 0 5 2
void nasrg_ASCTL_start_default_rb(struct cx_entity *cx){
//---------------------------------------------------------------------------
#ifdef DEMO_3GSM
	struct rb_entity *rb;
  int status;

// Start debug information
#ifdef GRAAL_DEBUG_DC
	printk("nasrg_ASCTL_start_default_rb - begin \n");
#endif
  if (!cx){
 	  printk("nasrg_ASCTL_start_default_rb - input parameter cx is NULL \n");
    return;
  }
// End debug information

//	rb=graal_COMMON_add_rb(cx, 5, 2);
	rb = nasrg_COMMON_add_rb(cx, NASRG_DEFAULTRAB_RBID, NASRG_DEFAULTRAB_QoS);
	if (rb!=NULL){
    rb->cnxid = (GRAAL_RB_MAX_NUM * cx->lcr)+1;
    //rb->default_rab =1;
    rb->dscp = NASRG_DEFAULTRAB_DSCP;
		status=nasrg_ASCTL_DC_send_rb_establish_request(cx, rb);
  }
	else
		status=-GRAAL_ERROR_NOMEMORY;
#ifdef GRAAL_DEBUG_DC
	printk("nasrg_ASCTL_start_default_rb - end %d \n",status);
#endif
}
///////////////////////////////////////////////////////////////////////////////
// Radio Bearer Establishment
//---------------------------------------------------------------------------
void nasrg_set_msg_rb_establishment_reply(struct nas_msg_rb_establishment_reply *msgrep, struct nas_msg_rb_establishment_request *msgreq)
{
  //---------------------------------------------------------------------------
  if ((msgreq->rab_id<5)||(msgreq->rab_id>(NAS_RB_MAX_NUM-1)))
    msgrep->status=-NAS_ERROR_NOTCORRECTRABI;
  else {
    struct cx_entity *cx;
    cx=nasrg_COMMON_search_cx(msgreq->lcr);

    if (cx!=NULL) { //not multicast
      struct rb_entity *rb;
      rb=nasrg_COMMON_add_rb(cx, msgreq->rab_id, msgreq->qos);

      if (rb!=NULL) {
        rb->cnxid = msgreq->cnxid;
        rb->dscp = msgreq->dscp_dl;
        rb->dscp_ul = msgreq->dscp_ul;
        msgrep->status=nasrg_ASCTL_DC_send_rb_establish_request(cx, rb);
      } else {
        msgrep->status=-NAS_ERROR_NOMEMORY;
      }
    } else { //no MT found
      if (msgreq->mcast_flag) { //multicast
        int mbms_ix=0; // should allocate index based on Service_id /cnxid / MC IP address
        //
        gpriv->mbms_rb[mbms_ix].cnxid = msgreq->cnxid;
        gpriv->mbms_rb[mbms_ix].serviceId = msgreq->cnxid;
        gpriv->mbms_rb[mbms_ix].sessionId = NASRG_TEMP_MBMS_SESSION_ID; //Temp hard coded
        gpriv->mbms_rb[mbms_ix].mbms_rbId = msgreq->rab_id;
        gpriv->mbms_rb[mbms_ix].sapi = NAS_DC_INPUT_SAPI;
#ifdef NAS_DEBUG_MBMS_PROT
        gpriv->mbms_rb[mbms_ix].sapi = NAS_DRB_INPUT_SAPI; //Only one RT-FIFO is used
#endif
        gpriv->mbms_rb[mbms_ix].qos = msgreq->qos;
        gpriv->mbms_rb[mbms_ix].dscp = msgreq->dscp_dl;
        gpriv->mbms_rb[mbms_ix].duration = NASRG_TEMP_MBMS_DURATION; //Temp hard coded
        memcpy ((char *)&(gpriv->mbms_rb[mbms_ix].mcast_address),(char *)&(msgreq->mcast_group), 16);
        msgrep->status=nasrg_ASCTL_GC_send_mbms_bearer_establish_req(mbms_ix);
      } else {
        msgrep->status=-NAS_ERROR_NOTCORRECTLCR;
      }

      msgrep->cnxid  = msgreq->cnxid;
    }
  }
}