Changes to update Tomato RAF.
[tomato.git] / release / src / router / httpd / nvram.c
blobd8337344a415727db6bda8282003aaccef4b3367
1 /*
3 Tomato Firmware
4 Copyright (C) 2006-2009 Jonathan Zarate
6 */
8 #include "tomato.h"
10 #ifndef MAX_NVPARSE
11 #define MAX_NVPARSE 255
12 #endif
15 static int print_wlnv(int idx, int unit, int subunit, void *param)
17 char *k = param;
18 char *nv;
20 nv = wl_nvname(k + 3, unit, subunit);
21 web_printf("\t'%s': '", nv); // AB multiSSID
22 web_putj(nvram_safe_get(nv));
23 web_puts("',\n");
25 return 1;
28 // <% nvram("x,y,z"); %> -> nvram = {'x': '1','y': '2','z': '3'};
29 void asp_nvram(int argc, char **argv)
31 char *list;
32 char *p, *k;
34 if ((argc != 1) || ((list = strdup(argv[0])) == NULL)) return;
35 web_puts("\nnvram = {\n");
36 p = list;
37 while ((k = strsep(&p, ",")) != NULL) {
38 if (*k == 0) continue;
39 if (strcmp(k, "wl_unit") == 0)
40 continue;
42 web_printf("\t'%s': '", k); // AB multiSSID
43 web_putj(nvram_safe_get(k));
44 web_puts("',\n");
46 if (strncmp(k, "wl_", 3) == 0) {
47 foreach_wif(1, k, print_wlnv);
50 free(list);
52 web_puts("\t'wl_unit': '"); // AB multiSSID
53 web_putj(nvram_safe_get("wl_unit"));
54 web_puts("',\n");
56 web_puts("\t'http_id': '"); // AB multiSSID
57 web_putj(nvram_safe_get("http_id"));
58 web_puts("',\n");
60 web_puts("\t'web_mx': '"); // AB multiSSID
61 web_putj(nvram_safe_get("web_mx"));
62 web_puts("',\n");
64 web_puts("\t'web_pb': '"); // AB multiSSID
65 web_putj(nvram_safe_get("web_pb"));
66 web_puts("'};\n");
69 // <% nvramseq('foo', 'bar%d', 5, 8); %> -> foo = ['a','b','c'];
70 void asp_nvramseq(int argc, char **argv)
72 int i, e;
73 char s[256];
75 if (argc != 4) return;
77 web_printf("\n%s = [\n", argv[0]);
78 e = atoi(argv[3]);
79 for (i = atoi(argv[2]); i <= e; ++i) {
80 snprintf(s, sizeof(s), argv[1], i);
81 web_puts("'");
82 web_putj(nvram_safe_get(s));
83 web_puts((i == e) ? "'" : "',");
85 web_puts("];\n");
88 void asp_nv(int argc, char **argv)
90 if (argc == 1) {
91 web_puts(nvram_safe_get(argv[0]));
95 void asp_nvstat(int argc, char **argv)
97 FILE *fp;
98 struct nvram_header header;
99 int part, size, used = 0;
100 char s[20];
102 if (mtd_getinfo("nvram", &part, &size)) {
103 sprintf(s, MTD_DEV(%dro), part);
105 if ((fp = fopen(s, "r"))) {
106 if (nvram_match("boardtype", "0x052b") && nvram_match("boardrev", "02")) { //krisan-to-Shibby: Netgear 3500L v2
107 if ((fread(&header, sizeof(header), 1, fp) == 1) &&
108 (header.magic == NVRAM_MAGIC)) {
109 used = header.len;
112 } else {
113 if (fseek(fp, size >= NVRAM_SPACE ? size - NVRAM_SPACE : 0, SEEK_SET) == 0) {
114 if ((fread(&header, sizeof(header), 1, fp) == 1) &&
115 (header.magic == NVRAM_MAGIC)) {
116 used = header.len;
120 fclose(fp);
124 web_printf("\nnvstat = { size: %d, free: %d };\n", NVRAM_SPACE, NVRAM_SPACE - used);