forked from Mirror/frr
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:
parent
9718c54ef4
commit
c6b6b53b29
29
lib/prefix.c
29
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;
|
||||
|
|
12
lib/prefix.h
12
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 *,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue