zoukankan      html  css  js  c++  java
  • lldp中与snmp相关内容agentx

    struct lldpd {

     int    g_snmp;  

     struct event  *g_snmp_timeout;

     void   *g_snmp_fds;

     char   *g_snmp_agentx;

    }

    lldpd_main()

    {

        struct lldpd *cfg;  

        // 初始化snmp相关参数  

       int snmp = 0;  

       char *agentx = NULL; /* AgentX socket */

        // lldpd进程支持的参数  

       char *popt, opts[] =   "H:vhkrdD:xX:m:u:4:6:I:C:p:M:P:S:iL:@                    ";  

         // 对参数进行解析  

       while ((ch = getopt(argc, argv, opts)) != -1) {  

          switch (ch) {            

               // 是否启用agentX      

               case 'x':     

          snmp = 1;     

          break;    

        case 'X':     

          snmp = 1;     

          agentx = optarg;     

          break;          

        // 是否启用lldpcli       

        case 'L':    

           if (strlen(optarg))     

             lldpcli = optarg;     

          else      

            lldpcli = NULL;    

        }  

       cfg->g_snmp = snmp;

      cfg->g_snmp_agentx = agentx;

    }

    static void levent_init(struct lldpd *cfg)

    {  

      if (cfg->g_snmp) {     

        // 注册agentx   

        agent_init(cfg, cfg->g_snmp_agentx);  

         // 设置定时器  

           cfg->g_snmp_timeout = evtimer_new(cfg->g_base,       levent_snmp_timeout,       cfg);   

        if (!cfg->g_snmp_timeout)   

           fatalx("unable to setup timeout function for SNMP");   

        if ((cfg->g_snmp_fds =    malloc(sizeof(struct ev_l))) == NULL)    

          fatalx("unable to allocate memory for SNMP events");  

         TAILQ_INIT(levent_snmp_fds(cfg));

       }

    }

    void levent_loop(struct lldpd *cfg) {    

       // 更新snmp socket通信相关

        if (cfg->g_snmp)  

         levent_snmp_update(cfg);  

       // 关闭agetnx

       if (cfg->g_snmp)   

        agent_shutdown();

    }

    static void usage(void)

    {  

      fprintf(stderr, "-x       Enable SNMP subagent. ");

    }

    static void notify_clients_deletion(struct lldpd_hardware *hardware,struct lldpd_port *rport)

    {

        agent_notify(hardware, NEIGHBOR_CHANGE_DELETED, rport);

    }     

    static void lldpd_decode(struct lldpd *cfg, char *frame, int s,struct lldpd_hardware *hardware)

    {

        if (oport) {     

         agent_notify(hardware, NEIGHBOR_CHANGE_UPDATED, port);

       }  else  {   

        agent_notify(hardware, NEIGHBOR_CHANGE_ADDED, port);

       }   

  • 相关阅读:
    通过socket,实现简易版的通讯
    控制台报错[WDS] Disconnected!
    js里面可以提升性能的有哪些方法
    构造函数与普通函数的区别
    事件循环(event loop)
    二维数组的创建以及简单举例
    es5数组的api(了解)
    字符串的api (基础)
    git常用命令
    连接MongoDB失败,处理办法
  • 原文地址:https://www.cnblogs.com/rohens-hbg/p/4989434.html
Copyright © 2011-2022 走看看