Blame view

include/env_flags.h 4.54 KB
2598090b7   Joe Hershberger   env: Add environm...
1
2
3
4
  /*
   * (C) Copyright 2012
   * Joe Hershberger, National Instruments, joe.hershberger@ni.com
   *
1a4596601   Wolfgang Denk   Add GPL-2.0+ SPDX...
5
   * SPDX-License-Identifier:	GPL-2.0+
2598090b7   Joe Hershberger   env: Add environm...
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
   */
  
  #ifndef __ENV_FLAGS_H__
  #define __ENV_FLAGS_H__
  
  enum env_flags_vartype {
  	env_flags_vartype_string,
  	env_flags_vartype_decimal,
  	env_flags_vartype_hex,
  	env_flags_vartype_bool,
  #ifdef CONFIG_CMD_NET
  	env_flags_vartype_ipaddr,
  	env_flags_vartype_macaddr,
  #endif
  	env_flags_vartype_end
  };
267541f77   Joe Hershberger   env: Add support ...
22
23
24
25
26
27
28
  enum env_flags_varaccess {
  	env_flags_varaccess_any,
  	env_flags_varaccess_readonly,
  	env_flags_varaccess_writeonce,
  	env_flags_varaccess_changedefault,
  	env_flags_varaccess_end
  };
2598090b7   Joe Hershberger   env: Add environm...
29
30
31
  #define ENV_FLAGS_VAR ".flags"
  #define ENV_FLAGS_ATTR_MAX_LEN 2
  #define ENV_FLAGS_VARTYPE_LOC 0
267541f77   Joe Hershberger   env: Add support ...
32
  #define ENV_FLAGS_VARACCESS_LOC 1
2598090b7   Joe Hershberger   env: Add environm...
33
34
35
36
  
  #ifndef CONFIG_ENV_FLAGS_LIST_STATIC
  #define CONFIG_ENV_FLAGS_LIST_STATIC ""
  #endif
1d6cd0a3f   Joe Hershberger   env: Handle write...
37
  #ifdef CONFIG_CMD_NET
73c2bbeea   Joe Hershberger   net: Apply defaul...
38
39
40
41
42
  #ifdef CONFIG_REGEX
  #define ETHADDR_WILDCARD "\\d?"
  #else
  #define ETHADDR_WILDCARD
  #endif
1d6cd0a3f   Joe Hershberger   env: Handle write...
43
  #ifdef CONFIG_ENV_OVERWRITE
73c2bbeea   Joe Hershberger   net: Apply defaul...
44
  #define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:ma,"
1d6cd0a3f   Joe Hershberger   env: Handle write...
45
46
  #else
  #ifdef CONFIG_OVERWRITE_ETHADDR_ONCE
73c2bbeea   Joe Hershberger   net: Apply defaul...
47
  #define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:mc,"
1d6cd0a3f   Joe Hershberger   env: Handle write...
48
  #else
73c2bbeea   Joe Hershberger   net: Apply defaul...
49
  #define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:mo,"
1d6cd0a3f   Joe Hershberger   env: Handle write...
50
51
  #endif
  #endif
c0a93440a   Joe Hershberger   net: Add default ...
52
53
54
55
56
  #define NET_FLAGS \
  	"ipaddr:i," \
  	"gatewayip:i," \
  	"netmask:i," \
  	"serverip:i," \
0299cee53   Stefan Agner   net: fix vlan val...
57
58
  	"nvlan:d," \
  	"vlan:d," \
c0a93440a   Joe Hershberger   net: Add default ...
59
  	"dnsip:i,"
1d6cd0a3f   Joe Hershberger   env: Handle write...
60
  #else
c0a93440a   Joe Hershberger   net: Add default ...
61
62
  #define ETHADDR_FLAGS
  #define NET_FLAGS
1d6cd0a3f   Joe Hershberger   env: Handle write...
63
64
65
66
67
68
69
  #endif
  
  #ifndef CONFIG_ENV_OVERWRITE
  #define SERIAL_FLAGS "serial#:so,"
  #else
  #define SERIAL_FLAGS ""
  #endif
2598090b7   Joe Hershberger   env: Add environm...
70
  #define ENV_FLAGS_LIST_STATIC \
1d6cd0a3f   Joe Hershberger   env: Handle write...
71
  	ETHADDR_FLAGS \
c0a93440a   Joe Hershberger   net: Add default ...
72
  	NET_FLAGS \
1d6cd0a3f   Joe Hershberger   env: Handle write...
73
  	SERIAL_FLAGS \
2598090b7   Joe Hershberger   env: Add environm...
74
  	CONFIG_ENV_FLAGS_LIST_STATIC
fffad71bc   Joe Hershberger   env: Add a comman...
75
76
77
78
79
80
  #ifdef CONFIG_CMD_ENV_FLAGS
  /*
   * Print the whole list of available type flags.
   */
  void env_flags_print_vartypes(void);
  /*
267541f77   Joe Hershberger   env: Add support ...
81
82
83
84
   * Print the whole list of available access flags.
   */
  void env_flags_print_varaccess(void);
  /*
fffad71bc   Joe Hershberger   env: Add a comman...
85
86
87
   * Return the name of the type.
   */
  const char *env_flags_get_vartype_name(enum env_flags_vartype type);
267541f77   Joe Hershberger   env: Add support ...
88
89
90
91
  /*
   * Return the name of the access.
   */
  const char *env_flags_get_varaccess_name(enum env_flags_varaccess access);
fffad71bc   Joe Hershberger   env: Add a comman...
92
  #endif
2598090b7   Joe Hershberger   env: Add environm...
93
94
95
96
  /*
   * Parse the flags string from a .flags attribute list into the vartype enum.
   */
  enum env_flags_vartype env_flags_parse_vartype(const char *flags);
267541f77   Joe Hershberger   env: Add support ...
97
98
99
100
101
102
103
104
  /*
   * Parse the flags string from a .flags attribute list into the varaccess enum.
   */
  enum env_flags_varaccess env_flags_parse_varaccess(const char *flags);
  /*
   * Parse the binary flags from a hash table entry into the varaccess enum.
   */
  enum env_flags_varaccess env_flags_parse_varaccess_from_binflags(int binflags);
2598090b7   Joe Hershberger   env: Add environm...
105

0118e83ba   Codrin Ciubotariu   common/env_flags....
106
107
108
109
110
111
  #ifdef CONFIG_CMD_NET
  /*
   * Check if a string has the format of an Ethernet MAC address
   */
  int eth_validate_ethaddr_str(const char *addr);
  #endif
30fd4fadb   Joe Hershberger   tools/env: Add en...
112
113
114
115
116
117
  #ifdef USE_HOSTCC
  /*
   * Look up the type of a variable directly from the .flags var.
   */
  enum env_flags_vartype env_flags_get_type(const char *name);
  /*
267541f77   Joe Hershberger   env: Add support ...
118
119
120
121
   * Look up the access of a variable directly from the .flags var.
   */
  enum env_flags_varaccess env_flags_get_access(const char *name);
  /*
30fd4fadb   Joe Hershberger   tools/env: Add en...
122
123
124
125
126
   * Validate the newval for its type to conform with the requirements defined by
   * its flags (directly looked at the .flags var).
   */
  int env_flags_validate_type(const char *name, const char *newval);
  /*
267541f77   Joe Hershberger   env: Add support ...
127
128
129
130
131
132
133
134
135
136
   * Validate the newval for its access to conform with the requirements defined
   * by its flags (directly looked at the .flags var).
   */
  int env_flags_validate_access(const char *name, int check_mask);
  /*
   * Validate that the proposed access to variable "name" is valid according to
   * the defined flags for that variable, if any.
   */
  int env_flags_validate_varaccess(const char *name, int check_mask);
  /*
30fd4fadb   Joe Hershberger   tools/env: Add en...
137
138
   * Validate the parameters passed to "env set" for type compliance
   */
167f52587   Andreas Fenkart   tools: env valida...
139
  int env_flags_validate_env_set_params(char *name, char *const val[], int count);
30fd4fadb   Joe Hershberger   tools/env: Add en...
140
141
  
  #else /* !USE_HOSTCC */
2598090b7   Joe Hershberger   env: Add environm...
142
143
144
145
146
147
148
149
150
151
152
153
154
  #include <search.h>
  
  /*
   * When adding a variable to the environment, initialize the flags for that
   * variable.
   */
  void env_flags_init(ENTRY *var_entry);
  
  /*
   * Validate the newval for to conform with the requirements defined by its flags
   */
  int env_flags_validate(const ENTRY *item, const char *newval, enum env_op op,
  	int flag);
267541f77   Joe Hershberger   env: Add support ...
155
  #endif /* USE_HOSTCC */
2598090b7   Joe Hershberger   env: Add environm...
156
157
158
159
  /*
   * These are the binary flags used in the environment entry->flags variable to
   * decribe properties of veriables in the table
   */
267541f77   Joe Hershberger   env: Add support ...
160
  #define ENV_FLAGS_VARTYPE_BIN_MASK			0x00000007
2598090b7   Joe Hershberger   env: Add environm...
161
  /* The actual variable type values use the enum value (within the mask) */
267541f77   Joe Hershberger   env: Add support ...
162
163
164
165
166
  #define ENV_FLAGS_VARACCESS_PREVENT_DELETE		0x00000008
  #define ENV_FLAGS_VARACCESS_PREVENT_CREATE		0x00000010
  #define ENV_FLAGS_VARACCESS_PREVENT_OVERWR		0x00000020
  #define ENV_FLAGS_VARACCESS_PREVENT_NONDEF_OVERWR	0x00000040
  #define ENV_FLAGS_VARACCESS_BIN_MASK			0x00000078
30fd4fadb   Joe Hershberger   tools/env: Add en...
167

2598090b7   Joe Hershberger   env: Add environm...
168
  #endif /* __ENV_FLAGS_H__ */