diff options
-rw-r--r-- | crda.c | 22 | ||||
-rw-r--r-- | crda.h | 49 |
2 files changed, 49 insertions, 22 deletions
@@ -94,28 +94,6 @@ static int error_handler(struct sockaddr_nl __attribute__((unused)) *nla, exit(err->error); } -/* Avoid stdlib */ -static int is_len_2(const char *alpha2) -{ - if (alpha2[0] == '\0' || (alpha2[1] == '\0')) - return 0; - if (alpha2[2] == '\0') - return 1; - return 0; -} - -static int is_valid_regdom(const char *alpha2) -{ - if (!is_len_2(alpha2)) - return 0; - - if (!is_alpha2(alpha2) && !is_world_regdom(alpha2)) - return 0; - - return 1; -} - - static int put_reg_rule(__u8 *db, int dblen, __be32 ruleptr, struct nl_msg *msg) { struct regdb_file_reg_rule *rule; @@ -0,0 +1,49 @@ +#include <stdlib.h> +#include <linux/types.h> + +/* Common regulatory functions and helpers */ + +void *crda_get_file_ptr(__u8 *db, int dblen, int structlen, __be32 ptr); +int crda_verify_db_signature(__u8 *db, int dblen, int siglen); + +static inline int is_world_regdom(const char *alpha2) +{ + if (alpha2[0] == '0' && alpha2[1] == '0') + return 1; + return 0; +} + +static inline int isalpha_upper(char letter) +{ + if (letter >= 'A' && letter <= 'Z') + return 1; + return 0; +} + +static inline int is_alpha2(const char *alpha2) +{ + if (isalpha_upper(alpha2[0]) && isalpha_upper(alpha2[1])) + return 1; + return 0; +} + +/* Avoid stdlib */ +static inline int is_len_2(const char *alpha2) +{ + if (alpha2[0] == '\0' || (alpha2[1] == '\0')) + return 0; + if (alpha2[2] == '\0') + return 1; + return 0; +} + +static inline int is_valid_regdom(const char *alpha2) +{ + if (!is_len_2(alpha2)) + return 0; + + if (!is_alpha2(alpha2) && !is_world_regdom(alpha2)) + return 0; + + return 1; +} |