default_store.xs
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:4k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. #include "EXTERN.h"
  2. #include "perl.h"
  3. #include "XSUB.h"
  4. #include <net-snmp/agent/ds_agent.h>
  5. static int
  6. not_here(char *s)
  7. {
  8.     croak("%s not implemented on this architecture", s);
  9.     return -1;
  10. }
  11. static double
  12. constant_NETSNMP_DS_AGENT_P(char *name, int len, int arg)
  13. {
  14.     switch (name[18 + 0]) {
  15.     case 'E':
  16. if (strEQ(name + 18, "ERL_INIT_FILE")) { /* NETSNMP_DS_AGENT_P removed */
  17. #ifdef NETSNMP_DS_AGENT_PERL_INIT_FILE
  18.     return NETSNMP_DS_AGENT_PERL_INIT_FILE;
  19. #else
  20.     goto not_there;
  21. #endif
  22. }
  23.     case 'O':
  24. if (strEQ(name + 18, "ORTS")) { /* NETSNMP_DS_AGENT_P removed */
  25. #ifdef NETSNMP_DS_AGENT_PORTS
  26.     return NETSNMP_DS_AGENT_PORTS;
  27. #else
  28.     goto not_there;
  29. #endif
  30. }
  31.     case 'R':
  32. if (strEQ(name + 18, "ROGNAME")) { /* NETSNMP_DS_AGENT_P removed */
  33. #ifdef NETSNMP_DS_AGENT_PROGNAME
  34.     return NETSNMP_DS_AGENT_PROGNAME;
  35. #else
  36.     goto not_there;
  37. #endif
  38. }
  39.     }
  40.     errno = EINVAL;
  41.     return 0;
  42. not_there:
  43.     errno = ENOENT;
  44.     return 0;
  45. }
  46. static double
  47. constant_NETSNMP_DS_AGENT_A(char *name, int len, int arg)
  48. {
  49.     if (18 + 6 >= len ) {
  50. errno = EINVAL;
  51. return 0;
  52.     }
  53.     switch (name[18 + 6]) {
  54.     case 'M':
  55. if (strEQ(name + 18, "GENTX_MASTER")) { /* NETSNMP_DS_AGENT_A removed */
  56. #ifdef NETSNMP_DS_AGENT_AGENTX_MASTER
  57.     return NETSNMP_DS_AGENT_AGENTX_MASTER;
  58. #else
  59.     goto not_there;
  60. #endif
  61. }
  62.     case 'P':
  63. if (strEQ(name + 18, "GENTX_PING_INTERVAL")) { /* NETSNMP_DS_AGENT_A removed */
  64. #ifdef NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL
  65.     return NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL;
  66. #else
  67.     goto not_there;
  68. #endif
  69. }
  70.     }
  71.     errno = EINVAL;
  72.     return 0;
  73. not_there:
  74.     errno = ENOENT;
  75.     return 0;
  76. }
  77. static double
  78. constant(char *name, int len, int arg)
  79. {
  80.     errno = 0;
  81.     if (0 + 17 >= len ) {
  82. errno = EINVAL;
  83. return 0;
  84.     }
  85.     switch (name[0 + 17]) {
  86.     case 'A':
  87. if (!strnEQ(name + 0,"NETSNMP_DS_AGENT_", 17))
  88.     break;
  89. return constant_NETSNMP_DS_AGENT_A(name, len, arg);
  90.     case 'D':
  91. if (strEQ(name + 0, "NETSNMP_DS_AGENT_DISABLE_PERL")) { /*  removed */
  92. #ifdef NETSNMP_DS_AGENT_DISABLE_PERL
  93.     return NETSNMP_DS_AGENT_DISABLE_PERL;
  94. #else
  95.     goto not_there;
  96. #endif
  97. }
  98.     case 'F':
  99. if (strEQ(name + 0, "NETSNMP_DS_AGENT_FLAGS")) { /*  removed */
  100. #ifdef NETSNMP_DS_AGENT_FLAGS
  101.     return NETSNMP_DS_AGENT_FLAGS;
  102. #else
  103.     goto not_there;
  104. #endif
  105. }
  106.     case 'G':
  107. if (strEQ(name + 0, "NETSNMP_DS_AGENT_GROUPID")) { /*  removed */
  108. #ifdef NETSNMP_DS_AGENT_GROUPID
  109.     return NETSNMP_DS_AGENT_GROUPID;
  110. #else
  111.     goto not_there;
  112. #endif
  113. }
  114.     case 'H':
  115. if (strEQ(name + 0, "NETSNMP_DS_AGENT_H")) { /*  removed */
  116. #ifdef NETSNMP_DS_AGENT_H
  117.     return NETSNMP_DS_AGENT_H;
  118. #else
  119.     goto not_there;
  120. #endif
  121. }
  122.     case 'I':
  123. if (strEQ(name + 0, "NETSNMP_DS_AGENT_INTERNAL_SECNAME")) { /*  removed */
  124. #ifdef NETSNMP_DS_AGENT_INTERNAL_SECNAME
  125.     return NETSNMP_DS_AGENT_INTERNAL_SECNAME;
  126. #else
  127.     goto not_there;
  128. #endif
  129. }
  130.     case 'N':
  131. if (strEQ(name + 0, "NETSNMP_DS_AGENT_NO_ROOT_ACCESS")) { /*  removed */
  132. #ifdef NETSNMP_DS_AGENT_NO_ROOT_ACCESS
  133.     return NETSNMP_DS_AGENT_NO_ROOT_ACCESS;
  134. #else
  135.     goto not_there;
  136. #endif
  137. }
  138.     case 'P':
  139. if (!strnEQ(name + 0,"NETSNMP_DS_AGENT_", 17))
  140.     break;
  141. return constant_NETSNMP_DS_AGENT_P(name, len, arg);
  142.     case 'Q':
  143. if (strEQ(name + 0, "NETSNMP_DS_AGENT_QUIT_IMMEDIATELY")) { /*  removed */
  144. #ifdef NETSNMP_DS_AGENT_QUIT_IMMEDIATELY
  145.     return NETSNMP_DS_AGENT_QUIT_IMMEDIATELY;
  146. #else
  147.     goto not_there;
  148. #endif
  149. }
  150.     case 'R':
  151. if (strEQ(name + 0, "NETSNMP_DS_AGENT_ROLE")) { /*  removed */
  152. #ifdef NETSNMP_DS_AGENT_ROLE
  153.     return NETSNMP_DS_AGENT_ROLE;
  154. #else
  155.     goto not_there;
  156. #endif
  157. }
  158.     case 'U':
  159. if (strEQ(name + 0, "NETSNMP_DS_AGENT_USERID")) { /*  removed */
  160. #ifdef NETSNMP_DS_AGENT_USERID
  161.     return NETSNMP_DS_AGENT_USERID;
  162. #else
  163.     goto not_there;
  164. #endif
  165. }
  166.     case 'V':
  167. if (strEQ(name + 0, "NETSNMP_DS_AGENT_VERBOSE")) { /*  removed */
  168. #ifdef NETSNMP_DS_AGENT_VERBOSE
  169.     return NETSNMP_DS_AGENT_VERBOSE;
  170. #else
  171.     goto not_there;
  172. #endif
  173. }
  174.     case 'X':
  175. if (strEQ(name + 0, "NETSNMP_DS_AGENT_X_SOCKET")) { /*  removed */
  176. #ifdef NETSNMP_DS_AGENT_X_SOCKET
  177.     return NETSNMP_DS_AGENT_X_SOCKET;
  178. #else
  179.     goto not_there;
  180. #endif
  181. }
  182.     }
  183.     errno = EINVAL;
  184.     return 0;
  185. not_there:
  186.     errno = ENOENT;
  187.     return 0;
  188. }
  189. MODULE = NetSNMP::agent::default_store PACKAGE = NetSNMP::agent::default_store
  190. double
  191. constant(sv,arg)
  192.     PREINIT:
  193. STRLEN len;
  194.     INPUT:
  195. SV * sv
  196. char * s = SvPV(sv, len);
  197. int arg
  198.     CODE:
  199. RETVAL = constant(s,len,arg);
  200.     OUTPUT:
  201. RETVAL