Hi all, I want to introduce a new network entity, Location Server (LS) for some reason, and have MNs and PITRs interact with it as follows: - When an MN detects its interface signal dropping (which is going to be determined by an external program), MN should issue Map-Reply(LS) to PITR, and Map-Reply(NULL) to LS. - When an MN's interface comes back up after binding to a new address RLOC, and the MN (eventually) issues Map-Reply(RLOC) to PITR, MN should also issue Map-Reply(RLOC) to LS. As we know, a Solicit-Map-Request (SMR) is sent to PITR at interface up, and the PITR sends a Map-Request to the MN, which then sends a Map-Reply with its new RLOC. tr_recv_map_request() in control/lisp_xtr.c appears to handle the incoming Map-Request and respond with a Map-Reply, so I intend to modify this function to deal with both interaction, and supply it through the lisp_xtr_r structure with a flag to distinguish the two behaviours, and the LS address. The flag will be set if the signal drop has been detected, and cleared if the interface has come back up. There are two modifications: - If the flag is set, Map-Reply(LS) will be sent to PITR instead of Map-Reply(RLOC). - An additional Map-Reply(flag ? NULL : RLOC) will be sent to LS. For the first change, can someone explain how the RLOC currently gets set in the new message? Is it uc->la, for example? Or do I need to build a new mapping_t?
For the second change, I don't strictly have to use a Map-Reply, as my code will be talking to my LS, but it would be nice to re-use the message type. What could I do to express some sort of Map-Reply(NULL)? Use lisp_msg_put_neg_mapping, perhaps? Or just an all-zero IP address? It looks like send_all_smr_and_reg() sends SMR, so that will result in a later invocation of tr_recv_map_request(). It is only invoked from send_all_smr_cb(), which appears to be invoked by a timer. Is that timer set as a result of a new binding, i.e., so that SMR will be sent a short moment after the new binding is established? IOW, does the invocation of send_all_smr_cb() imply that the lisp_xtr object has learned of the new binding? If so, I intend to clear the flag inside send_all_smr_cb(), so that the subsequent (indirect) invocation of tr_recv_map_request() will behave normally to PITR (as well as send an additional message to LS). I will also add a non-static function to set the flag, and then call send_all_smr_and_reg(). I will later arrange to call this new function when the signal drop is detected. Regards, Musab Isah Research Student,School of Computing and Communications,D29, InfoLab21Lancaster University
