![]() |
|
||||
struct SGFEntry {
int Source_;
int Group_;
int FEC_;
};
struct SGF {
SGFEntry Entry_[MPLS_MaxSGFEntryNB];
int NB_;
};
1. On ajoute l'initialisation de la table SGF dans le constructeur :
MPLSAddressClassifier::MPLSAddressClassifier() :
data_driven_(0), control_driven_(0)
{
PFT_.NB_ = 0;
ERB_.NB_ = 0;
LIB_.NB_ = 0;
SGF_.NB_ = 0;
ttl_ = 32;
}
int MPLSAddressClassifier::classify(Packet* p)
{
int nexthop = MPLSclassify(p);
if (nexthop==FIN_DE_TRAITEMENT) { return Classifier::ONCE;}
// On supprime do_reroute pour eviter DropLinfFail aux noeuds destination
// if ((enable_reroute_ == 1) && (size_ > 0) &&
// (is_link_down(nexthop)))
// Use alternative path if it exist
// nexthop = do_reroute(p);
if (nexthop == MPLS_GOTO_L3)
return AddressClassifier::classify(p);
// XXX Do NOT return -1, which lets the classifier to process this
// packet twice!!
return (nexthop == -1) ? Classifier::ONCE : nexthop;
}
int MPLSAddressClassifier::processIP(Packet* p) on a ajouté un cas permettant de reconnaître les adresses multicast et de les traiter(voir code).
La signature de la fonction a aussi été modifiée pour permettre la duplication des paquets.int MPLSAddressClassifier::command(int argc, const char*const* argv)if (strcmp(argv[1], "installSGF") == 0) {
// classifier installSGF Source Group FEC
int Source = atoi(argv[2]);
int Group = atoi(argv[3]);
int FEC = atoi(argv[4]);
int check;
check = SGFinsert(Source, Group, FEC);
if (check)
tcl.result("1");
else
tcl.result("-1");
return (TCL_OK);
}
else if (strcmp(argv[1], "deleteSGF") == 0) {
// classifier deleteSGF Source Group FEC
int Source = atoi(argv[2]);
int Group = atoi(argv[3]);
int FEC = atoi(argv[4]);
int check;
check = SGFdelete(Source, Group, FEC);
if (check)
tcl.result("1");
else
tcl.result("-1");
return (TCL_OK); }
int MPLSAddressClassifier::SGFinsert(int Source, int Group,int FEC)
int MPLSAddressClassifier::SGFdelete(int Source, int Group, int FEC)
void MPLSAddressClassifier::SGFupdate(int entrynb, int Source, int Group, int FEC)
int MPLSAddressClassifier::SGFgetbyEntry(int entrynb, int &Source,int &Group, int &FEC)
int MPLSAddressClassifier::SGFgetbyFEC(int FEC, int &Source, int &Group)
int MPLSAddressClassifier::SGFgetbySG(int Source, int Group, int FEC[])
void MPLSAddressClassifier::SGFdump(const char *id)
# Modifs JCMG pour MMT
RtModule/MPLS instproc installSGF {S G FEC} {
return [[$self set classifier_] installSGF $S $G $FEC ]
}
RtModule/MPLS instproc deleteSGF {S G FEC} {
return [[$self set classifier_] deleteSGF $S $G $FEC ]
}
RtModule/MPLS instproc LIBdelete {iLabel oIface} {
return [[$self set classifier_] LIBdelete $iLabel $oIface]
}
RtModule/MPLS instproc installLIB {iIface iLabel oIface oLabel} {
return [[$self set classifier_] installLIB $iIface $iLabel $oIface $oLabel]
}
RtModule/MPLS instproc node-id {} {
$self instvar node_
return [$node_ id]
}
RtModule/MPLS instproc Desabonne-group { Source Group FEC} {
$self deleteSGF $Source $Group $FEC
}
RtModule/MPLS instproc Abonne-group { Source Group FEC} {
$self installSGF $Source $Group $FEC
}
NS est un simulateur de protocoles, destiné à la recherche. Il a d'abord été developpé par DARPA (Defense Advanced Research Projects Agency). DARPA est le centre de recherche et développement du départément de la défense Américaine. Aujourd'hui NS est développé par DARPA et d'autres centres de recherches tels que NFS (National Science Fundation), SUN..
La copie d'écran suivante, montre la simulation du protocole MMT. La source 0 envoie des paquets à un groupe dont les noeuds 3, 5 et 6 font parti.

| Accueil | Membres | Liens et documents | Le projet | Simulation | |||