nflags-net.c (2390B)
1 // $Id$ --*- c -*-- 2 3 // Copyright (C) 2004 Enrico Scholz <ensc@delenn.intern.sigma-chemnitz.de> 4 // 5 // This program is free software; you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation; version 2 of the License. 8 // 9 // This program is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with this program; if not, write to the Free Software 16 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 18 19 #ifdef HAVE_CONFIG_H 20 # include <config.h> 21 #endif 22 23 #include "vserver.h" 24 #include "internal.h" 25 #include <lib_internal/util-dimof.h> 26 27 #include <string.h> 28 #include <strings.h> 29 #include <assert.h> 30 31 #define DECL(STR, VAL) { STR, sizeof(STR)-1, VAL } 32 33 static struct Mapping_uint64 const VALUES[] = { 34 DECL("lock", VC_NXF_INFO_LOCK), 35 DECL("private", VC_NXF_INFO_PRIVATE), 36 37 DECL("single_ip", VC_NXF_SINGLE_IP), 38 DECL("lback_remap", VC_NXF_LBACK_REMAP), 39 DECL("remap_lback", VC_NXF_LBACK_REMAP), 40 DECL("lback_allow", VC_NXF_LBACK_ALLOW), 41 42 DECL("hide_netif", VC_NXF_HIDE_NETIF), 43 DECL("hide_lback", VC_NXF_HIDE_LBACK), 44 45 DECL("state_setup", VC_NXF_STATE_SETUP), 46 DECL("state_admin", VC_NXF_STATE_ADMIN), 47 48 DECL("sc_helper", VC_NXF_SC_HELPER), 49 DECL("persistent", VC_NXF_PERSISTENT), 50 51 // Aliases for the legacy flags 52 DECL("info_lock", VC_NXF_INFO_LOCK), 53 DECL("info_private", VC_NXF_INFO_PRIVATE), 54 }; 55 56 inline static char const * 57 removePrefix(char const *str, size_t *len) 58 { 59 if ((len==0 || *len==0 || *len>4) && 60 strncasecmp("nxf_", str, 4)==0) { 61 if (len && *len>4) *len -= 4; 62 return str+4; 63 } 64 else 65 return str; 66 } 67 68 uint_least64_t 69 vc_text2nflag(char const *str, size_t len) 70 { 71 char const * tmp = removePrefix(str, &len); 72 ssize_t idx = utilvserver_value2text_uint64(tmp, len, 73 VALUES, DIM_OF(VALUES)); 74 if (idx==-1) return 0; 75 else return VALUES[idx].val; 76 } 77 78 char const * 79 vc_lonflag2text(uint_least64_t *val) 80 { 81 ssize_t idx = utilvserver_text2value_uint64(val, 82 VALUES, DIM_OF(VALUES)); 83 84 if (idx==-1) return 0; 85 else return VALUES[idx].id; 86 }