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

Changeset 4525


Ignore:
Timestamp:
Oct 7, 2009, 1:53:46 AM (8 years ago)
Author:
stud-dettling
Message:
  • Next step in implementing AHO phase 1.
Location:
qos-nslp/branches/20090610-qos-nslp-aho
Files:
2 edited

Legend:

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

    r4522 r4525  
    139139#endif
    140140  void create_reserve_message_from_context(NSLP_Context *context, reservereq *res, rii *send_rii=NULL);
     141  void create_query_message_from_context(NSLP_Context *context, querymsg *query);
    141142 
    142143
  • qos-nslp/branches/20090610-qos-nslp-aho/src/QoS_StateModule.cpp

    r4524 r4525  
    40704070        // Anticipated Handover - Phase 1
    40714071        //
    4072         ILog(state_manager::modname, color[yellow] << "Starting with Anticipated Handover - Phase1 for Interface " << iface << color[off]);
     4072        ILog(state_manager::modname, color[yellow] << "Starting with Anticipated Handover - Phase 1 for Interface " << iface << color[off]);
    40734073       
    4074         // TODO: Locking ContextMap during Handover
     4074        // TODO: Lock ContextMap during Handover
    40754075        contextmap.traverse_contexts(this, &qos_nslp::state_manager::aho_phase_1, (void *)&l3_ar_n, NULL);
    40764076
     
    40954095
    40964096        //
    4097         // TODO: Anticipated Handover - Phase 3 / 2a
     4097        // Anticipated Handover - Phase 3 / 2a
    40984098        //
    4099         // TODO: maybe unlocking, see process_aho_event
     4099        ILog(state_manager::modname, color[yellow] << "Proceeding with Anticipated Handover - Phase 3 / 2a for Interface " << iface << color[off]);
     4100
     4101        // TODO: Unlock ContextMap, see process_aho_event
    41004102        contextmap.traverse_contexts(this, &qos_nslp::state_manager::ho_phase_3_2a, (void *)&l3_ar_n, (void *)&l3_mn);
    41014103
     
    41114113        NSLP_Context::qn_type_t qn_type;
    41124114        ntlp::mri_pathcoupled* pc_mri = NULL;
    4113         bool down;
     4115//      bool down;
    41144116        known_nslp_pdu *pdu;
    41154117
     
    41284130                qn_type = context->get_qn_type();
    41294131                pc_mri = context->get_mri()->copy();
    4130                 down = context->get_downstream();
     4132//              down = context->get_downstream();
     4133                // TODO: set role of this node for AHO
    41314134                context->unlock();
    41324135
    41334136                ntlp::sessionid sid(tmp_sid);
    41344137
    4135                 ILog(state_manager::modname, "Starting AHO-Phase1 for Reservation with SID [" << sid.to_string() << "]");
    4136 
     4138                ILog(state_manager::modname, "Starting AHO-Phase 1 for Reservation with SID [" << sid.to_string() << "]");
     4139
     4140                /*
    41374141                switch(qn_type) {
    41384142                        case NSLP_Context::QNI:
     
    41464150                                break;
    41474151                }
     4152                */
     4153                //ILog(state_manager::modname, "PC-MRI src: " << pc_mri->get_sourceaddress() << ", PC-MRI dst: " << pc_mri->get_destaddress());
     4154                ILog(state_manager::modname, "PC-MRI src address: " << pc_mri->get_sourceaddress());
     4155                ILog(state_manager::modname, "PC-MRI dst address: " << pc_mri->get_destaddress());
     4156
     4157                /*
    41484158                DLog(state_manager::modname, "PC-MRI src address: " << pc_mri->get_sourceaddress());
    41494159                DLog(state_manager::modname, "PC-MRI dst address: " << pc_mri->get_destaddress());
    41504160                DLog(state_manager::modname, "PC-MRI downstream: " << (pc_mri->get_downstream() ? "true" : "false"));
    4151                 DLog(state_manager::modname, "context->get_downstream(): " << (down ? "true" : "false"));
     4161//              DLog(state_manager::modname, "context->get_downstream(): " << (down ? "true" : "false"));
    41524162                DLog(state_manager::modname, "is_flow_source(): " << (is_flow_source(pc_mri) ? "true" : "false"));
    41534163                DLog(state_manager::modname, "is_flow_destination(): " << (is_flow_destination(pc_mri) ? "true" : "false"));
     4164                */
    41544165               
    41554166
     4167                // build RESERVE or QUERY message depending
     4168                // on the role of the mobile node
    41564169                if(qn_type == NSLP_Context::QNI) {
    41574170                        reservereq* res = new reservereq();
     
    41674180               
    41684181                        pdu = dynamic_cast<known_nslp_pdu*>(res);
    4169                         assert(pdu != NULL);
    41704182                }
    4171 
    4172                 if(qn_type == NSLP_Context::QNR) {
    4173                         // TODO: QUERY aus NSLP_Context bauen und per EST-MRM an AR_N senden
    4174                 }
    4175 
    4176 
    4177                 // TODO: determine origin signaling address
    4178                 // for the moment this is enough
    4179                 hostaddress orig_sig_addr;
    4180                 /*
    4181                 if(down) {
    4182                         orig_sig_addr = pc_mri->get_sourceaddress();
    4183                         pc_mri->set_sourceaddress(*l3_ar_n);
     4183                else if(qn_type == NSLP_Context::QNR) {
     4184                        querymsg* query = new querymsg();
     4185
     4186                        create_query_message_from_context(context, query);
     4187                        query->set_proxy_flag();
     4188
     4189                        pdu = dynamic_cast<known_nslp_pdu*>(query);
    41844190                }
    41854191                else {
    4186                         orig_sig_addr = pc_mri->get_destaddress();
    4187                         pc_mri->set_destaddress(*l3_ar_n);
     4192                        ERRLog(state_manager::modname, "AHO not implemented for case where mobile node is QNE of a reservation!");
     4193                        return;
    41884194                }
    4189                 */
     4195
     4196                assert(pdu != NULL);
     4197
     4198
     4199                // build mri
     4200                hostaddress orig_sig_addr;
    41904201                if(is_flow_source(pc_mri)) {
    41914202                        orig_sig_addr = pc_mri->get_sourceaddress();
     
    42034214                }
    42044215                mri_explicitsigtarget *est_mri = new mri_explicitsigtarget(*pc_mri, orig_sig_addr, *l3_ar_n);
     4216
     4217
     4218                // logging
     4219                if((qn_type == NSLP_Context::QNI) && (is_flow_source(pc_mri))) {
     4220                        ILog(state_manager::modname, "AHO with mobile node as sender and QNI, sending " << color[blue] << "RESERVE-AHO" << color[off] << "to address: " << *l3_ar_n);
     4221                }
     4222                else if((qn_type == NSLP_Context::QNI) && (is_flow_destination(pc_mri))) {
     4223                        ILog(state_manager::modname, "AHO with mobile node as receiver and QNI, sending " << color[blue] << "RESERVE-AHO" << color[off] << ".");
     4224                }
     4225                else if((qn_type == NSLP_Context::QNR) && (is_flow_source(pc_mri))) {
     4226                        ILog(state_manager::modname, "AHO with mobile node as sender and QNR, sending " << color[blue] << "QUERY-AHO" << color[off] << ".");
     4227                }
     4228                else if((qn_type == NSLP_Context::QNR) && (is_flow_destination(pc_mri))) {
     4229                        ILog(state_manager::modname, "AHO with mobile node as receiver and QNR, sending " << color[blue] << "QUERY-AHO" << color[off] << ".");
     4230                }
    42054231               
    42064232
     
    42484274        // TODO:
    42494275        // * only lock once
    4250         // * check if RESERVE message contains all needed objects
    42514276
    42524277        // QN-Type
     
    42944319        context->unlock();
    42954320        res->set_qspec(send_qspec);
     4321}
     4322
     4323
     4324/* This function creates a QUERY message from a given NSLP_Context.
     4325 * @param context the NSLP Context.
     4326 * @param query the QUERY message.
     4327 * */
     4328void state_manager::create_query_message_from_context(NSLP_Context *context, querymsg *query) {
     4329        uint128 n128;
     4330        bool found;
     4331
     4332        bound_sessionid *send_b_sid = NULL;
     4333        qspec_object* send_qspec = NULL;
     4334
     4335        assert(context != NULL);
     4336        assert(query != NULL);
     4337
     4338        // TODO:
     4339        // * only lock once
     4340
     4341        // Maybe useless ??
     4342        // QN-Type
     4343        context->lock();
     4344        NSLP_Context::qn_type_t type = context->get_qn_type();
     4345        context->unlock();
     4346        if (type == NSLP_Context::QNI) {
     4347                query->set_originator(true);
     4348        }
     4349
     4350        // Bound Session
     4351        context->lock();
     4352        found = context->get_bound_s_id(n128);
     4353        context->unlock();
     4354        if(found) {
     4355                send_b_sid = new bound_sessionid(n128);
     4356                query->set_bound_sid(send_b_sid);
     4357        }
     4358
     4359        // QSPEC
     4360        context->lock();
     4361        send_qspec = context->get_context_qspec();
     4362        if(send_qspec != NULL) {
     4363                send_qspec = send_qspec->copy();
     4364        }
     4365        context->unlock();
     4366        query->set_qspec(send_qspec);
    42964367}
    42974368
Note: See TracChangeset for help on using the changeset viewer.