From c6b6b53b294ae37e35f802769a6da21a88f63e18 Mon Sep 17 00:00:00 2001 From: Anuradha Karuppiah Date: Tue, 19 Mar 2019 11:36:41 -0700 Subject: [PATCH] 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 --- lib/prefix.c | 29 +++++++++++++++++++++++++++++ lib/prefix.h | 12 ++++++++++++ pimd/pim_str.c | 37 +------------------------------------ pimd/pim_str.h | 5 +++-- 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("", sg->src, src_str, sizeof(src_str)); + prefix_mcast_inet4_dump("", 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("", sg->src, src_str, sizeof(src_str)); - pim_inet4_dump("", 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("", sg->src, src_str, sizeof(src_str)); - pim_inet4_dump("", 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 -- 2.39.5