On Mon, Feb 18, 2019 at 10:11:03PM +0100, Mark Kettenis wrote: > > Date: Mon, 18 Feb 2019 21:59:38 +0100 > > From: Claudio Jeker <cje...@diehard.n-r-g.com> > > > > In some places bgpd just wants something bigger then a 32bit int. > > Instead of using int64_t or u_int64_t use (unsigned) long long which is at > > least 64bit and therefor good enough. Makes the mess with type definition > > of int64_t on various systems go away (including a bunch of type casts). > > While there also apply the endian.h cleanup done in bgpd a few days ago. > > > > OK? > > You could use <stdint.h> and uint64_t instead. That should be > portable. But you'd still need to be careful about printf statements > since (u)int64_t might be (unsigned) long on some systems.
printf should be no issue if you use the correct PRI*64 (PRIu64 or PRId64) macro from <inttypes.h>. Both <stdint.h> and <inttypes.h> are C99. E.g. uint64_t thing; /* ... */ printf("The value is %" PRIu64 "\n", thing); ... but I'm really not qualified to say anything about what you guys should do. Cheers, > > Oh, long long doesn't work on MSVC, but you probably don't care about > that. > > > -- > > :wq Claudio > > > > Index: usr.sbin/bgpctl/bgpctl.c > > =================================================================== > > RCS file: /cvs/src/usr.sbin/bgpctl/bgpctl.c,v > > retrieving revision 1.229 > > diff -u -p -r1.229 bgpctl.c > > --- usr.sbin/bgpctl/bgpctl.c 11 Feb 2019 15:47:55 -0000 1.229 > > +++ usr.sbin/bgpctl/bgpctl.c 18 Feb 2019 20:53:38 -0000 > > @@ -23,6 +23,7 @@ > > #include <sys/stat.h> > > #include <sys/un.h> > > > > +#include <endian.h> > > #include <err.h> > > #include <errno.h> > > #include <fcntl.h> > > @@ -84,7 +85,6 @@ void show_attr(void *, u_int16_t, int) > > void show_community(u_char *, u_int16_t); > > void show_large_community(u_char *, u_int16_t); > > void show_ext_community(u_char *, u_int16_t); > > -char *fmt_mem(int64_t); > > int show_rib_memory_msg(struct imsg *); > > void send_filterset(struct imsgbuf *, struct > > filter_set_head *); > > const char *get_errstr(u_int8_t, u_int8_t); > > @@ -1761,12 +1761,12 @@ show_ext_community(u_char *data, u_int16 > > case EXT_COMMUNITY_TRANS_OPAQUE: > > case EXT_COMMUNITY_TRANS_EVPN: > > memcpy(&ext, data + i, sizeof(ext)); > > - ext = betoh64(ext) & 0xffffffffffffLL; > > - printf("0x%llx", ext); > > + ext = be64toh(ext) & 0xffffffffffffLL; > > + printf("0x%llx", (unsigned long long)ext); > > break; > > case EXT_COMMUNITY_NON_TRANS_OPAQUE: > > memcpy(&ext, data + i, sizeof(ext)); > > - ext = betoh64(ext) & 0xffffffffffffLL; > > + ext = be64toh(ext) & 0xffffffffffffLL; > > switch (ext) { > > case EXT_COMMUNITY_OVS_VALID: > > printf("valid "); > > @@ -1778,26 +1778,26 @@ show_ext_community(u_char *data, u_int16 > > printf("invalid "); > > break; > > default: > > - printf("0x%llx ", ext); > > + printf("0x%llx ", (unsigned long long)ext); > > break; > > } > > break; > > default: > > memcpy(&ext, data + i, sizeof(ext)); > > - printf("0x%llx", betoh64(ext)); > > + printf("0x%llx", (unsigned long long)be64toh(ext)); > > } > > if (i + 8 < len) > > printf(", "); > > } > > } > > > > -char * > > -fmt_mem(int64_t num) > > +static char * > > +fmt_mem(long long num) > > { > > static char buf[16]; > > > > if (fmt_scaled(num, buf) == -1) > > - snprintf(buf, sizeof(buf), "%lldB", (long long)num); > > + snprintf(buf, sizeof(buf), "%lldB", num); > > > > return (buf); > > } > > @@ -1822,31 +1822,31 @@ show_rib_memory_msg(struct imsg *imsg) > > continue; > > pts += stats.pt_cnt[i] * pt_sizes[i]; > > printf("%10lld %s network entries using %s of memory\n", > > - (long long)stats.pt_cnt[i], aid_vals[i].name, > > + stats.pt_cnt[i], aid_vals[i].name, > > fmt_mem(stats.pt_cnt[i] * pt_sizes[i])); > > } > > printf("%10lld rib entries using %s of memory\n", > > - (long long)stats.rib_cnt, fmt_mem(stats.rib_cnt * > > + stats.rib_cnt, fmt_mem(stats.rib_cnt * > > sizeof(struct rib_entry))); > > printf("%10lld prefix entries using %s of memory\n", > > - (long long)stats.prefix_cnt, fmt_mem(stats.prefix_cnt * > > + stats.prefix_cnt, fmt_mem(stats.prefix_cnt * > > sizeof(struct prefix))); > > printf("%10lld BGP path attribute entries using %s of memory\n", > > - (long long)stats.path_cnt, fmt_mem(stats.path_cnt * > > + stats.path_cnt, fmt_mem(stats.path_cnt * > > sizeof(struct rde_aspath))); > > printf("\t and holding %lld references\n", > > - (long long)stats.path_refs); > > + stats.path_refs); > > printf("%10lld BGP AS-PATH attribute entries using " > > "%s of memory\n\t and holding %lld references\n", > > - (long long)stats.aspath_cnt, fmt_mem(stats.aspath_size), > > - (long long)stats.aspath_refs); > > + stats.aspath_cnt, fmt_mem(stats.aspath_size), > > + stats.aspath_refs); > > printf("%10lld BGP attributes entries using %s of memory\n", > > - (long long)stats.attr_cnt, fmt_mem(stats.attr_cnt * > > + stats.attr_cnt, fmt_mem(stats.attr_cnt * > > sizeof(struct attr))); > > printf("\t and holding %lld references\n", > > - (long long)stats.attr_refs); > > + stats.attr_refs); > > printf("%10lld BGP attributes using %s of memory\n", > > - (long long)stats.attr_dcnt, fmt_mem(stats.attr_data)); > > + stats.attr_dcnt, fmt_mem(stats.attr_data)); > > printf("%10lld as-set elements in %lld tables using " > > "%s of memory\n", stats.aset_nmemb, stats.aset_cnt, > > fmt_mem(stats.aset_size)); > > Index: usr.sbin/bgpd/bgpd.h > > =================================================================== > > RCS file: /cvs/src/usr.sbin/bgpd/bgpd.h,v > > retrieving revision 1.372 > > diff -u -p -r1.372 bgpd.h > > --- usr.sbin/bgpd/bgpd.h 18 Feb 2019 12:35:08 -0000 1.372 > > +++ usr.sbin/bgpd/bgpd.h 18 Feb 2019 20:53:38 -0000 > > @@ -1064,33 +1064,33 @@ extern struct rib_names ribnames; > > #define AS_NONE 0 > > > > struct rde_memstats { > > - int64_t path_cnt; > > - int64_t path_refs; > > - int64_t prefix_cnt; > > - int64_t rib_cnt; > > - int64_t pt_cnt[AID_MAX]; > > - int64_t nexthop_cnt; > > - int64_t aspath_cnt; > > - int64_t aspath_size; > > - int64_t aspath_refs; > > - int64_t attr_cnt; > > - int64_t attr_refs; > > - int64_t attr_data; > > - int64_t attr_dcnt; > > - int64_t aset_cnt; > > - int64_t aset_size; > > - int64_t aset_nmemb; > > - int64_t pset_cnt; > > - int64_t pset_size; > > + long long path_cnt; > > + long long path_refs; > > + long long prefix_cnt; > > + long long rib_cnt; > > + long long pt_cnt[AID_MAX]; > > + long long nexthop_cnt; > > + long long aspath_cnt; > > + long long aspath_size; > > + long long aspath_refs; > > + long long attr_cnt; > > + long long attr_refs; > > + long long attr_data; > > + long long attr_dcnt; > > + long long aset_cnt; > > + long long aset_size; > > + long long aset_nmemb; > > + long long pset_cnt; > > + long long pset_size; > > }; > > > > struct rde_hashstats { > > char name[16]; > > - int64_t num; > > - int64_t min; > > - int64_t max; > > - int64_t sum; > > - int64_t sumq; > > + long long num; > > + long long min; > > + long long max; > > + long long sum; > > + long long sumq; > > }; > > > > #define MRT_FILE_LEN 512 > > Index: usr.sbin/bgpd/session.h > > =================================================================== > > RCS file: /cvs/src/usr.sbin/bgpd/session.h,v > > retrieving revision 1.131 > > diff -u -p -r1.131 session.h > > --- usr.sbin/bgpd/session.h 18 Feb 2019 09:58:19 -0000 1.131 > > +++ usr.sbin/bgpd/session.h 18 Feb 2019 20:53:38 -0000 > > @@ -149,22 +149,22 @@ struct ctl_conn { > > TAILQ_HEAD(ctl_conns, ctl_conn) ctl_conns; > > > > struct peer_stats { > > - u_int64_t msg_rcvd_open; > > - u_int64_t msg_rcvd_update; > > - u_int64_t msg_rcvd_notification; > > - u_int64_t msg_rcvd_keepalive; > > - u_int64_t msg_rcvd_rrefresh; > > - u_int64_t msg_sent_open; > > - u_int64_t msg_sent_update; > > - u_int64_t msg_sent_notification; > > - u_int64_t msg_sent_keepalive; > > - u_int64_t msg_sent_rrefresh; > > - u_int64_t prefix_rcvd_update; > > - u_int64_t prefix_rcvd_withdraw; > > - u_int64_t prefix_rcvd_eor; > > - u_int64_t prefix_sent_update; > > - u_int64_t prefix_sent_withdraw; > > - u_int64_t prefix_sent_eor; > > + unsigned long long msg_rcvd_open; > > + unsigned long long msg_rcvd_update; > > + unsigned long long msg_rcvd_notification; > > + unsigned long long msg_rcvd_keepalive; > > + unsigned long long msg_rcvd_rrefresh; > > + unsigned long long msg_sent_open; > > + unsigned long long msg_sent_update; > > + unsigned long long msg_sent_notification; > > + unsigned long long msg_sent_keepalive; > > + unsigned long long msg_sent_rrefresh; > > + unsigned long long prefix_rcvd_update; > > + unsigned long long prefix_rcvd_withdraw; > > + unsigned long long prefix_rcvd_eor; > > + unsigned long long prefix_sent_update; > > + unsigned long long prefix_sent_withdraw; > > + unsigned long long prefix_sent_eor; > > time_t last_updown; > > time_t last_read; > > u_int32_t prefix_cnt; > > > > -- Andreas Kusalananda Kähäri, National Bioinformatics Infrastructure Sweden (NBIS), Uppsala University, Sweden.