summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnuradha Karuppiah <anuradhak@cumulusnetworks.com>2019-03-19 11:36:41 -0700
committerAnuradha Karuppiah <anuradhak@cumulusnetworks.com>2019-04-20 08:33:20 -0700
commitc6b6b53b294ae37e35f802769a6da21a88f63e18 (patch)
tree32d383a4c109206d71d609d8c9916a44ea21dfda
parent9718c54ef44f46e97ecb4aa4c570f4337113322c (diff)
lib: move SG prefix2str APIs from pimd to lib
This is to allow zebra to use these APIs instead of re-defining. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
-rw-r--r--lib/prefix.c29
-rw-r--r--lib/prefix.h12
-rw-r--r--pimd/pim_str.c37
-rw-r--r--pimd/pim_str.h5
4 files changed, 45 insertions, 38 deletions
diff --git a/lib/prefix.c b/lib/prefix.c
index 52bb266f11..6b91969218 100644
--- a/lib/prefix.c
+++ b/lib/prefix.c
@@ -1359,6 +1359,35 @@ const char *prefix2str(union prefixconstptr pu, char *str, int size)
return str;
}
+void prefix_mcast_inet4_dump(const char *onfail, struct in_addr addr,
+ char *buf, int buf_size)
+{
+ int save_errno = errno;
+
+ if (addr.s_addr == INADDR_ANY)
+ strcpy(buf, "*");
+ else {
+ if (!inet_ntop(AF_INET, &addr, buf, buf_size)) {
+ if (onfail)
+ snprintf(buf, buf_size, "%s", onfail);
+ }
+ }
+
+ errno = save_errno;
+}
+
+const char *prefix_sg2str(const struct prefix_sg *sg, char *sg_str)
+{
+ char src_str[INET_ADDRSTRLEN];
+ char grp_str[INET_ADDRSTRLEN];
+
+ prefix_mcast_inet4_dump("<src?>", sg->src, src_str, sizeof(src_str));
+ prefix_mcast_inet4_dump("<grp?>", sg->grp, grp_str, sizeof(grp_str));
+ snprintf(sg_str, PREFIX_SG_STR_LEN, "(%s,%s)", src_str, grp_str);
+
+ return sg_str;
+}
+
struct prefix *prefix_new(void)
{
struct prefix *p;
diff --git a/lib/prefix.h b/lib/prefix.h
index a1c2086b8d..ffc973f6ea 100644
--- a/lib/prefix.h
+++ b/lib/prefix.h
@@ -321,6 +321,15 @@ union prefixconstptr {
/* Maximum string length of the result of prefix2str */
#define PREFIX_STRLEN 80
+/*
+ * Longest possible length of a (S,G) string is 36 bytes
+ * 123.123.123.123 = 16 * 2
+ * (,) = 3
+ * NULL Character at end = 1
+ * (123.123.123.123,123.123.123.123)
+ */
+#define PREFIX_SG_STR_LEN 36
+
/* Max bit/byte length of IPv4 address. */
#define IPV4_MAX_BYTELEN 4
#define IPV4_MAX_BITLEN 32
@@ -394,6 +403,9 @@ extern int str2prefix(const char *, struct prefix *);
#define PREFIX2STR_BUFFER PREFIX_STRLEN
+extern void prefix_mcast_inet4_dump(const char *onfail, struct in_addr addr,
+ char *buf, int buf_size);
+extern const char *prefix_sg2str(const struct prefix_sg *sg, char *str);
extern const char *prefix2str(union prefixconstptr, char *, int);
extern int prefix_match(const struct prefix *, const struct prefix *);
extern int prefix_match_network_statement(const struct prefix *,
diff --git a/pimd/pim_str.c b/pimd/pim_str.c
index fa1a6e624c..f6acd08739 100644
--- a/pimd/pim_str.c
+++ b/pimd/pim_str.c
@@ -42,47 +42,12 @@ void pim_addr_dump(const char *onfail, struct prefix *p, char *buf,
errno = save_errno;
}
-void pim_inet4_dump(const char *onfail, struct in_addr addr, char *buf,
- int buf_size)
-{
- int save_errno = errno;
-
- if (addr.s_addr == INADDR_ANY)
- strcpy(buf, "*");
- else {
- if (!inet_ntop(AF_INET, &addr, buf, buf_size)) {
- zlog_warn(
- "pim_inet4_dump: inet_ntop(AF_INET,buf_size=%d): errno=%d: %s",
- buf_size, errno, safe_strerror(errno));
- if (onfail)
- snprintf(buf, buf_size, "%s", onfail);
- }
- }
-
- errno = save_errno;
-}
-
char *pim_str_sg_dump(const struct prefix_sg *sg)
{
- char src_str[INET_ADDRSTRLEN];
- char grp_str[INET_ADDRSTRLEN];
static char sg_str[PIM_SG_LEN];
- pim_inet4_dump("<src?>", sg->src, src_str, sizeof(src_str));
- pim_inet4_dump("<grp?>", sg->grp, grp_str, sizeof(grp_str));
- snprintf(sg_str, PIM_SG_LEN, "(%s,%s)", src_str, grp_str);
+ pim_str_sg_set(sg, sg_str);
return sg_str;
}
-char *pim_str_sg_set(const struct prefix_sg *sg, char *sg_str)
-{
- char src_str[INET_ADDRSTRLEN];
- char grp_str[INET_ADDRSTRLEN];
-
- pim_inet4_dump("<src?>", sg->src, src_str, sizeof(src_str));
- pim_inet4_dump("<grp?>", sg->grp, grp_str, sizeof(grp_str));
- snprintf(sg_str, PIM_SG_LEN, "(%s,%s)", src_str, grp_str);
-
- return sg_str;
-}
diff --git a/pimd/pim_str.h b/pimd/pim_str.h
index 12a33a810f..94ba324154 100644
--- a/pimd/pim_str.h
+++ b/pimd/pim_str.h
@@ -33,13 +33,14 @@
* NULL Character at end = 1
* (123.123.123.123,123,123,123,123)
*/
-#define PIM_SG_LEN 36
+#define PIM_SG_LEN PREFIX_SG_STR_LEN
+#define pim_inet4_dump prefix_mcast_inet4_dump
+#define pim_str_sg_set prefix_sg2str
void pim_addr_dump(const char *onfail, struct prefix *p, char *buf,
int buf_size);
void pim_inet4_dump(const char *onfail, struct in_addr addr, char *buf,
int buf_size);
char *pim_str_sg_dump(const struct prefix_sg *sg);
-char *pim_str_sg_set(const struct prefix_sg *sg, char *sg_str);
#endif