aboutsummaryrefslogtreecommitdiffstats
path: root/ctrl/libhicnctrl/src/api_private.h
diff options
context:
space:
mode:
Diffstat (limited to 'ctrl/libhicnctrl/src/api_private.h')
-rw-r--r--ctrl/libhicnctrl/src/api_private.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/ctrl/libhicnctrl/src/api_private.h b/ctrl/libhicnctrl/src/api_private.h
new file mode 100644
index 000000000..2f483ad2d
--- /dev/null
+++ b/ctrl/libhicnctrl/src/api_private.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2021 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 HICN_API_PRIVATE_H
+#define HICN_API_PRIVATE_H
+
+#include <hicn/ctrl/api.h>
+#include <hicn/util/token.h>
+#include <hicn/util/log.h>
+#include <hicn/util/map.h>
+#ifndef HICN_VPP_PLUGIN
+#include <hicn/util/sstrncpy.h>
+#endif
+#include <hicn/validation.h>
+#include <ctype.h>
+
+#define ARRAY_SIZE(array) (sizeof(array) / sizeof(*array))
+
+/*
+ * Input validation
+ */
+
+static inline bool IS_VALID_ADDRESS(const hicn_ip_address_t *addr, int family) {
+ char addr_str[INET6_ADDRSTRLEN];
+ return !hicn_ip_address_empty(addr) &&
+ hicn_ip_address_ntop(addr, addr_str, INET6_ADDRSTRLEN, family) >= 0;
+}
+
+static inline bool IS_VALID_PREFIX_LEN(u8 len) {
+ return len <= MAX_IPV6_PREFIX_LEN;
+}
+
+// https://github.com/shemminger/iproute2/blob/50b668bdbf0ebc270495eb4b352d0c3982159d0a/lib/utils.c#L825
+static inline bool IS_VALID_INTERFACE_NAME(const char *name) {
+ size_t len = strnlen_s(name, INTERFACE_LEN);
+ if (len == 0 || len >= IFNAMSIZ) return true;
+
+ while (*name) {
+ if (*name == '/' || isspace(*name)) return false;
+ ++name;
+ }
+
+ return true;
+}
+
+static inline bool IS_VALID_NAME(const char *name) {
+ return is_symbolic_name(name, SYMBOLIC_NAME_LEN);
+}
+
+static inline bool IS_VALID_STR_ID(const char *name) {
+ return is_number(name, SYMBOLIC_NAME_LEN);
+}
+
+#define IS_VALID_TYPE(x) IS_VALID_ENUM_TYPE(FACE_TYPE, x)
+#define IS_VALID_ADDR_TYPE(x) ((x >= ADDR_INET) && (x <= ADDR_UNIX))
+#define IS_VALID_FACE_ID(x) ((x) != INVALID_FACE_ID)
+
+#define IS_VALID_ID(x) (1)
+#define IS_VALID_POLICY(x) (1)
+
+typedef struct hc_sock_impl_s hc_sock_impl_t;
+
+int hc_data_ensure_available(hc_data_t *data, size_t count);
+u8 *hc_data_get_next(hc_data_t *data);
+
+#endif // HICN_API_PRIVATE_H