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

Changeset 4506


Ignore:
Timestamp:
Oct 2, 2009, 12:02:59 AM (8 years ago)
Author:
stud-dettling
Message:
  • Implemented phase1 of AHO for case MN Sender and QNI
Location:
qos-nslp/branches/20090610-qos-nslp-aho
Files:
3 edited

Legend:

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

    r4505 r4506  
    136136  void process_ho_event(const string iface, macaddress &l2_ap_n, hostaddress &l3_ar_n, hostaddress &l3_mn);
    137137  void aho_phase_1(NSLP_Context* context, void *param1, void *param2);
    138 //  void ho_phase_3_2a(NSLP_Context* context, void *param1, void *param2);
     138  void ho_phase_3_2a(NSLP_Context* context, void *param1, void *param2);
    139139#endif
     140  void create_reserve_message_from_context(NSLP_Context *context, reservereq *res, rii *send_rii=NULL);
    140141 
    141142
  • qos-nslp/branches/20090610-qos-nslp-aho/src/QoS_StateModule.cpp

    r4505 r4506  
    17971797    else {
    17981798        // TODO: use QSPEC from context!
     1799        // Have RMF in mind!
    17991800    }
    18001801
     
    40204021        ILog(state_manager::modname, color[yellow] << "Starting with Anticipated Handover - Phase1 for Interface " << iface << color[off]);
    40214022       
    4022         // TODO: Locking while Handover
     4023        // TODO: Locking ContextMap during Handover
    40234024        contextmap.traverse_contexts(this, &qos_nslp::state_manager::aho_phase_1, (void *)&l3_ar_n, NULL);
    4024 
    4025 // ------------------------------------------------------------------------------------
    4026 /*
    4027         reservereq* res = new reservereq();
    4028         //copy_reserve_message(reservemsg, tunnel_res);
    4029 
    4030         rsn* new_rsn = new rsn();
    4031         new_rsn->generate_new();
    4032         res->set_rsn(new_rsn);
    4033 
    4034         // RII
    4035         //if (reservemsg->get_bool_rii()) {
    4036         //      rii* new_rii = new rii();
    4037         //      new_rii->generate_new();
    4038         //      new_rii->set_own(true);
    4039         //      tunnel_res->set_rii(new_rii);
    4040         //}
    4041 
    4042         res->set_originator(true);
    4043 
    4044         known_nslp_pdu *pdu = dynamic_cast<known_nslp_pdu*>(res);
    4045 
    4046         //bound_sessionid* send_bs = new bound_sessionid();
    4047         //send_bs->set(tsid);
    4048         //reservemsg->set_bound_sid(send_bs);
    4049 
    4050         ntlp::sessionid* sid = new sessionid();
    4051         sid->generate_random();
    4052 
    4053 // ------------------------------------------------------------------------------------
    4054 
    4055         hostaddress src_pc_mri("10.1.2.2");
    4056         hostaddress dst_pc_mri("10.2.4.4");
    4057         bool downstream = true;
    4058         hostaddress orig_sig_addr("10.1.2.1");
    4059         hostaddress dest_sig_addr("10.1.2.2");
    4060 
    4061         mri_pathcoupled pc_mri(src_pc_mri, 32, dst_pc_mri, 32, downstream);
    4062         mri_explicitsigtarget *est_mri = new mri_explicitsigtarget(pc_mri, orig_sig_addr, dest_sig_addr);
    4063 
    4064 // ------------------------------------------------------------------------------------
    4065 
    4066         ExplicitSignalingMsg* sigmsg = new ExplicitSignalingMsg();
    4067         sigmsg->set_pdu(pdu);
    4068         sigmsg->set_sid(*sid);
    4069         sigmsg->set_sig_mri(est_mri);
    4070         sigmsg->send_or_delete();
    4071 */
    40724025
    40734026        ILog(state_manager::modname, "process_aho_event() - done");
    40744027}
     4028
    40754029
    40764030/**
     
    40864040        ILog(state_manager::modname, "AHO-l3_mn: " << l3_mn);
    40874041
     4042        //
    40884043        // TODO: Anticipated Handover - Phase 3 / 2a
     4044        //
     4045        // TODO: maybe unlocking, see process_aho_event
     4046        contextmap.traverse_contexts(this, &qos_nslp::state_manager::ho_phase_3_2a, (void *)&l3_ar_n, (void *)&l3_mn);
    40894047
    40904048        ILog(state_manager::modname, "process_ho_event() - done");
    40914049}
     4050
    40924051
    40934052void state_manager::aho_phase_1(NSLP_Context* context, void *param1, void *param2) {
     
    40994058        const ntlp::mri_pathcoupled* pc_mri = NULL;
    41004059        bool down;
     4060        known_nslp_pdu *pdu;
    41014061
    41024062
     
    41074067        }
    41084068
    4109         ILog(state_manager::modname, "aho_phase_1: l3_ar_n: " << *l3_ar_n);
     4069        DLog(state_manager::modname, "aho_phase_1: l3_ar_n: " << *l3_ar_n);
    41104070
    41114071        if(context) {
     
    41194079                ntlp::sessionid sid(tmp_sid);
    41204080
    4121                 DLog(state_manager::modname, "Transfering Reservation with SID [" << sid.to_string() << "]");
     4081                ILog(state_manager::modname, "Starting AHO-Phase1 for Reservation with SID [" << sid.to_string() << "]");
     4082
    41224083                switch(qn_type) {
    41234084                        case NSLP_Context::QNI:
     
    41354096                DLog(state_manager::modname, "PC-MRI downstream: " << (pc_mri->get_downstream() ? "true" : "false" ));
    41364097                DLog(state_manager::modname, "context->get_downstream(): " << (down ? "true" : "false" ));
    4137         }
    4138 
    4139         if(qn_type == NSLP_Context::QNI) {
    4140                 // TODO: RESERE aus NSLP_Context bauen und per EST-MRM an AR_N senden
    4141         }
    4142 
    4143         if(qn_type == NSLP_Context::QNR) {
    4144                 // TODO: QUERY aus NSLP_Context bauen und per EST-MRM an AR_N senden
     4098               
     4099
     4100                if(qn_type == NSLP_Context::QNI) {
     4101                        reservereq* res = new reservereq();
     4102
     4103                        // generate new rii object
     4104                        rii *send_rii = new rii();
     4105                        send_rii->generate_new();
     4106                        send_rii->set_own(true);
     4107                        send_rii->set_is_reserve(true);
     4108
     4109                        create_reserve_message_from_context(context, res, send_rii);
     4110                        res->set_proxy_flag();
     4111               
     4112                        pdu = dynamic_cast<known_nslp_pdu*>(res);
     4113                        assert(pdu != NULL);
     4114                }
     4115
     4116                if(qn_type == NSLP_Context::QNR) {
     4117                        // TODO: QUERY aus NSLP_Context bauen und per EST-MRM an AR_N senden
     4118                }
     4119
     4120
     4121                /*
     4122                hostaddress src_pc_mri("10.1.2.2");
     4123                hostaddress dst_pc_mri("10.2.4.4");
     4124                bool downstream = true;
     4125
     4126                hostaddress orig_sig_addr("10.1.2.1");
     4127                hostaddress dest_sig_addr("10.1.2.2");
     4128
     4129                mri_pathcoupled pc_mri(src_pc_mri, 32, dst_pc_mri, 32, downstream);
     4130                mri_explicitsigtarget *est_mri = new mri_explicitsigtarget(pc_mri, orig_sig_addr, dest_sig_addr);
     4131                */
     4132
     4133                // TODO: determine origin signaling address
     4134                // for the moment this is enough
     4135                hostaddress orig_sig_addr;
     4136                if(down) {
     4137                        orig_sig_addr = pc_mri->get_sourceaddress();
     4138                }
     4139                else {
     4140                        orig_sig_addr = pc_mri->get_destaddress();
     4141                }
     4142                mri_explicitsigtarget *est_mri = new mri_explicitsigtarget(*pc_mri, orig_sig_addr, *l3_ar_n);
     4143               
     4144
     4145                // send message
     4146                ExplicitSignalingMsg* sigmsg = new ExplicitSignalingMsg();
     4147                sigmsg->set_pdu(pdu);
     4148                sigmsg->set_sid(tmp_sid);
     4149                sigmsg->set_sig_mri(est_mri);
     4150                sigmsg->send_or_delete();
    41454151        }
    41464152
    41474153        ILog(state_manager::modname, "aho_phase_1() - done");
    41484154}
     4155
     4156
     4157void state_manager::ho_phase_3_2a(NSLP_Context* context, void *param1, void *param2) {
     4158        ILog(state_manager::modname, "aho_phase_3_2a)");
     4159
     4160        //
     4161
     4162        ILog(state_manager::modname, "aho_phase_3_2a() - done");
     4163}
    41494164#endif // USE_AHO
     4165
     4166
     4167/* This function creates a RESERVE message from a given NSLP_Context.
     4168 * @param context the NSLP Context.
     4169 * @param res the RESERVE message.
     4170 * @param rii RII object to use in RESERVE message, NULL if none.
     4171 * */
     4172void state_manager::create_reserve_message_from_context(NSLP_Context *context, reservereq *res, rii *send_rii) {
     4173        uint32 n32;
     4174        uint128 n128;
     4175        bool found;
     4176
     4177        rsn *send_rsn = NULL;
     4178        rp *send_refresh_period = NULL;
     4179        bound_sessionid *send_b_sid = NULL;
     4180        qspec_object* send_qspec = NULL;
     4181
     4182
     4183        assert(context != NULL);
     4184        assert(res != NULL);
     4185       
     4186        // TODO:
     4187        // * only lock once
     4188        // * check if RESERVE message contains all needed objects
     4189
     4190        // QN-Type
     4191        context->lock();
     4192        NSLP_Context::qn_type_t type = context->get_qn_type();
     4193        context->unlock();
     4194        if (type == NSLP_Context::QNI) {
     4195                res->set_originator(true);
     4196        }
     4197
     4198        // RSN
     4199        context->lock();
     4200        context->get_rsn_own(n32);
     4201        context->unlock();
     4202        send_rsn = new rsn(n32);
     4203        res->set_rsn(send_rsn);
     4204
     4205        // RII
     4206        if(send_rii != NULL) {
     4207                res->set_rii(send_rii);
     4208        }
     4209
     4210        // Refresh Period
     4211        context->lock();
     4212        context->get_refresh_period(n32);
     4213        context->unlock();
     4214        send_refresh_period = new rp(n32);
     4215        res->set_rp(send_refresh_period);
     4216
     4217        // Bound Session
     4218        context->lock();
     4219        found = context->get_bound_s_id(n128);
     4220        context->unlock();
     4221        if(found) {
     4222                send_b_sid = new bound_sessionid(n128);
     4223                res->set_bound_sid(send_b_sid);
     4224        }
     4225
     4226        // QSPEC
     4227        context->lock();
     4228        send_qspec = context->get_context_qspec();
     4229        if(send_qspec != NULL) {
     4230                send_qspec = send_qspec->copy();
     4231        }
     4232        context->unlock();
     4233        res->set_qspec(send_qspec);
     4234}
    41504235
    41514236
  • qos-nslp/branches/20090610-qos-nslp-aho/src/qos_nslp_contextmap.cpp

    r4503 r4506  
    132132
    133133/*
    134  * Traverses all contexts of the ContextMap executing func on them.
    135  * Because of locking reasons func should run as short as possible.
     134 * Traverses all contexts of the ContextMap executing func on them. The parameters
     135 * param1 and param2 are passed unchanged to the function "func". Because of
     136 * locking reasons func should run as short as possible.
    136137 */
    137138void
Note: See TracChangeset for help on using the changeset viewer.