"Das U-Boot" Source Tree
at master 194 lines 5.0 kB view raw
1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * (C) Copyright 2012 4 * Joe Hershberger, National Instruments, joe.hershberger@ni.com 5 */ 6 7#ifndef __ENV_FLAGS_H__ 8#define __ENV_FLAGS_H__ 9 10#include <config.h> 11 12enum env_flags_vartype { 13 env_flags_vartype_string, 14 env_flags_vartype_decimal, 15 env_flags_vartype_hex, 16 env_flags_vartype_bool, 17#ifdef CONFIG_NET 18 env_flags_vartype_ipaddr, 19 env_flags_vartype_macaddr, 20#endif 21 env_flags_vartype_end 22}; 23 24enum env_flags_varaccess { 25 env_flags_varaccess_any, 26 env_flags_varaccess_readonly, 27 env_flags_varaccess_writeonce, 28 env_flags_varaccess_changedefault, 29#ifdef CONFIG_ENV_WRITEABLE_LIST 30 env_flags_varaccess_writeable, 31#endif 32 env_flags_varaccess_end 33}; 34 35#define ENV_FLAGS_VAR ".flags" 36#define ENV_FLAGS_ATTR_MAX_LEN 2 37#define ENV_FLAGS_VARTYPE_LOC 0 38#define ENV_FLAGS_VARACCESS_LOC 1 39 40#ifndef CFG_ENV_FLAGS_LIST_STATIC 41#define CFG_ENV_FLAGS_LIST_STATIC "" 42#endif 43 44#ifdef CONFIG_NET 45#ifdef CONFIG_REGEX 46#define ETHADDR_WILDCARD "\\d*" 47#else 48#define ETHADDR_WILDCARD 49#endif 50#ifdef CONFIG_ENV_OVERWRITE 51#define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:ma," 52#else 53#ifdef CONFIG_OVERWRITE_ETHADDR_ONCE 54#define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:mc," 55#else 56#define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:mo," 57#endif 58#endif 59#define NET_FLAGS \ 60 "ipaddr:i," \ 61 "gatewayip:i," \ 62 "netmask:i," \ 63 "serverip:i," \ 64 "nvlan:d," \ 65 "vlan:d," \ 66 "dnsip:i," 67#else 68#define ETHADDR_FLAGS 69#define NET_FLAGS 70#endif 71 72#ifdef CONFIG_IPV6 73#define NET6_FLAGS \ 74 "ip6addr:s," \ 75 "serverip6:s," \ 76 "gatewayip6:s," 77#else 78#define NET6_FLAGS 79#endif 80 81#ifndef CONFIG_ENV_OVERWRITE 82#define SERIAL_FLAGS "serial#:so," 83#else 84#define SERIAL_FLAGS "" 85#endif 86 87#define ENV_FLAGS_LIST_STATIC \ 88 ETHADDR_FLAGS \ 89 NET_FLAGS \ 90 NET6_FLAGS \ 91 SERIAL_FLAGS \ 92 CFG_ENV_FLAGS_LIST_STATIC 93 94#ifdef CONFIG_CMD_ENV_FLAGS 95/* 96 * Print the whole list of available type flags. 97 */ 98void env_flags_print_vartypes(void); 99/* 100 * Print the whole list of available access flags. 101 */ 102void env_flags_print_varaccess(void); 103/* 104 * Return the name of the type. 105 */ 106const char *env_flags_get_vartype_name(enum env_flags_vartype type); 107/* 108 * Return the name of the access. 109 */ 110const char *env_flags_get_varaccess_name(enum env_flags_varaccess access); 111#endif 112 113/* 114 * Parse the flags string from a .flags attribute list into the vartype enum. 115 */ 116enum env_flags_vartype env_flags_parse_vartype(const char *flags); 117/* 118 * Parse the flags string from a .flags attribute list into the varaccess enum. 119 */ 120enum env_flags_varaccess env_flags_parse_varaccess(const char *flags); 121/* 122 * Parse the binary flags from a hash table entry into the varaccess enum. 123 */ 124enum env_flags_varaccess env_flags_parse_varaccess_from_binflags(int binflags); 125 126#ifdef CONFIG_NET 127/* 128 * Check if a string has the format of an Ethernet MAC address 129 */ 130int eth_validate_ethaddr_str(const char *addr); 131#endif 132 133#ifdef USE_HOSTCC 134/* 135 * Look up the type of a variable directly from the .flags var. 136 */ 137enum env_flags_vartype env_flags_get_type(const char *name); 138/* 139 * Look up the access of a variable directly from the .flags var. 140 */ 141enum env_flags_varaccess env_flags_get_access(const char *name); 142/* 143 * Validate the newval for its type to conform with the requirements defined by 144 * its flags (directly looked at the .flags var). 145 */ 146int env_flags_validate_type(const char *name, const char *newval); 147/* 148 * Validate the newval for its access to conform with the requirements defined 149 * by its flags (directly looked at the .flags var). 150 */ 151int env_flags_validate_access(const char *name, int check_mask); 152/* 153 * Validate that the proposed access to variable "name" is valid according to 154 * the defined flags for that variable, if any. 155 */ 156int env_flags_validate_varaccess(const char *name, int check_mask); 157/* 158 * Validate the parameters passed to "env set" for type compliance 159 */ 160int env_flags_validate_env_set_params(char *name, char *const val[], int count); 161 162#else /* !USE_HOSTCC */ 163 164#include <env.h> 165#include <search.h> 166 167/* 168 * When adding a variable to the environment, initialize the flags for that 169 * variable. 170 */ 171void env_flags_init(struct env_entry *var_entry); 172 173/* 174 * Validate the newval for to conform with the requirements defined by its flags 175 */ 176int env_flags_validate(const struct env_entry *item, const char *newval, 177 enum env_op op, int flag); 178 179#endif /* USE_HOSTCC */ 180 181/* 182 * These are the binary flags used in the environment entry->flags variable to 183 * decribe properties of veriables in the table 184 */ 185#define ENV_FLAGS_VARTYPE_BIN_MASK 0x00000007 186/* The actual variable type values use the enum value (within the mask) */ 187#define ENV_FLAGS_VARACCESS_PREVENT_DELETE 0x00000008 188#define ENV_FLAGS_VARACCESS_PREVENT_CREATE 0x00000010 189#define ENV_FLAGS_VARACCESS_PREVENT_OVERWR 0x00000020 190#define ENV_FLAGS_VARACCESS_PREVENT_NONDEF_OVERWR 0x00000040 191#define ENV_FLAGS_VARACCESS_WRITEABLE 0x00000080 192#define ENV_FLAGS_VARACCESS_BIN_MASK 0x000000f8 193 194#endif /* __ENV_FLAGS_H__ */