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