⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spfutil.c

📁 BCAST Implementation for NS2
💻 C
📖 第 1 页 / 共 2 页
字号:
      case LOG_NEWGRP:        return("New group");      case LOG_GRPEXP:        return("Group expired");      case IGMP_RCV:	return("Received IGMP packet, type");      case LOG_SPFDEBUG:	return("DEBUG");      case LOG_KRTSYNC:	return("Synching kernel routing entry");      case LOG_REMNANT:	return("Deleting remnant");      case LOG_DEBUGGING:	return("");      case LOG_HITLESSPREP:	return("Preparing for hitless restart");      case LOG_PHASEFAIL:	return("Hitless restart preparation failure:");      case LOG_PREPDONE:	return("Hitless restart preparation complete");      case LOG_RESIGNDR:	return("Resigned DR");      case LOG_GRACEACKS:	return("Grace-LSAs acked");      case LOG_GRACERX:	return("Grace-LSA received");      case LOG_HELPER_START:        return("Entering helper mode");      case LOG_HELPER_STOP:	return("Leaving helper mode");      case LOG_GRACE_REJECT:	return("Rejecting grace request");      case LOG_HTLEXIT:	return("Exiting hitless restart:");      default:	break;    }    return("(Unknown)");}/* Finish the printing of a log message. * If none in progress, does nothing. */void OSPF::logflush(){    if (logptr == &logbuf[0])	return;    // Null terminate string    *logptr = '\0';    sys->sys_spflog(logno, &logbuf[0]);    logptr = &logbuf[0];} /* Begin to print out a log message. */bool OSPF::spflog(int msgno, int priority){    // flush any pending log message    logflush();    if (msgno > MAXLOG)	return(false);    else if (disabled_msgno[msgno])	return(false);    else if (!enabled_msgno[msgno] && priority < base_priority)	return(false);    // Reset pointer into logging buffer    logno = msgno;    log(msgtext(msgno));    log(" ");    return(true);}// Packet type stringsconst char *pktype[] = {    "",    "Hello",    "DD",    "LsReq",    "LsUpd",    "LsAck",};/* Standard functions to print strings, integers, * and characters to the logging stream. */void OSPF::log(const char *s){    int len;    len = strlen(s);    if (logptr + len < logend) {        memcpy(logptr, s, len);	logptr += len;    }}void OSPF::log(int val){    char temp[20];    sprintf(temp, "%d", val);    log(temp);}/* Print information about a packet on the logging * stream. */void OSPF::log(Pkt *p){    int ptype=p->spfpkt->ptype;    InAddr s_addr;    InAddr d_addr;    if (ptype >= SPT_HELLO && ptype <= SPT_LSACK)	log(pktype[ptype]);    else {	log("Pkt type ");	log(ptype);    }    s_addr = ntoh32(p->iphdr->i_src);    d_addr = ntoh32(p->iphdr->i_dest);    log(" ");    log(&s_addr);    log("->");    log(&d_addr);}/* Print information about an IP packet on the logging * stream. */void OSPF::log(InPkt *p){    InAddr s_addr;    InAddr d_addr;    s_addr = ntoh32(p->i_src);    d_addr = ntoh32(p->i_dest);    log(" ");    log(&s_addr);    log("->");    log(&d_addr);}/* Print LSA information onto the logging stream. */const char *lsatype[] = {    "",    "rtrlsa",    "netlsa",    "netsumm",    "asbrsumm",    "extlsa",    "grplsa",    "t7lsa",    "exattr",};void OSPF::log(LShdr *hdr){    int type=hdr->ls_type;    InAddr lsid=ntoh32(hdr->ls_id);    InAddr advrtr=ntoh32(hdr->ls_org);    log("LSA(");    log(type);    log(",");    log(&lsid);    log(",");    log(&advrtr);    log(")");}void OSPF::log(LSA *lsap){    int type=lsap->ls_type();    InAddr lsid=lsap->ls_id();    InAddr advrtr=lsap->adv_rtr();    log("LSA(");    log(type);    log(",");    log(&lsid);    log(",");    log(&advrtr);    log(")");}/* Print Iterface identifier onto the logging stream. */void OSPF::log(SpfArea *ap){    InAddr addr;    addr = ap->a_id;    log(" Area ");    log(&addr);}/* Print Iterface identifier onto the logging stream. */void OSPF::log(SpfIfc *ip){    if (ip->is_virtual()) {	log(" VL ");	log(ip->transit_area());	log(" Endpt ");	log(ip->vl_endpt());    }    else {	log(" Ifc ");	if (ip->unnumbered())	    log(sys->phyname(ip->if_phyint));	else	    log(&ip->if_addr);    }}/* Print neighbor identifer onto the logging stream. */void OSPF::log(SpfNbr *np){    log(" Nbr ");    if (np->ifc()->is_multi_access())	log(&np->n_addr);    else {	log(&np->n_id);	log(np->n_ifp);    }}/* Print an IP routing tabe entry */void OSPF::log(INrte *rte){    InAddr net;     int prefix_len;    int bit;    net = rte->net();    prefix_len = 32;    bit = 1;    while (prefix_len > 0 && (bit & rte->mask()) == 0) {	prefix_len--;	bit = bit << 1;    }    log(&net);    log("/");    log(prefix_len);    log(" ");    switch (rte->r_type) {      case RT_SPF:	// Intra-area	log("intra-area cost ");	log(rte->cost);	log(" ");	break;      case RT_SPFIA:	// Inter-area	log("inter-area cost ");	log(rte->cost);	log(" ");	break;      case RT_EXTT1:	// External type 1	log("external type 1 cost ");	log(rte->cost);	log(" ");	break;      case RT_EXTT2:	// External type 2	log("external type 2 cost ");	log(rte->t2cost);	log(" ");	break;      case RT_REJECT:	// Reject route, for own area ranges	log("reject ");	break;      case RT_STATIC:	// External routes we're importing	log("static cost ");	log(rte->t2cost == Infinity ? rte->cost : rte->t2cost);	log(" ");	break;      default:      case RT_NONE:	// Deleted, inactive	break;    }}/* Print out IP addresses. Assumed that they are passed in machine * byte-order. */void OSPF::log(InAddr *addr){    byte *ptr;    uns32 netaddr;    netaddr = hton32(*addr);    ptr = (byte *) &netaddr;    log((int) ptr[0]);    log(".");    log((int) ptr[1]);    log(".");    log((int) ptr[2]);    log(".");    log((int) ptr[3]);}/* Log a network/mask combination in CIDR format. */void OSPF::log(InAddr *addr, InMask *mask){    int prefix_len;    int bit;    prefix_len = 32;    bit = 1;    while (prefix_len > 0 && (bit & *mask) == 0) {	prefix_len--;	bit = bit << 1;    }    log(addr);    log("/");    log(prefix_len);}/* Initialize the OspfSysCalls class. Time begins at zero. */OspfSysCalls::OspfSysCalls(){	    sys_etime.sec = 0;    sys_etime.msec = 0;}/* Decide whether a multicast datagram's receiving interface * is valid, according to the matching cache entry. */bool MCache::valid_incoming(int in_phyint){    int i;    if (in_phyint == -1)        return(true);    for (i = 0; i < n_upstream; i++) {        if (up_phys[i] == in_phyint)	    return(true);    }    return(false);}/* Decide whether a multicast datagram would be forwarded * out a given interface, and if so, what the minimum ttl * would have to be. */bool MCache::valid_outgoing(int phyint, InAddr nbr_addr, byte &ttl){    int i;    for (i = 0; i < n_downstream; i++) {        if (down_str[i].phyint != phyint)	    continue;	if (down_str[i].nbr_addr != 0 && down_str[i].nbr_addr != nbr_addr)	    continue;	// We would forward. Set necessary ttl for packet	ttl = down_str[i].ttl;	return(true);    }    return(false);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -