aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/sys_util.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/sys_util.h')
-rw-r--r--src/plugins/sys_util.h40
1 files changed, 35 insertions, 5 deletions
diff --git a/src/plugins/sys_util.h b/src/plugins/sys_util.h
index 692a012..3f85537 100644
--- a/src/plugins/sys_util.h
+++ b/src/plugins/sys_util.h
@@ -89,13 +89,12 @@ static inline int ip_prefix_split(const char* ip_prefix)
* @brief Get IPv4 host address from IPv4 prefix.
*
* @param[out] dst Host IPv4 address.
- * @param[in] src IPv4 Prefix.
- * @param[in] length dst buffer length.
+ * @param[in] src IPv4 prefix.
* @param[out] prefix Get Prefix length, optional value. Can be NULL.
* @return -1 when failure, 0 on success.
*/
static inline int
-prefix2address(char *dst, const char *src, uint8_t *prefix_length)
+prefix2ip4(char *dst, const char *src, uint8_t *prefix_length)
{
if (!src || !dst)
return -1;
@@ -104,10 +103,41 @@ prefix2address(char *dst, const char *src, uint8_t *prefix_length)
if (!p)
return -1; // '/' not found
- if ((p - src + 1) > VPP_IP4_ADDRESS_STRING_LEN) //+ 1 needed for \0
+ size_t size = p - src;
+ if ((size + 1) > VPP_IP4_ADDRESS_STRING_LEN) //+ 1 needed for \0
return -1;
- strncpy(dst, src, VPP_IP4_ADDRESS_STRING_LEN);
+ strncpy(dst, src, size);
+
+ if (!prefix_length)
+ *prefix_length = atoi(++p);
+
+ return 0;
+}
+
+/**
+ * @brief Get IPv6 host address from IPv6 prefix.
+ *
+ * @param[out] dst Host IPv6 address.
+ * @param[in] src IPv6 prefix.
+ * @param[out] prefix Get Prefix length, optional value. Can be NULL.
+ * @return -1 when failure, 0 on success.
+ */
+static inline int
+prefix2ip6(char *dst, const char *src, uint8_t *prefix_length)
+{
+ if (!src || !dst)
+ return -1;
+
+ char *p = strchr(src, '/');
+ if (!p)
+ return -1; // '/' not found
+
+ size_t size = p - src;
+ if ((size + 1) > VPP_IP6_ADDRESS_STRING_LEN) //+ 1 needed for \0
+ return -1;
+
+ strncpy(dst, src, size);
if (!prefix_length)
*prefix_length = atoi(++p);