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;
|
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 *prefix_new(void)
|
||||||
{
|
{
|
||||||
struct prefix *p;
|
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 */
|
/* Maximum string length of the result of prefix2str */
|
||||||
#define PREFIX_STRLEN 80
|
#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. */
|
/* Max bit/byte length of IPv4 address. */
|
||||||
#define IPV4_MAX_BYTELEN 4
|
#define IPV4_MAX_BYTELEN 4
|
||||||
#define IPV4_MAX_BITLEN 32
|
#define IPV4_MAX_BITLEN 32
|
||||||
|
@ -394,6 +403,9 @@ extern int str2prefix(const char *, struct prefix *);
|
||||||
|
|
||||||
#define PREFIX2STR_BUFFER PREFIX_STRLEN
|
#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 const char *prefix2str(union prefixconstptr, char *, int);
|
||||||
extern int prefix_match(const struct prefix *, const struct prefix *);
|
extern int prefix_match(const struct prefix *, const struct prefix *);
|
||||||
extern int prefix_match_network_statement(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;
|
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 *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];
|
static char sg_str[PIM_SG_LEN];
|
||||||
|
|
||||||
pim_inet4_dump("<src?>", sg->src, src_str, sizeof(src_str));
|
pim_str_sg_set(sg, sg_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;
|
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
|
* NULL Character at end = 1
|
||||||
* (123.123.123.123,123,123,123,123)
|
* (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,
|
void pim_addr_dump(const char *onfail, struct prefix *p, char *buf,
|
||||||
int buf_size);
|
int buf_size);
|
||||||
void pim_inet4_dump(const char *onfail, struct in_addr addr, char *buf,
|
void pim_inet4_dump(const char *onfail, struct in_addr addr, char *buf,
|
||||||
int buf_size);
|
int buf_size);
|
||||||
char *pim_str_sg_dump(const struct prefix_sg *sg);
|
char *pim_str_sg_dump(const struct prefix_sg *sg);
|
||||||
char *pim_str_sg_set(const struct prefix_sg *sg, char *sg_str);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue