version 1.1.1.2, 2012/10/09 09:22:28
|
version 1.1.1.3, 2016/11/02 10:09:11
|
Line 27
|
Line 27
|
#include "sockunion.h" |
#include "sockunion.h" |
#include "memory.h" |
#include "memory.h" |
#include "log.h" |
#include "log.h" |
| |
/* Maskbit. */ |
/* Maskbit. */ |
static const u_char maskbit[] = {0x00, 0x80, 0xc0, 0xe0, 0xf0, |
static const u_char maskbit[] = {0x00, 0x80, 0xc0, 0xe0, 0xf0, |
0xf8, 0xfc, 0xfe, 0xff}; |
0xf8, 0xfc, 0xfe, 0xff}; |
Line 186 prefix6_bit (const struct in6_addr *prefix, const u_ch
|
Line 186 prefix6_bit (const struct in6_addr *prefix, const u_ch
|
{ |
{ |
return prefix_bit((const u_char *) &prefix->s6_addr, prefixlen); |
return prefix_bit((const u_char *) &prefix->s6_addr, prefixlen); |
} |
} |
| |
| int |
| str2family(const char *string) |
| { |
| if (!strcmp("ipv4", string)) |
| return AF_INET; |
| else if (!strcmp("ipv6", string)) |
| return AF_INET6; |
| else |
| return -1; |
| } |
| |
/* Address Famiy Identifier to Address Family converter. */ |
/* Address Famiy Identifier to Address Family converter. */ |
int |
int |
afi2family (afi_t afi) |
afi2family (afi_t afi) |
Line 212 family2afi (int family)
|
Line 223 family2afi (int family)
|
return 0; |
return 0; |
} |
} |
|
|
|
const char * |
|
safi2str(safi_t safi) |
|
{ |
|
switch (safi) { |
|
case SAFI_UNICAST: |
|
return "unicast"; |
|
case SAFI_MULTICAST: |
|
return "multicast"; |
|
case SAFI_ENCAP: |
|
return "encap"; |
|
case SAFI_MPLS_VPN: |
|
return "vpn"; |
|
} |
|
return NULL; |
|
} |
|
|
/* If n includes p prefix then return 1 else return 0. */ |
/* If n includes p prefix then return 1 else return 0. */ |
int |
int |
prefix_match (const struct prefix *n, const struct prefix *p) |
prefix_match (const struct prefix *n, const struct prefix *p) |
Line 494 prefix_ipv4_any (const struct prefix_ipv4 *p)
|
Line 521 prefix_ipv4_any (const struct prefix_ipv4 *p)
|
{ |
{ |
return (p->prefix.s_addr == 0 && p->prefixlen == 0); |
return (p->prefix.s_addr == 0 && p->prefixlen == 0); |
} |
} |
| |
#ifdef HAVE_IPV6 |
#ifdef HAVE_IPV6 |
|
|
/* Allocate a new ip version 6 route */ |
/* Allocate a new ip version 6 route */ |
Line 681 sockunion2prefix (const union sockunion *dest,
|
Line 708 sockunion2prefix (const union sockunion *dest,
|
|
|
/* Utility function of convert between struct prefix <=> union sockunion. */ |
/* Utility function of convert between struct prefix <=> union sockunion. */ |
struct prefix * |
struct prefix * |
sockunion2hostprefix (const union sockunion *su) | sockunion2hostprefix (const union sockunion *su, struct prefix *prefix) |
{ |
{ |
if (su->sa.sa_family == AF_INET) |
if (su->sa.sa_family == AF_INET) |
{ |
{ |
struct prefix_ipv4 *p; |
struct prefix_ipv4 *p; |
|
|
p = prefix_ipv4_new (); | p = prefix ? (struct prefix_ipv4 *) prefix : prefix_ipv4_new (); |
p->family = AF_INET; |
p->family = AF_INET; |
p->prefix = su->sin.sin_addr; |
p->prefix = su->sin.sin_addr; |
p->prefixlen = IPV4_MAX_BITLEN; |
p->prefixlen = IPV4_MAX_BITLEN; |
Line 698 sockunion2hostprefix (const union sockunion *su)
|
Line 725 sockunion2hostprefix (const union sockunion *su)
|
{ |
{ |
struct prefix_ipv6 *p; |
struct prefix_ipv6 *p; |
|
|
p = prefix_ipv6_new (); | p = prefix ? (struct prefix_ipv6 *) prefix : prefix_ipv6_new (); |
p->family = AF_INET6; |
p->family = AF_INET6; |
p->prefixlen = IPV6_MAX_BITLEN; |
p->prefixlen = IPV6_MAX_BITLEN; |
memcpy (&p->prefix, &su->sin6.sin6_addr, sizeof (struct in6_addr)); |
memcpy (&p->prefix, &su->sin6.sin6_addr, sizeof (struct in6_addr)); |
Line 760 str2prefix (const char *str, struct prefix *p)
|
Line 787 str2prefix (const char *str, struct prefix *p)
|
return 0; |
return 0; |
} |
} |
|
|
int | const char * |
prefix2str (const struct prefix *p, char *str, int size) | prefix2str (union prefix46constptr pu, char *str, int size) |
{ |
{ |
|
const struct prefix *p = pu.p; |
char buf[BUFSIZ]; |
char buf[BUFSIZ]; |
|
|
inet_ntop (p->family, &p->u.prefix, buf, BUFSIZ); |
inet_ntop (p->family, &p->u.prefix, buf, BUFSIZ); |
snprintf (str, size, "%s/%d", buf, p->prefixlen); |
snprintf (str, size, "%s/%d", buf, p->prefixlen); |
return 0; | return str; |
} |
} |
|
|
struct prefix * |
struct prefix * |