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>
This commit is contained in:
Anuradha Karuppiah 2019-03-19 11:36:41 -07:00
parent 9718c54ef4
commit c6b6b53b29
4 changed files with 45 additions and 38 deletions

View file

@ -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;

View file

@ -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 *,

View file

@ -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;
}

View file

@ -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