662ad7b0d8d67a0e4d1b25acd1b78c7d85ef15ec
[people/xl0/gpxe.git] / src / commandline / commands / nvo_cmd.c
1 #include <stdint.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <errno.h>
5 #include <vsprintf.h>
6 #include <command.h>
7 #include <gpxe/nvo.h>
8 #include <gpxe/dhcp.h>
9 #include <gpxe/settings.h>
10
11 void nvo_cmd_req() {}
12
13 extern struct nvo_block *ugly_nvo_hack;
14
15 static int show_exec ( int argc, char **argv ) {
16         struct config_context dummy_context;
17         char buf[256];
18         int rc;
19
20         if ( ! ugly_nvo_hack ) {
21                 printf ( "No non-volatile option storage available\n" );
22                 return 1;
23         }
24
25         if ( argc != 2 ) {
26                 printf ( "Syntax: %s <identifier>\n", argv[0] );
27                 return 1;
28         }
29
30         dummy_context.options = ugly_nvo_hack->options;
31         if ( ( rc = show_setting ( &dummy_context, argv[1], buf,
32                                    sizeof ( buf ) ) ) != 0 ) {
33                 printf ( "Could not find \"%s\": %s\n",
34                          argv[1], strerror ( -rc ) );
35                 return 1;
36         }
37
38         printf ( "%s = %s\n", argv[1], buf );
39         return 0;
40 }
41
42 struct command show_command __command = {
43         .name = "show",
44         .usage = "show <identifier>\n",
45         .desc = "Show stored options",
46         .exec = show_exec,
47 };
48
49 static int set_exec ( int argc, char **argv ) {
50         struct config_context dummy_context;
51         int rc;
52
53         if ( ! ugly_nvo_hack ) {
54                 printf ( "No non-volatile option storage available\n" );
55                 return 1;
56         }
57
58         if ( argc != 3 ) {
59                 printf ( "Syntax: %s <identifier> <value>\n",
60                          argv[0] );
61                 return 1;
62         }
63
64         dummy_context.options = ugly_nvo_hack->options;
65         if ( ( rc = set_setting ( &dummy_context, argv[1], argv[2] ) ) != 0 ) {
66                 printf ( "Could not set \"%s\"=\"%s\": %s\n",
67                          argv[1], argv[2], strerror ( -rc ) );
68                 return 1;
69         }
70         
71         if ( nvo_save ( ugly_nvo_hack ) != 0 ) {
72                 printf ( "Could not save options to non-volatile storage\n" );
73                 return 1;
74         }
75
76         return 0;
77 }
78
79 struct command set_command __command = {
80         .name = "set",
81         .usage = "set <identifier> <value>\n",
82         .desc = "Set stored option",
83         .exec = set_exec,
84 };