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

📄 tcpconn_linux.c

📁 snmp的源代码,已经在我的ubuntu下编译通过
💻 C
字号:
/* *  tcpConnTable MIB architecture support * * $Id: tcpConn_linux.c,v 1.2 2004/10/16 03:35:15 rstory Exp $ */#include <net-snmp/net-snmp-config.h>#include <net-snmp/net-snmp-includes.h>#include <net-snmp/agent/net-snmp-agent-includes.h>#include <net-snmp/data_access/tcpConn.h>#include "tcp-mib/tcpConnTable/tcpConnTable_constants.h"/* * initialize arch specific storage * * @retval  0: success * @retval <0: error */intnetsnmp_arch_tcpconn_entry_init(netsnmp_tcpconn_entry *entry){    /*     * init     */    return 0;}/* * cleanup arch specific storage */voidnetsnmp_arch_tcpconn_entry_cleanup(netsnmp_tcpconn_entry *entry){    /*     * cleanup     */}/* * copy arch specific storage */intnetsnmp_arch_tcpconn_entry_copy(netsnmp_tcpconn_entry *lhs,                                  netsnmp_tcpconn_entry *rhs){    return 0;}/* * delete an entry */intnetsnmp_arch_tcpconn_delete(netsnmp_tcpconn_entry *entry){    if (NULL == entry)        return -1;#warning "tcpConn delete"    return -1;}/** * * @retval  0 no errors * @retval !0 errors */intnetsnmp_arch_tcpconn_container_load(netsnmp_container *container){    int             rc = 0;    FILE           *in;    char            line[160];    u_char          *buf;    netsnmp_tcpconn_entry *entry;        netsnmp_assert(NULL != container);#define PROCFILE "/proc/net/tcp"    if (!(in = fopen(PROCFILE, "r"))) {        snmp_log(LOG_ERR,"could not open " PROCFILE "\n");        return -2;    }        fgets(line, sizeof(line), in); /* skip header */    /*     *   sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode     *   0: 00000000:8000 00000000:0000 0A 00000000:00000000 00:00000000 00000000    29        0 1028 1 df7b1b80 300 0 0 2 -1     */    while (fgets(line, sizeof(line), in)) {        netsnmp_tcpconn_entry *entry;        static int      linux_states[12] =            { 1, 5, 3, 4, 6, 7, 11, 1, 8, 9, 2, 10 };        int             state, rc, local_port, remote_port;        /*         */        entry = netsnmp_access_tcpconn_entry_create();        if(NULL == entry) {            rc = -3;            break;        }        if (5 != (rc = sscanf(line, "%*d: %x:%x %x:%x %x",                              &entry->indexes[NETSNMP_TCPCONN_IDX_LOCAL_ADDR],                              &local_port,                              &entry->indexes[NETSNMP_TCPCONN_IDX_REMOTE_ADDR],                              &remote_port, &state))) {            DEBUGMSGT(("access:tcpconn:container",                       "error parsing line (%d != 5)\n", rc));            DEBUGMSGT(("access:tcpconn:container"," line '%s'\n", line));            netsnmp_access_tcpconn_entry_free(entry);            continue;        }        DEBUGMSGT(("verbose:access:tcpconn:container"," line '%s'\n", line));        entry->indexes[NETSNMP_TCPCONN_IDX_LOCAL_PORT] =            htons((unsigned short) local_port);        entry->indexes[NETSNMP_TCPCONN_IDX_REMOTE_PORT] =            htons((unsigned short) remote_port);        entry->tcpConnState = (state & 0xf) < 12 ? linux_states[state & 0xf] : 2;        /*         * add entry to container         */        CONTAINER_INSERT(container, entry);    }    fclose(in);    if(rc<0)        return rc;    return 0;}

⌨️ 快捷键说明

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