📄 monitor.c
字号:
icmp6stat.icp6s_inhist[ICMP_PARAMPROB]+ icmp6stat.icp6s_inhist[ICMP_TSTAMP]+ icmp6stat.icp6s_inhist[ICMP_TSTAMPREPLY]+ icmp6stat.icp6s_inhist[ICMP_IREQ]+ icmp6stat.icp6s_inhist[ICMP_IREQREPLY]+ icmp6stat.icp6s_inhist[ICMP_MASKREQ]+ icmp6stat.icp6s_inhist[ICMP_MASKREPLY] ); fprintf( client, "<tr><td>%s<td>%lld</tr>\n", "Bad", icmp6stat.icp6s_badcode+ icmp6stat.icp6s_tooshort+ icmp6stat.icp6s_checksum+ icmp6stat.icp6s_badlen ); fprintf( client, "<tr><td><b>%s:</b><td></tr>\n", "Sent" ); fprintf( client, "<tr><td>%s<td>%lld</tr>\n", "ECHO", icmp6stat.icp6s_outhist[ICMP_ECHO] ); fprintf( client, "<tr><td>%s<td>%lld</tr>\n", "ECHO REPLY", icmp6stat.icp6s_outhist[ICMP_ECHOREPLY] ); fprintf( client, "<tr><td>%s<td>%lld</tr>\n", "UNREACH", icmp6stat.icp6s_outhist[ICMP_UNREACH] ); fprintf( client, "<tr><td>%s<td>%lld</tr>\n", "REDIRECT", icmp6stat.icp6s_outhist[ICMP_REDIRECT] ); fprintf( client, "<tr><td>%s<td>%lld</tr>\n", "Other", icmp6stat.icp6s_inhist[ICMP_SOURCEQUENCH]+ icmp6stat.icp6s_outhist[ICMP_ROUTERADVERT]+ icmp6stat.icp6s_outhist[ICMP_ROUTERSOLICIT]+ icmp6stat.icp6s_outhist[ICMP_TIMXCEED]+ icmp6stat.icp6s_outhist[ICMP_PARAMPROB]+ icmp6stat.icp6s_outhist[ICMP_TSTAMP]+ icmp6stat.icp6s_outhist[ICMP_TSTAMPREPLY]+ icmp6stat.icp6s_outhist[ICMP_IREQ]+ icmp6stat.icp6s_outhist[ICMP_IREQREPLY]+ icmp6stat.icp6s_outhist[ICMP_MASKREQ]+ icmp6stat.icp6s_outhist[ICMP_MASKREPLY] ); } html_table_end( client );#endif html_table_data_begin( client, "valign=\"top\"" ); html_table_begin( client, "" ); { fprintf( client, "<tr><td><b>%s:</b><td></tr>\n", "Received" ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Total", udpstat.udps_ipackets ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Bad", udpstat.udps_hdrops+ udpstat.udps_badsum+ udpstat.udps_badlen+ udpstat.udps_noport+ udpstat.udps_noportbcast+ udpstat.udps_fullsock ); fprintf( client, "<tr><td><b>%s:</b><td></tr>\n", "Sent" ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Total", udpstat.udps_opackets ); } html_table_end( client ); html_table_data_begin( client, "valign=\"top\"" ); html_table_begin( client, "" ); { fprintf( client, "<tr><td><b>%s:</b><td></tr>\n", "Connections" ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Initiated", tcpstat.tcps_connattempt ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Accepted", tcpstat.tcps_accepts ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Established", tcpstat.tcps_connects ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Closed", tcpstat.tcps_closed ); fprintf( client, "<tr><td><b>%s:</b><td></tr>\n", "Received" ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Packets", tcpstat.tcps_rcvtotal ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Data Packets", tcpstat.tcps_rcvpack ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Bytes", tcpstat.tcps_rcvbyte ); fprintf( client, "<tr><td><b>%s:</b><td></tr>\n", "Sent" ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Packets", tcpstat.tcps_sndtotal ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Data Packets", tcpstat.tcps_sndpack ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Bytes", tcpstat.tcps_sndbyte ); } html_table_end( client ); } html_table_row_end( client ); } html_table_end( client ); html_para_begin( client, "" ); html_heading(client, 3, "Mbufs" ); html_table_begin( client, "border" ); { html_table_header( client, "Summary", "" ); html_table_header( client, "Types", "" ); html_table_row_begin( client, "" ); { html_table_data_begin( client, "valign=\"top\"" ); html_table_begin( client, "" ); { fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Mbufs", mbstat.m_mbufs ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Clusters", mbstat.m_clusters ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Free Clusters", mbstat.m_clfree ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Drops", mbstat.m_drops ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Waits", mbstat.m_wait ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Drains", mbstat.m_drain );#if defined(CYGPKG_NET_FREEBSD_STACK) fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Copy Fails", mbstat.m_mcfail ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "Pullup Fails", mbstat.m_mpfail );#endif } html_table_end( client ); html_table_data_begin( client, "valign=\"top\"" ); html_table_begin( client, "" ); { u_long *mtypes;#if defined(CYGPKG_NET_FREEBSD_STACK) mtypes = mbtypes;#else mtypes = mbstat.m_mtypes;#endif fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "FREE", mtypes[MT_FREE] ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "DATA", mtypes[MT_DATA] ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "HEADER", mtypes[MT_HEADER] );#if !defined(CYGPKG_NET_FREEBSD_STACK) fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "SOCKET", mtypes[MT_SOCKET] ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "PCB", mtypes[MT_PCB] ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "RTABLE", mtypes[MT_RTABLE] ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "HTABLE", mtypes[MT_HTABLE] ); fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "ATABLE", mtypes[MT_ATABLE] );#endif fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "SONAME", mtypes[MT_SONAME] );#if !defined(CYGPKG_NET_FREEBSD_STACK) fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "SOOPTS", mtypes[MT_SOOPTS] );#endif fprintf( client, "<tr><td>%s<td>%ld</tr>\n", "FTABLE", mtypes[MT_FTABLE] ); /* Ignore the rest for now... */ } html_table_end( client ); } html_table_row_end( client ); } html_table_end( client ); draw_navbar(client); } html_body_end(client); html_end(client); freeifaddrs(iflist); return 1; }CYG_HTTPD_TABLE_ENTRY( cyg_monitor_network_entry, "/monitor/network.htm*", cyg_monitor_network, NULL ); /* ================================================================= *//* Instrumentation Monitor * * If the CYGPKG_KERNEL_INSTRUMENT option is set, we generate a table * showing the current instrumentation buffer. If the FLAGS option is * enabled we also print a table giving control of the flags. * */#ifdef CYGPKG_KERNEL_INSTRUMENT/* Instrumentation record. */struct Instrument_Record{ CYG_WORD16 type; // record type CYG_WORD16 thread; // current thread id CYG_WORD timestamp; // 32 bit timestamp CYG_WORD arg1; // first arg CYG_WORD arg2; // second arg};typedef struct Instrument_Record Instrument_Record;/* Instrumentation variables, these live in the * instrumentation files in the kernel */__externC Instrument_Record *instrument_buffer_pointer;__externC Instrument_Record instrument_buffer[];__externC cyg_uint32 instrument_buffer_size;#if defined(CYGDBG_KERNEL_INSTRUMENT_FLAGS) && \ defined(CYGDBG_KERNEL_INSTRUMENT_MSGS)static cyg_uint32 instrument_flags[(CYG_INSTRUMENT_CLASS_MAX>>8)+1];#endifstatic char cyg_monitor_instrument_blurb1[] ="<p>Use the checkboxes to enable the events to be recorded. Click""the <em>Submit</em> button to start recording. Click the <em>Clear</em>""button to clear all instrumentation and to stop recording.";static cyg_bool cyg_monitor_instrument( FILE * client, char *filename, char *formdata, void *arg ){#if defined(CYGDBG_KERNEL_INSTRUMENT_FLAGS) && \ defined(CYGDBG_KERNEL_INSTRUMENT_MSGS) /* Disable all instrumentation while we generate the page. * Otherwise we could swamp the information we are really after. */ cyg_scheduler_lock(); { struct instrument_desc_s *id = instrument_desc; CYG_WORD cl = 0, ev = 0; for( ; id->msg != 0; id++ ) { if( id->num > 0xff ) { cl = id->num>>8; instrument_flags[cl] = 0; } else { ev = id->num; cyg_instrument_disable( cl<<8, ev ); } } } cyg_scheduler_unlock();#endif /* If we have some form data, deal with it. */ if( formdata != NULL ) { char *list[40]; cyg_formdata_parse( formdata, list, sizeof(list)/sizeof(*list) );#if defined(CYGDBG_KERNEL_INSTRUMENT_FLAGS) && \ defined(CYGDBG_KERNEL_INSTRUMENT_MSGS) if( cyg_formlist_find( list, "clear" ) != NULL ) { /* If the clear button is set, then disable all instrumentation flags. */ int i; for( i = 0; i < sizeof(instrument_flags)/sizeof(*instrument_flags); i++ ) instrument_flags[i] = 0; } else { /* Otherwise all the set checkboxes have been reported to * us in the form of class=event inputs. */ char **p; for( p = list; *p != NULL; p++ ) { int cl,ev; if( sscanf( *p, "%02x=%02x", &cl, &ev ) == 2 ) instrument_flags[cl] |= 1<<ev; } }#endif /* If the cleartable button has been pressed, clear all the * table entries. */ if( cyg_formlist_find( list, "cleartable" ) != NULL ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -