NSIS-ka
A free C++ implementation of NSIS protocols

Changeset 4532


Ignore:
Timestamp:
Oct 9, 2009, 12:05:47 AM (8 years ago)
Author:
stud-dettling
Message:
  • Further implemented AHO phase 2 / 2a.
Location:
qos-nslp/branches/20090610-qos-nslp-aho
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • qos-nslp/branches/20090610-qos-nslp-aho/include/info_spec.h

    r3053 r4532  
    7272                UnknownSESSION_ID               = 0x05,
    7373                MismatchingRSN                  = 0x06,
     74#ifdef USE_AHO
     75                InitQuery                       = 0x07,
     76                InitReserve                     = 0x08,
     77#endif
    7478                /// success
    7579                ReservationSuccessful           = 0x01,
  • qos-nslp/branches/20090610-qos-nslp-aho/src/QoS_StateModule.cpp

    r4530 r4532  
    280280
    281281        if (known_pdu->is_reserve()) {
    282                 DLog(state_manager::modname, color[blue] << "Received RESERVE message by the EST-MRM." << color[off]);
     282                DLog(state_manager::modname, color[blue] << "Received RESERVE-AHO message by the EST-MRM." << color[off]);
    283283
    284284                // create AHO_Context in aho_contextmap if necessary
     
    301301                // determine node role within AHO
    302302                NSLP_AHO_Context::node_role_t role = NSLP_AHO_Context::OTHER;
     303                hostaddress mn, ar_n;
    303304                NSLP_AHO_Context *aho_context = aho_contextmap.find(*sid);
    304305                if(aho_context != NULL) {
    305306                        aho_context->lock();
    306307                        role = aho_context->get_aho_node_role();
     308                        if(role == NSLP_AHO_Context::ARN) {
     309                                mn = aho_context->get_addr_mobile_node();
     310                        }
     311                        if(role == NSLP_AHO_Context::MN) {
     312                                ar_n = aho_context->get_addr_new_access_router();
     313                        }
    307314                        aho_context->unlock();
    308315                }
    309316
     317                /*
    310318                switch(role) {
    311319                case NSLP_AHO_Context::MN:
     
    322330                        break;
    323331                }
    324 
    325 
    326                 mri_pathcoupled pc_mri = rcvd_mri->get_mri_pc();
    327 
    328                 // TODO: have direction in mind!
    329                 // send message with PC-MRM
    330                 SignalingMsg* sigmsg = new SignalingMsg();
    331                 sigmsg->set_msg(known_pdu);
    332                 sigmsg->set_sid(*sid);
    333                 sigmsg->set_sig_mri(&pc_mri);
    334                 sigmsg->set_downstream(pc_mri.get_downstream());
    335                 sigmsg->send_or_delete();
     332                */
     333
     334
     335                // proceed with anticipated handover
     336                if(role == NSLP_AHO_Context::ARN) {
     337                        // we are ARN and start with AHO phase 2 / 2a
     338
     339                        mri_pathcoupled pc_mri = rcvd_mri->get_mri_pc();
     340                        bool down = pc_mri.get_downstream();
     341       
     342                        if(down) {
     343                                // downstream
     344
     345                                // send RESERVE message with PC-MRM
     346                                SignalingMsg* sigmsg = new SignalingMsg();
     347                                sigmsg->set_msg(known_pdu);
     348                                sigmsg->set_sid(*sid);
     349                                sigmsg->set_sig_mri(&pc_mri);
     350                                sigmsg->set_downstream(down);
     351                                sigmsg->send_or_delete();
     352                        }
     353                        else {
     354                                // upstream
     355
     356                                // create NOTIFY message
     357                                notifymsg* notify = new notifymsg();
     358
     359                                info_spec* send_error = new info_spec(NULL, info_spec::information, info_spec::InitQuery, 0);
     360                                notify->set_errorobject(send_error);
     361
     362                                qspec_object* send_qspec = known_pdu->get_qspec();
     363                                assert(send_qspec != NULL);
     364                                send_qspec = send_qspec->copy();
     365                                notify->set_qspec(send_qspec);
     366
     367
     368                                // send NOTIFY message with EST-MRM
     369                                hostaddress orig_sig_addr = rcvd_mri->get_dest_sig_address();
     370                                hostaddress dest_sig_addr = pc_mri.get_sourceaddress();
     371                                mri_explicitsigtarget *est_mri = new mri_explicitsigtarget(pc_mri, orig_sig_addr, dest_sig_addr);
     372
     373                                ExplicitSignalingMsg* sigmsg = new ExplicitSignalingMsg();
     374                                sigmsg->set_pdu(known_pdu);
     375                                sigmsg->set_sid(*sid);
     376                                sigmsg->set_sig_mri(est_mri);
     377                                sigmsg->send_or_delete();
     378                        }
     379                }
     380                else if(role == NSLP_AHO_Context::MN) {
     381                        // we are ARN and go on with AHO phase 2a
     382                        // TODO
     383                }
     384                else {
     385                        //
     386                        ILog(state_manager::modname, "Received RESERVE-AHO, but don't know what to do because I'm neither MN nor ARN!");
     387                        // TODO: check error code
     388                        return error_nothing_to_do;
     389                }
     390
    336391
    337392                return error_nothing_to_do;
     
    339394
    340395        if (known_pdu->is_response()) {
    341                 DLog(state_manager::modname, color[blue] << "Received RESPONSE message by the EST-MRM." << color[off]);
     396                DLog(state_manager::modname, color[blue] << "Received RESPONSE-AHO message by the EST-MRM." << color[off]);
    342397                return error_nothing_to_do;
    343398        }
    344399
    345400        if (known_pdu->is_query()) {
    346                 DLog(state_manager::modname, color[blue] << "Received QUERY message by the EST-MRM." << color[off]);
     401                DLog(state_manager::modname, color[blue] << "Received QUERY-AHO message by the EST-MRM." << color[off]);
    347402
    348403                // if there exists any out-dated context, delete it
Note: See TracChangeset for help on using the changeset viewer.