| /* |
| *------------------------------------------------------------------ |
| * svmdb.h - shared VM database |
| * |
| * Copyright (c) 2009 Cisco and/or its affiliates. |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at: |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| *------------------------------------------------------------------ |
| */ |
| |
| #ifndef __included_svmdb_h__ |
| #define __included_svmdb_h__ |
| |
| #include "svm.h" |
| |
| typedef enum |
| { |
| SVMDB_ACTION_ILLEGAL = 0, |
| SVMDB_ACTION_GET, /* not clear why anyone would care */ |
| SVMDB_ACTION_SET, |
| SVMDB_ACTION_UNSET, |
| } svmdb_action_t; |
| |
| typedef struct |
| { |
| int pid; |
| int signum; |
| u32 action:4; |
| u32 opaque:28; |
| } svmdb_notify_t; |
| |
| typedef struct |
| { |
| u8 *value; |
| svmdb_notify_t *notifications; |
| u32 elsize; |
| } svmdb_value_t; |
| |
| typedef enum |
| { |
| SVMDB_NAMESPACE_STRING = 0, |
| SVMDB_NAMESPACE_VEC, |
| SVMDB_N_NAMESPACES, |
| } svmdb_namespace_t; |
| |
| typedef struct |
| { |
| uword version; |
| /* pool of values */ |
| svmdb_value_t *values; |
| uword *namespaces[SVMDB_N_NAMESPACES]; |
| } svmdb_shm_hdr_t; |
| |
| #define SVMDB_SHM_VERSION 2 |
| |
| typedef struct |
| { |
| int flags; |
| int pid; |
| svm_region_t *db_rp; |
| svmdb_shm_hdr_t *shm; |
| } svmdb_client_t; |
| |
| typedef struct |
| { |
| int add_del; |
| svmdb_namespace_t nspace; |
| char *var; |
| u32 elsize; |
| int signum; |
| u32 action:4; |
| u32 opaque:28; |
| } svmdb_notification_args_t; |
| |
| typedef struct |
| { |
| const char *root_path; |
| uword size; |
| u32 uid; |
| u32 gid; |
| } svmdb_map_args_t; |
| |
| /* |
| * Must be a reasonable number, several mb smaller than |
| * SVM_GLOBAL_REGION_SIZE, or no donut for you... |
| */ |
| #define SVMDB_DEFAULT_SIZE (4<<20) |
| |
| svmdb_client_t *svmdb_map (svmdb_map_args_t *); |
| |
| void svmdb_unmap (svmdb_client_t * client); |
| void svmdb_local_unset_string_variable (svmdb_client_t * client, char *var); |
| void svmdb_local_set_string_variable (svmdb_client_t * client, |
| char *var, char *val); |
| char *svmdb_local_get_string_variable (svmdb_client_t * client, char *var); |
| void *svmdb_local_get_variable_reference (svmdb_client_t * client, |
| svmdb_namespace_t ns, char *var); |
| |
| void svmdb_local_dump_strings (svmdb_client_t * client); |
| |
| void svmdb_local_unset_vec_variable (svmdb_client_t * client, char *var); |
| void svmdb_local_set_vec_variable (svmdb_client_t * client, |
| char *var, void *val, u32 elsize); |
| void *svmdb_local_get_vec_variable (svmdb_client_t * client, char *var, |
| u32 elsize); |
| void svmdb_local_dump_vecs (svmdb_client_t * client); |
| |
| int svmdb_local_add_del_notification (svmdb_client_t * client, |
| svmdb_notification_args_t * args); |
| |
| void *svmdb_local_find_or_add_vec_variable (svmdb_client_t * client, |
| char *var, u32 nbytes); |
| |
| int svmdb_local_serialize_strings (svmdb_client_t * client, char *filename); |
| int svmdb_local_unserialize_strings (svmdb_client_t * client, char *filename); |
| |
| |
| #endif /* __included_svmdb_h__ */ |
| |
| /* |
| * fd.io coding-style-patch-verification: ON |
| * |
| * Local Variables: |
| * eval: (c-set-style "gnu") |
| * End: |
| */ |