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

📄 cmdiag.cpp

📁 cmdiag-0.2.tar.gz ( Diagnostic source )
💻 CPP
字号:
/*# Docsis cable modem diagnostics (cmdiag)## Copyright (C) 2006-2007 Emil Penchev## This program is free software, distributed under the terms of# the GNU General Public License 2.0#*/#include <ncurses.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include "bar.h"#include "pbar.h"#include "globals.h"#include "cmodem.h"#include "func.h"int main(int argc, char ** argv){	CModem * cmodem = NULL;		screen_size_check();		char * cm_ip = get_cmd_option(argc, argv, CMIP);	char * cm_str = get_cmd_option(argc, argv, CM_STRING);	char * cmts_ip = get_cmd_option(argc, argv, CMTSIP);	char * cmts_str = get_cmd_option(argc, argv, CMTS_STRING);		initscr();      /* initialize ncurses */	cbreak();	noecho();	keypad(stdscr, TRUE);	start_color();   /*start color mode */	curs_set(0);     /* Make cursor invisible */	attron(A_BOLD);	mvwaddstr(stdscr, 1, 32, "POWER MONITOR");	attroff(A_BOLD); 	if ((!cmts_str) || (!cmts_ip))		cmodem = new CModem(cm_ip, " ", cm_str, " ");	else 		cmodem = new CModem(cm_ip, cmts_ip, cm_str, cmts_str);	//CModem * cmodem = new CModem("10.0.1.34", "83.222.168.65", "modems", "modems");	PowerBar * ds = new PowerBar(3, 3, "Downstream", "dBmv", "dBmv", -30, 30, DS_BAR_LENGHT, DS_MAX_PARTS, 1);	ds->Draw();		PowerBar * us = new PowerBar(3, 9, "Upstream", "dBmv", "dBmv", 0, 60, US_BAR_LENGHT, US_MAX_PARTS, 2);	us->Draw();		attron(A_BOLD);	mvwaddstr(stdscr, 13, 32, "SIGNAL TO NOISE RATIO");	attroff(A_BOLD);		PowerBar * snrds = new PowerBar(3, 15, "Downstream SNR", "dBmv", "dBmv", 0, 50, SNR_BAR_LENGHT, SNR_MAX_PARTS, 3);	snrds->Draw();	PowerBar * snrus = new PowerBar(3, 21, "Upstream SNR", "dBmv", "dBmv", 0, 50, SNR_BAR_LENGHT, SNR_MAX_PARTS, 3);	snrus->Draw();  	attron(A_BOLD);	mvwaddstr(stdscr, 25, 28, "DATA PERFORMANCE (RF INTERFACE)");	attroff(A_BOLD);	Bar * dsthr = new Bar(3, 28, "Downstream Throughput", "bps", " kbps", 0, 500, DAT_BAR_LENGHT);	dsthr->Draw(); 	Bar * usthr = new Bar(61, 28, "Upstream Throughput", "bps", " kbps", 0, 500, DAT_BAR_LENGHT);	usthr->Draw(); 	Bar * rxpower = new Bar(77, 21, "Receive Power at CMTS", "dBmv", " dBmv", 0, 40, DAT_BAR_LENGHT);	rxpower->Draw();	PowerBar * errds = new PowerBar(3, 34, "Downstream Error Rate", "bps", "bps", 0, 80, ERR_RATE_BAR_LENGHT, ERR_RATE_MAX_PARTS, 4);	errds->Draw(); 	PowerBar * errus = new PowerBar(61, 34, "Upstream Error Rate", "bps", "bps", 0, 80, ERR_RATE_BAR_LENGHT, ERR_RATE_MAX_PARTS, 4);	errus->Draw(); 	mvwaddstr(stdscr, 1, 80, "CM IP Address: ");	mvwaddstr(stdscr, 1, 97, cm_ip);		mvwaddstr(stdscr, 2, 80, "CMTS IP Address: ");	if (!cmts_ip)		mvwaddstr(stdscr, 2, 97, "N/A");	else 		mvwaddstr(stdscr, 2, 97, cmts_ip);		mvwaddstr(stdscr, 3, 80, "CM Mac: ");	mvwaddstr(stdscr, 4, 80, "Uptime: ");	attron(A_BOLD);	mvwaddstr(stdscr, 6, 89, "DOWNSTEAM");	attroff(A_BOLD);	mvwaddstr(stdscr, 7, 77, "Frequency :");	mvwaddstr(stdscr, 8, 77, "Width :");	//mvwaddstr(stdscr, 12, 77, "Modulation :");	attron(A_BOLD);	mvwaddstr(stdscr, 6, 107, "UPSTREAM");	attroff(A_BOLD);		mvwaddstr(stdscr, 10, 77, "RF inits/resets : ");	mvwaddstr(stdscr, 11, 77, "Invalid ranging response messages : ");	mvwaddstr(stdscr, 12, 77, "Ranging process aborted by the CMTS : ");	mvwaddstr(stdscr, 13, 77, "Invalid registration response messages : ");	attron(A_BOLD);	mvwaddstr(stdscr, 14, 90, "FEC COUNTERS");	attroff(A_BOLD);	mvwaddstr(stdscr, 15, 77, "Codewords without error : ");	mvwaddstr(stdscr, 16, 77, "Codewords with correctable errors : ");	mvwaddstr(stdscr, 17, 77, "Codewords with uncorrectable errors : ");  	refresh();		// Get mac addres //	if (string * cmac = cmodem->Get_Mac()) {		// Display MAC		mvwaddstr(stdscr, 3, 97, cmac->c_str());	}	// Exit function	attron(A_BOLD);	mvwaddstr(stdscr, 43, 110, "'Ctrl-c to Exit'"); 	attroff(A_BOLD);			while(1) {		if (cmodem->CM_Online()) {			// Display downstream power level			if (string * d_power_level = cmodem->Get_Ds_Power())				ds->SignalUpdate(atoi(d_power_level->c_str()), d_power_level->c_str());			else ds->SignalUpdate(0, "");					// Display upstream power level				if (string * u_power_level = cmodem->Get_Us_Power())				us->SignalUpdate(atoi(u_power_level->c_str()), u_power_level->c_str());			else us->SignalUpdate(0, "");						// Display downstream snr			if (string * d_snr = cmodem->Get_Ds_Snr())				snrds->SignalUpdate(atoi(d_snr->c_str()), d_snr->c_str());			else snrds->SignalUpdate(0, "");						// Display upstream snr			if (cmodem->CMTS_Online()) {				if (string * u_snr = cmodem->Get_Us_Snr())					snrus->SignalUpdate(atoi(u_snr->c_str()), u_snr->c_str());				else snrus->SignalUpdate(0, "");			}						// Display downstream rf cable flow			if (string * d_cable_flow = cmodem->Get_RfDs_Data())				dsthr->DataUpdate(atoi(d_cable_flow->c_str()));			else dsthr->DataUpdate(0);						// Display upstream rf cable flow			if (string * u_cable_flow = cmodem->Get_RfUs_Data())				usthr->DataUpdate(atoi(u_cable_flow->c_str()));			else usthr->DataUpdate(0);						// Display downstream cable rf error bytes 			if (string * d_cable_err = cmodem->Get_RfDs_Err()) {				errds->ErrRateUpdate(8*(atoi(d_cable_err->c_str())));				string disgbytes = *d_cable_err; 				disgbytes = disgbytes + " disgarted bytes";				mvwaddstr(stdscr, 38, 2, disgbytes.c_str());			}						// Discplay upstream cable rf error bytes			if (string * u_cable_err = cmodem->Get_RfUs_Err()) {				errus->ErrRateUpdate(8*(atoi(u_cable_err->c_str())));				string disgbytes = *u_cable_err;				disgbytes = disgbytes + " disgarted bytes";				mvwaddstr(stdscr, 38, 60, disgbytes.c_str());			}			// Display CMTS RX Power 			if (cmodem->CMTS_Online()) {				if (string * prx_power = cmodem->Get_CMTS_Rx_Power()) {					rxpower->RxUpdate(atoi(prx_power->c_str()));				}			}						// Display Frequency 			if (string * d_freq = cmodem->Get_Ds_Freq())				//mvwaddstr(stdscr, 10, 107, d_freq->c_str());				mvwaddstr(stdscr, 7, 89, d_freq->c_str());						if (string * u_freq = cmodem->Get_Us_Freq())				//mvwaddstr(stdscr, 10, 89, u_freq->c_str());				mvwaddstr(stdscr, 7, 107, u_freq->c_str());						// Display channel width 			if (string * d_width = cmodem->Get_Ds_Width()) {				//mvwaddstr(stdscr, 11, 89, d_width->c_str());				mvwaddstr(stdscr, 8, 89, d_width->c_str());			}						if (string * u_width = cmodem->Get_Us_Width()) 				mvwaddstr(stdscr, 8, 107, u_width->c_str());						//Display uptime			if (string * uptime = cmodem->Get_Uptime())				mvwaddstr(stdscr, 4, 96, uptime->c_str());			// Display cable modem system description			if (string * sys_info = cmodem->Get_SysDesc()) {				attron(A_BOLD);				mvwaddstr(stdscr, 41, 2, "CM INFO:");				attroff(A_BOLD);				mvaddnstr(41, 12, sys_info->c_str(), sys_info->find("<<", 0));				mvwaddstr(stdscr, 42, 12, strstr(sys_info->c_str(), "<<"));				refresh();			}						// Display number of times the CM reset or initialized RF interface			if (string * resets = cmodem->Get_CM_Resets()) {				//mvwaddstr(stdscr, 13, 77, "RF inits/resets : ");				mvwaddstr(stdscr, 10, 95, resets->c_str());				refresh();			}						// Display number of times the CM received invalid ranging response messages			if (string * invalid_rangs = cmodem->Get_Recv_Inv_Rang()) {				//mvwaddstr(stdscr, 14, 77, "Invalid ranging response messages : ");				mvwaddstr(stdscr, 11, 118, invalid_rangs->c_str());				refresh();			}						// Display number of times the ranging process was aborted by the CMTS			if (string * abort_rangs = cmodem->Get_Abort_Rang()) {				//mvwaddstr(stdscr, 15, 77, "Ranging process aborted by the CMTS : ");				mvwaddstr(stdscr, 12, 118, abort_rangs->c_str());				refresh();			}						// Display number of times the CM received invalid registration response messages			if (string * invalid_regs = cmodem->Get_Recv_Inv_Reg()) {				//mvwaddstr(stdscr, 16, 77, "Invalid registration response messages : ");				mvwaddstr(stdscr, 13, 118, invalid_regs->c_str());				refresh();			}						/* Display FEC counters */			//Codewords received without error 			if (string * sig_unerr = cmodem->Get_Unerror_Words()) {				mvwaddstr(stdscr, 15, 105, sig_unerr->c_str());				refresh();			}						//Codewords with correctable errors			if (string * sig_corectwords = cmodem->Get_Corerror_Words()) {				mvwaddstr(stdscr, 16, 114, sig_corectwords->c_str());				refresh();			}			// Codewords with uncorrectable errors			if (string * sig_uncorectwords = cmodem->Get_Uncorerror_Words()) {				mvwaddstr(stdscr, 17, 114, sig_uncorectwords->c_str());				refresh();			}		}		else {			ds->SignalUpdate(0, "");			us->SignalUpdate(0, "");			snrds->SignalUpdate(0, "");			snrus->SignalUpdate(0, "");			dsthr->DataUpdate(0);			usthr->DataUpdate(0);		}				sleep(1);	}	endwin(); 	return 0;}

⌨️ 快捷键说明

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