Integrated address print lengths
Minor changes by Ondrej Santiago Zajicek
This commit is contained in:
parent
9656dce72e
commit
7fd4143ead
8 changed files with 38 additions and 27 deletions
10
lib/ip.h
10
lib/ip.h
|
@ -33,6 +33,10 @@
|
||||||
#define IP4_MAX_PREFIX_LENGTH 32
|
#define IP4_MAX_PREFIX_LENGTH 32
|
||||||
#define IP6_MAX_PREFIX_LENGTH 128
|
#define IP6_MAX_PREFIX_LENGTH 128
|
||||||
|
|
||||||
|
#define IP4_MAX_TEXT_LENGTH 15 /* "255.255.255.255" */
|
||||||
|
#define IP6_MAX_TEXT_LENGTH 39 /* "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" */
|
||||||
|
#define IPA_MAX_TEXT_LENGTH 39
|
||||||
|
|
||||||
#define IP4_MIN_MTU 576
|
#define IP4_MIN_MTU 576
|
||||||
#define IP6_MIN_MTU 1280
|
#define IP6_MIN_MTU 1280
|
||||||
|
|
||||||
|
@ -42,12 +46,6 @@
|
||||||
#define IP6_HEADER_LENGTH 40
|
#define IP6_HEADER_LENGTH 40
|
||||||
#define UDP_HEADER_LENGTH 8
|
#define UDP_HEADER_LENGTH 8
|
||||||
|
|
||||||
#ifdef IPV6
|
|
||||||
#define STD_ADDRESS_P_LENGTH 39
|
|
||||||
#else
|
|
||||||
#define STD_ADDRESS_P_LENGTH 15
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUGGING
|
#ifdef DEBUGGING
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,13 @@ const u8 net_max_prefix_length[] = {
|
||||||
[NET_VPN6] = IP4_MAX_PREFIX_LENGTH
|
[NET_VPN6] = IP4_MAX_PREFIX_LENGTH
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const u16 net_max_text_length[] = {
|
||||||
|
[NET_IP4] = 18, /* "255.255.255.255/32" */
|
||||||
|
[NET_IP6] = 43, /* "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128" */
|
||||||
|
[NET_VPN4] = 40, /* "4294967296:4294967296 255.255.255.255/32" */
|
||||||
|
[NET_VPN6] = 65, /* "4294967296:4294967296 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128" */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
net_format(const net_addr *N, char *buf, int buflen)
|
net_format(const net_addr *N, char *buf, int buflen)
|
||||||
|
|
10
lib/net.h
10
lib/net.h
|
@ -68,7 +68,11 @@ typedef union net_addr_union {
|
||||||
|
|
||||||
|
|
||||||
extern const u16 net_addr_length[];
|
extern const u16 net_addr_length[];
|
||||||
extern const u8 net_max_prefix_length[];
|
extern const u8 net_max_prefix_length[];
|
||||||
|
extern const u16 net_max_text_length[];
|
||||||
|
|
||||||
|
#define NET_MAX_TEXT_LENGTH 65
|
||||||
|
|
||||||
|
|
||||||
#define NET_ADDR_IP4(prefix,pxlen) \
|
#define NET_ADDR_IP4(prefix,pxlen) \
|
||||||
((net_addr_ip4) { NET_IP4, pxlen, sizeof(net_addr_ip4), prefix })
|
((net_addr_ip4) { NET_IP4, pxlen, sizeof(net_addr_ip4), prefix })
|
||||||
|
@ -103,6 +107,7 @@ static inline void net_fill_ipa(net_addr *a, ip_addr prefix, uint pxlen)
|
||||||
net_fill_ip6(a, ipa_to_ip6(prefix), pxlen);
|
net_fill_ip6(a, ipa_to_ip6(prefix), pxlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline ip4_addr net4_prefix(const net_addr *a)
|
static inline ip4_addr net4_prefix(const net_addr *a)
|
||||||
{ return ((net_addr_ip4 *) a)->prefix; }
|
{ return ((net_addr_ip4 *) a)->prefix; }
|
||||||
|
|
||||||
|
@ -243,6 +248,3 @@ int net_in_netX(const net_addr *A, const net_addr *N);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
21
lib/printf.c
21
lib/printf.c
|
@ -139,7 +139,7 @@ int bvsnprintf(char *buf, int size, const char *fmt, va_list args)
|
||||||
u32 x;
|
u32 x;
|
||||||
char *str, *start;
|
char *str, *start;
|
||||||
const char *s;
|
const char *s;
|
||||||
char ipbuf[STD_ADDRESS_P_LENGTH+1];
|
char ipbuf[NET_MAX_TEXT_LENGTH+1];
|
||||||
struct iface *iface;
|
struct iface *iface;
|
||||||
|
|
||||||
int flags; /* flags to number() */
|
int flags; /* flags to number() */
|
||||||
|
@ -236,12 +236,14 @@ int bvsnprintf(char *buf, int size, const char *fmt, va_list args)
|
||||||
case 'M':
|
case 'M':
|
||||||
s = strerror(va_arg(args, int));
|
s = strerror(va_arg(args, int));
|
||||||
goto str;
|
goto str;
|
||||||
case 'N':
|
case 'N': {
|
||||||
|
net_addr *n = va_arg(args, net_addr *);
|
||||||
if (field_width == 1)
|
if (field_width == 1)
|
||||||
field_width = STD_ADDRESS_P_LENGTH; /* XXXX */
|
field_width = net_max_text_length[n->type];
|
||||||
net_format(va_arg(args, net_addr *), ipbuf, sizeof(ipbuf));
|
net_format(n, ipbuf, sizeof(ipbuf));
|
||||||
s = ipbuf;
|
s = ipbuf;
|
||||||
goto str;
|
goto str;
|
||||||
|
}
|
||||||
case 's':
|
case 's':
|
||||||
s = va_arg(args, char *);
|
s = va_arg(args, char *);
|
||||||
if (!s)
|
if (!s)
|
||||||
|
@ -287,17 +289,18 @@ int bvsnprintf(char *buf, int size, const char *fmt, va_list args)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* IP address */
|
/* IP address */
|
||||||
case 'I':
|
case 'I': {
|
||||||
|
ip_addr a = va_arg(args, ip_addr);
|
||||||
if (flags & SPECIAL)
|
if (flags & SPECIAL)
|
||||||
ipa_ntox(va_arg(args, ip_addr), ipbuf);
|
ipa_ntox(a, ipbuf);
|
||||||
else {
|
else {
|
||||||
ipa_ntop(va_arg(args, ip_addr), ipbuf);
|
ipa_ntop(a, ipbuf);
|
||||||
if (field_width == 1)
|
if (field_width == 1)
|
||||||
field_width = STD_ADDRESS_P_LENGTH;
|
field_width = (ipa_is_ip4(a) ? IP4_MAX_TEXT_LENGTH : IP6_MAX_TEXT_LENGTH);
|
||||||
}
|
}
|
||||||
s = ipbuf;
|
s = ipbuf;
|
||||||
goto str;
|
goto str;
|
||||||
|
}
|
||||||
/* Interface scope after link-local IP address */
|
/* Interface scope after link-local IP address */
|
||||||
case 'J':
|
case 'J':
|
||||||
iface = va_arg(args, struct iface *);
|
iface = va_arg(args, struct iface *);
|
||||||
|
|
|
@ -742,7 +742,7 @@ iface_patts_equal(list *a, list *b, int (*comp)(struct iface_patt *, struct ifac
|
||||||
static void
|
static void
|
||||||
if_show_addr(struct ifa *a)
|
if_show_addr(struct ifa *a)
|
||||||
{
|
{
|
||||||
byte opp[STD_ADDRESS_P_LENGTH + 16];
|
byte opp[IPA_MAX_TEXT_LENGTH + 16];
|
||||||
|
|
||||||
if (ipa_nonzero(a->opposite))
|
if (ipa_nonzero(a->opposite))
|
||||||
bsprintf(opp, ", opposite %I", a->opposite);
|
bsprintf(opp, ", opposite %I", a->opposite);
|
||||||
|
@ -793,7 +793,7 @@ void
|
||||||
if_show_summary(void)
|
if_show_summary(void)
|
||||||
{
|
{
|
||||||
struct iface *i;
|
struct iface *i;
|
||||||
byte addr[STD_ADDRESS_P_LENGTH + 16];
|
byte addr[IPA_MAX_TEXT_LENGTH + 16];
|
||||||
|
|
||||||
cli_msg(-2005, "interface state address");
|
cli_msg(-2005, "interface state address");
|
||||||
WALK_LIST(i, iface_list)
|
WALK_LIST(i, iface_list)
|
||||||
|
|
|
@ -220,7 +220,7 @@ rte_mergable(rte *pri, rte *sec)
|
||||||
static void
|
static void
|
||||||
rte_trace(struct proto *p, rte *e, int dir, char *msg)
|
rte_trace(struct proto *p, rte *e, int dir, char *msg)
|
||||||
{
|
{
|
||||||
byte via[STD_ADDRESS_P_LENGTH+32];
|
byte via[IPA_MAX_TEXT_LENGTH+32];
|
||||||
|
|
||||||
rt_format_via(e, via);
|
rt_format_via(e, via);
|
||||||
log(L_TRACE "%s %c %s %N %s", p->name, dir, msg, e->net->n.addr, via);
|
log(L_TRACE "%s %c %s %N %s", p->name, dir, msg, e->net->n.addr, via);
|
||||||
|
@ -2383,7 +2383,8 @@ rt_format_via(rte *e, byte *via)
|
||||||
static void
|
static void
|
||||||
rt_show_rte(struct cli *c, byte *ia, rte *e, struct rt_show_data *d, ea_list *tmpa)
|
rt_show_rte(struct cli *c, byte *ia, rte *e, struct rt_show_data *d, ea_list *tmpa)
|
||||||
{
|
{
|
||||||
byte via[STD_ADDRESS_P_LENGTH+32], from[STD_ADDRESS_P_LENGTH+8];
|
byte via[IPA_MAX_TEXT_LENGTH+32];
|
||||||
|
byte from[IPA_MAX_TEXT_LENGTH+8];
|
||||||
byte tm[TM_DATETIME_BUFFER_SIZE], info[256];
|
byte tm[TM_DATETIME_BUFFER_SIZE], info[256];
|
||||||
rta *a = e->attrs;
|
rta *a = e->attrs;
|
||||||
int primary = (e->net->routes == e);
|
int primary = (e->net->routes == e);
|
||||||
|
@ -2424,7 +2425,7 @@ static void
|
||||||
rt_show_net(struct cli *c, net *n, struct rt_show_data *d)
|
rt_show_net(struct cli *c, net *n, struct rt_show_data *d)
|
||||||
{
|
{
|
||||||
rte *e, *ee;
|
rte *e, *ee;
|
||||||
byte ia[STD_ADDRESS_P_LENGTH+8];
|
byte ia[NET_MAX_TEXT_LENGTH+1];
|
||||||
struct ea_list *tmpa;
|
struct ea_list *tmpa;
|
||||||
struct announce_hook *a = NULL;
|
struct announce_hook *a = NULL;
|
||||||
int first = 1;
|
int first = 1;
|
||||||
|
|
|
@ -1094,7 +1094,7 @@ static inline void
|
||||||
show_lsa_external(struct top_hash_entry *he, int ospf2)
|
show_lsa_external(struct top_hash_entry *he, int ospf2)
|
||||||
{
|
{
|
||||||
struct ospf_lsa_ext_local rt;
|
struct ospf_lsa_ext_local rt;
|
||||||
char str_via[STD_ADDRESS_P_LENGTH + 8] = "";
|
char str_via[IPA_MAX_TEXT_LENGTH + 8] = "";
|
||||||
char str_tag[16] = "";
|
char str_tag[16] = "";
|
||||||
|
|
||||||
if (he->lsa_type == LSA_T_EXT)
|
if (he->lsa_type == LSA_T_EXT)
|
||||||
|
|
|
@ -643,7 +643,7 @@ struct protocol proto_static = {
|
||||||
static void
|
static void
|
||||||
static_show_rt(struct static_route *r)
|
static_show_rt(struct static_route *r)
|
||||||
{
|
{
|
||||||
byte via[STD_ADDRESS_P_LENGTH + 16];
|
byte via[IPA_MAX_TEXT_LENGTH + 25];
|
||||||
|
|
||||||
switch (r->dest)
|
switch (r->dest)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue